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.platform.test.annotations.Presubmit; 30 import android.platform.test.ravenwood.RavenwoodRule; 31 32 import androidx.test.ext.junit.runners.AndroidJUnit4; 33 import androidx.test.filters.SmallTest; 34 import androidx.test.platform.app.InstrumentationRegistry; 35 36 import com.android.frameworks.coretests.R; 37 38 import org.junit.Before; 39 import org.junit.Rule; 40 import org.junit.Test; 41 import org.junit.runner.RunWith; 42 import org.xmlpull.v1.XmlPullParserException; 43 44 import java.io.IOException; 45 import java.util.List; 46 47 /** 48 * Tests for {@link FontResourcesParser}. 49 */ 50 @Presubmit 51 @SmallTest 52 @RunWith(AndroidJUnit4.class) 53 public class FontResourcesParserTest { 54 55 @Rule 56 public final RavenwoodRule mRavenwood = new RavenwoodRule.Builder().build(); 57 58 private Resources mResources; 59 60 @Before setup()61 public void setup() { 62 mResources = InstrumentationRegistry.getInstrumentation().getContext().getResources(); 63 } 64 65 @Test testParse()66 public void testParse() throws XmlPullParserException, IOException { 67 XmlResourceParser parser = mResources.getXml(R.font.samplexmlfontforparsing); 68 69 FamilyResourceEntry result = FontResourcesParser.parse(parser, mResources); 70 71 assertNotNull(result); 72 FontFamilyFilesResourceEntry filesEntry = (FontFamilyFilesResourceEntry) result; 73 FontFileResourceEntry[] fileEntries = filesEntry.getEntries(); 74 assertEquals(4, fileEntries.length); 75 FontFileResourceEntry font1 = fileEntries[0]; 76 assertEquals(400, font1.getWeight()); 77 assertEquals(0, font1.getItalic()); 78 assertEquals("'wdth' 0.8", font1.getVariationSettings()); 79 assertEquals(0, font1.getTtcIndex()); 80 assertEquals("res/font/samplefont.ttf", font1.getFileName()); 81 FontFileResourceEntry font2 = fileEntries[1]; 82 assertEquals(400, font2.getWeight()); 83 assertEquals(1, font2.getItalic()); 84 assertEquals(1, font2.getTtcIndex()); 85 assertEquals("'cntr' 0.5", font2.getVariationSettings()); 86 assertEquals("res/font/samplefont2.ttf", font2.getFileName()); 87 FontFileResourceEntry font3 = fileEntries[2]; 88 assertEquals(800, font3.getWeight()); 89 assertEquals(0, font3.getItalic()); 90 assertEquals(2, font3.getTtcIndex()); 91 assertEquals("'wdth' 500.0, 'wght' 300.0", font3.getVariationSettings()); 92 assertEquals("res/font/samplefont3.ttf", font3.getFileName()); 93 FontFileResourceEntry font4 = fileEntries[3]; 94 assertEquals(800, font4.getWeight()); 95 assertEquals(1, font4.getItalic()); 96 assertEquals(0, font4.getTtcIndex()); 97 assertEquals(null, font4.getVariationSettings()); 98 assertEquals("res/font/samplefont4.ttf", font4.getFileName()); 99 } 100 101 @Test testParseDownloadableFont()102 public void testParseDownloadableFont() throws IOException, XmlPullParserException { 103 XmlResourceParser parser = mResources.getXml(R.font.samplexmldownloadedfont); 104 105 FamilyResourceEntry result = FontResourcesParser.parse(parser, mResources); 106 107 assertNotNull(result); 108 ProviderResourceEntry providerEntry = (ProviderResourceEntry) result; 109 assertEquals("com.example.test.fontprovider.authority", providerEntry.getAuthority()); 110 assertEquals("com.example.test.fontprovider.package", providerEntry.getPackage()); 111 assertEquals("MyRequestedFont", providerEntry.getQuery()); 112 assertEquals("my-request-font", providerEntry.getSystemFontFamilyName()); 113 } 114 115 @Test testParseDownloadableFont_singleCerts()116 public void testParseDownloadableFont_singleCerts() throws IOException, XmlPullParserException { 117 XmlResourceParser parser = mResources.getXml(R.font.samplexmldownloadedfontsinglecerts); 118 119 FamilyResourceEntry result = FontResourcesParser.parse(parser, mResources); 120 121 assertNotNull(result); 122 assertTrue(result instanceof ProviderResourceEntry); 123 ProviderResourceEntry providerResourceEntry = (ProviderResourceEntry) result; 124 assertEquals("com.example.test.fontprovider", providerResourceEntry.getAuthority()); 125 assertEquals("MyRequestedFont", providerResourceEntry.getQuery()); 126 assertEquals("com.example.test.fontprovider.package", providerResourceEntry.getPackage()); 127 List<List<String>> certList = providerResourceEntry.getCerts(); 128 assertNotNull(certList); 129 assertEquals(1, certList.size()); 130 List<String> certs = certList.get(0); 131 assertEquals(2, certs.size()); 132 assertEquals("123456789", certs.get(0)); 133 assertEquals("987654321", certs.get(1)); 134 } 135 136 @Test testParseDownloadableFont_multipleCerts()137 public void testParseDownloadableFont_multipleCerts() throws IOException, XmlPullParserException { 138 XmlResourceParser parser = mResources.getXml(R.font.samplexmldownloadedfontmulticerts); 139 140 FamilyResourceEntry result = FontResourcesParser.parse(parser, mResources); 141 142 assertNotNull(result); 143 assertTrue(result instanceof ProviderResourceEntry); 144 ProviderResourceEntry providerResourceEntry = (ProviderResourceEntry) result; 145 assertEquals("com.example.test.fontprovider", providerResourceEntry.getAuthority()); 146 assertEquals("MyRequestedFont", providerResourceEntry.getQuery()); 147 assertEquals("com.example.test.fontprovider.package", providerResourceEntry.getPackage()); 148 List<List<String>> certList = providerResourceEntry.getCerts(); 149 assertNotNull(certList); 150 assertEquals(2, certList.size()); 151 List<String> certs1 = certList.get(0); 152 assertEquals(2, certs1.size()); 153 assertEquals("123456789", certs1.get(0)); 154 assertEquals("987654321", certs1.get(1)); 155 List<String> certs2 = certList.get(1); 156 assertEquals(2, certs2.size()); 157 assertEquals("abcdefg", certs2.get(0)); 158 assertEquals("gfedcba", certs2.get(1)); 159 } 160 } 161