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) {