1 /* 2 * Copyright (C) 2017 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.content.res; 18 19 import static android.content.res.FontResourcesParser.FamilyResourceEntry; 20 import static android.content.res.FontResourcesParser.FontFamilyFilesResourceEntry; 21 import static android.content.res.FontResourcesParser.FontFileResourceEntry; 22 import static android.content.res.FontResourcesParser.ProviderResourceEntry; 23 24 import static junit.framework.Assert.assertTrue; 25 26 import static org.junit.Assert.assertEquals; 27 import static org.junit.Assert.assertNotNull; 28 29 import android.app.Instrumentation; 30 import android.platform.test.annotations.Presubmit; 31 32 import androidx.test.InstrumentationRegistry; 33 import androidx.test.filters.SmallTest; 34 import androidx.test.runner.AndroidJUnit4; 35 36 import com.android.frameworks.coretests.R; 37 38 import org.junit.Before; 39 import org.junit.Test; 40 import org.junit.runner.RunWith; 41 import org.xmlpull.v1.XmlPullParserException; 42 43 import java.io.IOException; 44 import java.util.List; 45 46 /** 47 * Tests for {@link FontResourcesParser}. 48 */ 49 @Presubmit 50 @SmallTest 51 @RunWith(AndroidJUnit4.class) 52 public class FontResourcesParserTest { 53 54 private Instrumentation mInstrumentation; 55 private Resources mResources; 56 57 @Before setup()58 public void setup() { 59 mInstrumentation = InstrumentationRegistry.getInstrumentation(); 60 mResources = mInstrumentation.getContext().getResources(); 61 } 62 63 @Test testParse()64 public void testParse() throws XmlPullParserException, IOException { 65 XmlResourceParser parser = mResources.getXml(R.font.samplexmlfontforparsing); 66 67 FamilyResourceEntry result = FontResourcesParser.parse(parser, mResources); 68 69 assertNotNull(result); 70 FontFamilyFilesResourceEntry filesEntry = (FontFamilyFilesResourceEntry) result; 71 FontFileResourceEntry[] fileEntries = filesEntry.getEntries(); 72 assertEquals(4, fileEntries.length); 73 FontFileResourceEntry font1 = fileEntries[0]; 74 assertEquals(400, font1.getWeight()); 75 assertEquals(0, font1.getItalic()); 76 assertEquals("'wdth' 0.8", font1.getVariationSettings()); 77 assertEquals(0, font1.getTtcIndex()); 78 assertEquals("res/font/samplefont.ttf", font1.getFileName()); 79 FontFileResourceEntry font2 = fileEntries[1]; 80 assertEquals(400, font2.getWeight()); 81 assertEquals(1, font2.getItalic()); 82 assertEquals(1, font2.getTtcIndex()); 83 assertEquals("'cntr' 0.5", font2.getVariationSettings()); 84 assertEquals("res/font/samplefont2.ttf", font2.getFileName()); 85 FontFileResourceEntry font3 = fileEntries[2]; 86 assertEquals(800, font3.getWeight()); 87 assertEquals(0, font3.getItalic()); 88 assertEquals(2, font3.getTtcIndex()); 89 assertEquals("'wdth' 500.0, 'wght' 300.0", font3.getVariationSettings()); 90 assertEquals("res/font/samplefont3.ttf", font3.getFileName()); 91 FontFileResourceEntry font4 = fileEntries[3]; 92 assertEquals(800, font4.getWeight()); 93 assertEquals(1, font4.getItalic()); 94 assertEquals(0, font4.getTtcIndex()); 95 assertEquals(null, font4.getVariationSettings()); 96 assertEquals("res/font/samplefont4.ttf", font4.getFileName()); 97 } 98 99 @Test testParseDownloadableFont()100 public void testParseDownloadableFont() throws IOException, XmlPullParserException { 101 XmlResourceParser parser = mResources.getXml(R.font.samplexmldownloadedfont); 102 103 FamilyResourceEntry result = FontResourcesParser.parse(parser, mResources); 104 105 assertNotNull(result); 106 ProviderResourceEntry providerEntry = (ProviderResourceEntry) result; 107 assertEquals("com.example.test.fontprovider.authority", providerEntry.getAuthority()); 108 assertEquals("com.example.test.fontprovider.package", providerEntry.getPackage()); 109 assertEquals("MyRequestedFont", providerEntry.getQuery()); 110 assertEquals("my-request-font", providerEntry.getSystemFontFamilyName()); 111 } 112 113 @Test testParseDownloadableFont_singleCerts()114 public void testParseDownloadableFont_singleCerts() throws IOException, XmlPullParserException { 115 XmlResourceParser parser = mResources.getXml(R.font.samplexmldownloadedfontsinglecerts); 116 117 FamilyResourceEntry result = FontResourcesParser.parse(parser, mResources); 118 119 assertNotNull(result); 120 assertTrue(result instanceof ProviderResourceEntry); 121 ProviderResourceEntry providerResourceEntry = (ProviderResourceEntry) result; 122 assertEquals("com.example.test.fontprovider", providerResourceEntry.getAuthority()); 123 assertEquals("MyRequestedFont", providerResourceEntry.getQuery()); 124 assertEquals("com.example.test.fontprovider.package", providerResourceEntry.getPackage()); 125 List<List<String>> certList = providerResourceEntry.getCerts(); 126 assertNotNull(certList); 127 assertEquals(1, certList.size()); 128 List<String> certs = certList.get(0); 129 assertEquals(2, certs.size()); 130 assertEquals("123456789", certs.get(0)); 131 assertEquals("987654321", certs.get(1)); 132 } 133 134 @Test testParseDownloadableFont_multipleCerts()135 public void testParseDownloadableFont_multipleCerts() throws IOException, XmlPullParserException { 136 XmlResourceParser parser = mResources.getXml(R.font.samplexmldownloadedfontmulticerts); 137 138 FamilyResourceEntry result = FontResourcesParser.parse(parser, mResources); 139 140 assertNotNull(result); 141 assertTrue(result instanceof ProviderResourceEntry); 142 ProviderResourceEntry providerResourceEntry = (ProviderResourceEntry) result; 143 assertEquals("com.example.test.fontprovider", providerResourceEntry.getAuthority()); 144 assertEquals("MyRequestedFont", providerResourceEntry.getQuery()); 145 assertEquals("com.example.test.fontprovider.package", providerResourceEntry.getPackage()); 146 List<List<String>> certList = providerResourceEntry.getCerts(); 147 assertNotNull(certList); 148 assertEquals(2, certList.size()); 149 List<String> certs1 = certList.get(0); 150 assertEquals(2, certs1.size()); 151 assertEquals("123456789", certs1.get(0)); 152 assertEquals("987654321", certs1.get(1)); 153 List<String> certs2 = certList.get(1); 154 assertEquals(2, certs2.size()); 155 assertEquals("abcdefg", certs2.get(0)); 156 assertEquals("gfedcba", certs2.get(1)); 157 } 158 } 159