Test that all emojis can be rendered

This CL adds tests for EmojiCompat, where it checks if a given emoji
metadata can be rendered by the Typeface loaded.

Test: Enhanced support.text.emoji.AllEmojisTest

Bug: 65353865
Change-Id: I9d174944b4beef631913dc324fc4cc4d383d3212
diff --git a/emoji/core/src/android/support/text/emoji/EmojiMetadata.java b/emoji/core/src/android/support/text/emoji/EmojiMetadata.java
index 810aa89..488dcf9 100644
--- a/emoji/core/src/android/support/text/emoji/EmojiMetadata.java
+++ b/emoji/core/src/android/support/text/emoji/EmojiMetadata.java
@@ -114,6 +114,13 @@
     }
 
     /**
+     * @return return typeface to be used to render this metadata
+     */
+    public Typeface getTypeface() {
+        return mMetadataRepo.getTypeface();
+    }
+
+    /**
      * @return a ThreadLocal instance of MetadataItem for this EmojiMetadata
      */
     private MetadataItem getMetadataItem() {
@@ -210,4 +217,18 @@
         return getMetadataItem().codepointsLength();
     }
 
+    @Override
+    public String toString() {
+        final StringBuilder builder = new StringBuilder();
+        builder.append(super.toString());
+        builder.append(", id:");
+        builder.append(Integer.toHexString(getId()));
+        builder.append(", codepoints:");
+        final int codepointsLength = getCodepointsLength();
+        for (int i = 0; i < codepointsLength; i++) {
+            builder.append(Integer.toHexString(getCodepointAt(i)));
+            builder.append(" ");
+        }
+        return builder.toString();
+    }
 }
diff --git a/emoji/core/tests/java/android/support/text/emoji/AllEmojisTest.java b/emoji/core/tests/java/android/support/text/emoji/AllEmojisTest.java
index b48a1be..f1e2b0f 100644
--- a/emoji/core/tests/java/android/support/text/emoji/AllEmojisTest.java
+++ b/emoji/core/tests/java/android/support/text/emoji/AllEmojisTest.java
@@ -24,10 +24,13 @@
 
 import android.annotation.TargetApi;
 import android.content.Context;
+import android.graphics.Paint;
 import android.support.test.InstrumentationRegistry;
 import android.support.test.filters.SdkSuppress;
 import android.support.test.filters.SmallTest;
 import android.support.text.emoji.util.TestString;
+import android.support.v4.graphics.PaintCompat;
+import android.text.Spanned;
 
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -61,6 +64,11 @@
      */
     private String mCodepoints;
 
+    /**
+     * Paint object used to check if Typeface can render the given emoji.
+     */
+    private Paint mPaint;
+
     @BeforeClass
     public static void setup() {
         EmojiCompat.reset(TestConfigBuilder.config());
@@ -107,6 +115,7 @@
     public AllEmojisTest(String string, String codepoints) {
         mString = string;
         mCodepoints = codepoints;
+        mPaint = new Paint();
     }
 
     @Test
@@ -114,6 +123,18 @@
         assertTrue("EmojiCompat should have emoji: " + mCodepoints,
                 EmojiCompat.get().hasEmojiGlyph(mString));
         assertEmojiCompatAddsEmoji(mString);
+        assertSpanCanRenderEmoji(mString);
+    }
+
+    private void assertSpanCanRenderEmoji(final String str) {
+        final Spanned spanned = (Spanned) EmojiCompat.get().process(new TestString(str).toString());
+        final EmojiSpan[] spans = spanned.getSpans(0, spanned.length(), EmojiSpan.class);
+        final EmojiMetadata metadata = spans[0].getMetadata();
+        mPaint.setTypeface(metadata.getTypeface());
+
+        final String codepoint = String.valueOf(Character.toChars(metadata.getId()));
+        assertTrue(metadata.toString() + " should be rendered",
+                PaintCompat.hasGlyph(mPaint, codepoint));
     }
 
     private void assertEmojiCompatAddsEmoji(final String str) {