diff --git a/core/tests/coretests/src/android/graphics/TypefaceTest.java b/core/tests/coretests/src/android/graphics/TypefaceTest.java index 6defe91131328..a528c1975177e 100644 --- a/core/tests/coretests/src/android/graphics/TypefaceTest.java +++ b/core/tests/coretests/src/android/graphics/TypefaceTest.java @@ -41,6 +41,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import java.nio.ByteOrder; +import java.util.HashMap; import java.util.Map; import java.util.Random; @@ -218,6 +219,10 @@ public class TypefaceTest { @SmallTest @Test public void testSetSystemFontMap() throws Exception { + + // Typeface.setSystemFontMap mutate the returned map. So copying for the backup. + HashMap backup = new HashMap<>(Typeface.getSystemFontMap()); + Context context = InstrumentationRegistry.getInstrumentation().getTargetContext(); Resources res = context.getResources(); Map fontMap = Map.of( @@ -226,27 +231,38 @@ public class TypefaceTest { "monospace", Typeface.create(res.getFont(R.font.samplefont3), Typeface.NORMAL), "sample", Typeface.create(res.getFont(R.font.samplefont4), Typeface.NORMAL), "sample-italic", Typeface.create(res.getFont(R.font.samplefont4), Typeface.ITALIC)); - Typeface.setSystemFontMap(fontMap); - // Test public static final fields - assertEquals(fontMap.get("sans-serif"), Typeface.DEFAULT); - assertEquals(Typeface.BOLD, Typeface.DEFAULT_BOLD.getStyle()); - assertEquals(fontMap.get("sans-serif"), Typeface.SANS_SERIF); - assertEquals(fontMap.get("serif"), Typeface.SERIF); - assertEquals(fontMap.get("monospace"), Typeface.MONOSPACE); + try { + Typeface.setSystemFontMap(fontMap); - // Test defaults - assertEquals(fontMap.get("sans-serif"), Typeface.defaultFromStyle(Typeface.NORMAL)); - for (int style : STYLES) { - String msg = "style = " + style; - assertNotNull(msg, Typeface.defaultFromStyle(style)); - assertEquals(msg, style, Typeface.defaultFromStyle(style).getStyle()); + // Test public static final fields + assertEquals(fontMap.get("sans-serif"), Typeface.DEFAULT); + assertEquals(Typeface.BOLD, Typeface.DEFAULT_BOLD.getStyle()); + assertEquals(fontMap.get("sans-serif"), Typeface.SANS_SERIF); + assertEquals(fontMap.get("serif"), Typeface.SERIF); + assertEquals(fontMap.get("monospace"), Typeface.MONOSPACE); + + // Test defaults + assertEquals(fontMap.get("sans-serif"), Typeface.defaultFromStyle(Typeface.NORMAL)); + for (int style : STYLES) { + String msg = "style = " + style; + assertNotNull(msg, Typeface.defaultFromStyle(style)); + assertEquals(msg, style, Typeface.defaultFromStyle(style).getStyle()); + } + + // Test create() + assertEquals(fontMap.get("sample"), Typeface.create("sample", Typeface.NORMAL)); + assertEquals( + fontMap.get("sample-italic"), + Typeface.create("sample-italic", Typeface.ITALIC)); + } finally { + // This tests breaks many default font configuration and break the assumption of the + // subsequent test cases. To recover the original configuration, call the + // setSystemFontMap function with the original data even if it is a test target. + // Ideally, this test should be isolated and app should be restart after this test + // been executed. + Typeface.setSystemFontMap(backup); } - - // Test create() - assertEquals(fontMap.get("sample"), Typeface.create("sample", Typeface.NORMAL)); - assertEquals( - fontMap.get("sample-italic"), Typeface.create("sample-italic", Typeface.ITALIC)); } private static float measureText(Typeface typeface, String text) {