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