FontsContractCompatTest.java revision 56489fe7b61a3dd6d70fc7ff7a4e5b129773797c
1bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong/* 2bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong * Copyright (C) 2017 The Android Open Source Project 3bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong * 4bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong * Licensed under the Apache License, Version 2.0 (the "License"); 5bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong * you may not use this file except in compliance with the License. 6bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong * You may obtain a copy of the License at 7bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong * 8bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong * http://www.apache.org/licenses/LICENSE-2.0 9bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong * 10bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong * Unless required by applicable law or agreed to in writing, software 11bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong * distributed under the License is distributed on an "AS IS" BASIS, 12bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong * See the License for the specific language governing permissions and 14bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong * limitations under the License. 15bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong */ 16bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kongpackage android.support.v4.provider; 17bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong 18bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kongimport static android.support.v4.provider.FontsContractCompat.Columns.RESULT_CODE_FONT_NOT_FOUND; 19bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kongimport static android.support.v4.provider.FontsContractCompat.Columns.RESULT_CODE_FONT_UNAVAILABLE; 20bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kongimport static android.support.v4.provider.FontsContractCompat.Columns.RESULT_CODE_MALFORMED_QUERY; 21bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kongimport static android.support.v4.provider.FontsContractCompat.Columns.RESULT_CODE_OK; 22bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong 23bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kongimport static org.junit.Assert.assertEquals; 24bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kongimport static org.junit.Assert.assertNotNull; 25cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucherimport static org.junit.Assert.assertNotSame; 266a9babad6eb8ac3e79a5e036d878ed7408e79f26Igor Murashkinimport static org.junit.Assert.assertNull; 27bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kongimport static org.junit.Assert.assertTrue; 28bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kongimport static org.junit.Assert.fail; 29a0842b40441db5332a5290f941021636b1182761Sol Boucherimport static org.mockito.Matchers.anyInt; 30a0842b40441db5332a5290f941021636b1182761Sol Boucherimport static org.mockito.Matchers.anyString; 31bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kongimport static org.mockito.Mockito.mock; 32bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kongimport static org.mockito.Mockito.when; 33bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong 344f425ba476d62b4be7078f2084af37cf306b31c6Sol Boucherimport android.app.Instrumentation; 354f425ba476d62b4be7078f2084af37cf306b31c6Sol Boucherimport android.content.Context; 36bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kongimport android.content.pm.ApplicationInfo; 37bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kongimport android.content.pm.PackageInfo; 38bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kongimport android.content.pm.PackageManager; 39bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kongimport android.content.pm.PackageManager.NameNotFoundException; 40bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kongimport android.content.pm.ProviderInfo; 41bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kongimport android.content.pm.Signature; 42bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kongimport android.graphics.Typeface; 43bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kongimport android.support.test.InstrumentationRegistry; 44bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kongimport android.support.test.filters.SmallTest; 45a0842b40441db5332a5290f941021636b1182761Sol Boucherimport android.support.test.runner.AndroidJUnit4; 462d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Huimport android.support.v4.provider.FontsContractCompat.FontFamilyResult; 47cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucherimport android.support.v4.provider.FontsContractCompat.FontInfo; 48a0842b40441db5332a5290f941021636b1182761Sol Boucherimport android.util.Base64; 49a0842b40441db5332a5290f941021636b1182761Sol Boucher 50cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucherimport org.junit.After; 51cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucherimport org.junit.Before; 52cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucherimport org.junit.Test; 53cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucherimport org.junit.runner.RunWith; 54cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher 55cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucherimport java.util.ArrayList; 56cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucherimport java.util.Arrays; 57cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucherimport java.util.Collections; 58cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucherimport java.util.List; 59cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher 60cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher/** 61cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher * Unit tests for {@link FontsContractCompat}. 62cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher */ 63cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher@RunWith(AndroidJUnit4.class) 64cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher@SmallTest 65cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucherpublic class FontsContractCompatTest { 66cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher private static final String AUTHORITY = "android.provider.fonts.font"; 67cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher private static final String PACKAGE = "android.support.compat.test"; 68cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher 69cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher // Signature to be used for authentication to access content provider. 70cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher // In this test case, the content provider and consumer live in the same package, self package's 71cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher // signature works. 72cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher private static final List<List<byte[]>> SIGNATURE; 73cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher static { 74cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher final Context context = InstrumentationRegistry.getInstrumentation().getTargetContext(); 75a0842b40441db5332a5290f941021636b1182761Sol Boucher try { 76cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher PackageManager manager = context.getPackageManager(); 77cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher PackageInfo info = manager.getPackageInfo( 78cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher context.getPackageName(), PackageManager.GET_SIGNATURES); 79cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher ArrayList<byte[]> out = new ArrayList<>(); 80cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher for (Signature sig : info.signatures) { 81cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher out.add(sig.toByteArray()); 82cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher } 83cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher SIGNATURE = new ArrayList<>(); 84cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher SIGNATURE.add(out); 85cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher } catch (PackageManager.NameNotFoundException e) { 86cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher throw new RuntimeException(e); 87cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher } 88cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher } 89cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher 90cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher private static final byte[] BYTE_ARRAY = 91cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher Base64.decode("e04fd020ea3a6910a2d808002b30", Base64.DEFAULT); 92cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher // Use a different instance to test byte array comparison 93cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher private static final byte[] BYTE_ARRAY_COPY = 94cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher Base64.decode("e04fd020ea3a6910a2d808002b30", Base64.DEFAULT); 95cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher private static final byte[] BYTE_ARRAY_2 = 96cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher Base64.decode("e04fd020ea3a6910a2d808002b32", Base64.DEFAULT); 97cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher private Instrumentation mInstrumentation; 98cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher private Context mContext; 99cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher 100cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher @Before 101cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher public void setUp() throws Exception { 102cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher mInstrumentation = InstrumentationRegistry.getInstrumentation(); 103cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher mContext = mInstrumentation.getTargetContext(); 104cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher MockFontProvider.prepareFontFiles( 105cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher InstrumentationRegistry.getInstrumentation().getTargetContext()); 106cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher } 107cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher 108cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher @After 109cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher public void tearDown() { 110cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher MockFontProvider.cleanUpFontFiles( 111cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher InstrumentationRegistry.getInstrumentation().getTargetContext()); 112cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher } 113cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher 114cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher private static class TestCallback extends FontsContractCompat.FontRequestCallback { 115cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher private Typeface mTypeface; 116cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher 117a0842b40441db5332a5290f941021636b1182761Sol Boucher private int mSuccessCallCount; 118cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher private int mFailedCallCount; 119cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher 120cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher public void onTypefaceRetrieved(Typeface typeface) { 121cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher mTypeface = typeface; 122cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher mSuccessCallCount++; 123cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher } 124cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher 125cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher public void onTypefaceRequestFailed(int reason) { 126a0842b40441db5332a5290f941021636b1182761Sol Boucher mFailedCallCount++; 127cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher } 128cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher 129cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher public Typeface getTypeface() { 130cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher return mTypeface; 131cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher } 132cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher 133cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher public int getSuccessCallCount() { 134cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher return mSuccessCallCount; 135a0842b40441db5332a5290f941021636b1182761Sol Boucher } 136cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher 137cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher public int getFailedCallCount() { 138cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher return mFailedCallCount; 139cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher } 140cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher } 141cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher 142cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher @Test 143cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher public void typefaceNotCacheTest() throws NameNotFoundException { 144a0842b40441db5332a5290f941021636b1182761Sol Boucher FontRequest request = new FontRequest( 145cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher AUTHORITY, PACKAGE, MockFontProvider.SINGLE_FONT_FAMILY_QUERY, SIGNATURE); 146cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher FontFamilyResult result = FontsContractCompat.fetchFonts( 147cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher mContext, null /* cancellation signal */, request); 1484f425ba476d62b4be7078f2084af37cf306b31c6Sol Boucher assertEquals(FontFamilyResult.STATUS_OK, result.getStatusCode()); 149cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher Typeface typeface = FontsContractCompat.buildTypeface( 150cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher mContext, null /* cancellation signal */, result.getFonts()); 151cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher 152cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher FontFamilyResult result2 = FontsContractCompat.fetchFonts( 153a0842b40441db5332a5290f941021636b1182761Sol Boucher mContext, null /* cancellation signal */, request); 154cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher assertEquals(FontFamilyResult.STATUS_OK, result2.getStatusCode()); 155cef46862d6937bc98bf1a6b087c5daa22b5239f3Sol Boucher Typeface typeface2 = FontsContractCompat.buildTypeface( 156bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong mContext, null /* cancellation signal */, result2.getFonts()); 157bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong 158bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong // Neither fetchFonts nor buildTypeface should cache the Typeface. 159bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong assertNotSame(typeface, typeface2); 160bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong } 161a0842b40441db5332a5290f941021636b1182761Sol Boucher 162bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong @Test 163bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong public void testGetFontFromProvider_resultOK() { 164bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong FontRequest request = new FontRequest( 165bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong AUTHORITY, PACKAGE, MockFontProvider.SINGLE_FONT_FAMILY2_QUERY, SIGNATURE); 166bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong FontInfo[] fonts = FontsContractCompat.getFontFromProvider( 167bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong mContext, request, AUTHORITY, null); 168bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong assertNotNull(fonts); 169a0842b40441db5332a5290f941021636b1182761Sol Boucher assertEquals(1, fonts.length); 170bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong FontInfo font = fonts[0]; 171bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong assertEquals(0, font.getTtcIndex()); 172bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong assertEquals(700, font.getWeight()); 173bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong assertTrue(font.isItalic()); 174bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong assertNotNull(font.getUri()); 175bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong assertEquals(RESULT_CODE_OK, font.getResultCode()); 176bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong } 177a0842b40441db5332a5290f941021636b1182761Sol Boucher 178bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong @Test 179bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong public void testGetFontFromProvider_providerDoesntReturnAllFields() { 180bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong FontRequest request = new FontRequest( 181bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong AUTHORITY, PACKAGE, MockFontProvider.MANDATORY_FIELDS_ONLY_QUERY, SIGNATURE); 182bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong FontInfo[] fonts = FontsContractCompat.getFontFromProvider( 183bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong mContext, request, AUTHORITY, null); 184bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong assertNotNull(fonts); 185a0842b40441db5332a5290f941021636b1182761Sol Boucher assertEquals(1, fonts.length); 186bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong FontInfo font = fonts[0]; 187bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong assertEquals(0, font.getTtcIndex()); 188bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong assertEquals(RESULT_CODE_OK, font.getResultCode()); 189bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong } 190bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong 191bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong @Test 192bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong public void testGetFontFromProvider_resultFontNotFound() { 193a0842b40441db5332a5290f941021636b1182761Sol Boucher FontRequest request = new FontRequest( 194bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong AUTHORITY, PACKAGE, MockFontProvider.NOT_FOUND_QUERY, SIGNATURE); 195bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong FontInfo[] fonts = FontsContractCompat.getFontFromProvider( 196bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong mContext, request, AUTHORITY, null); 197bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong assertNotNull(fonts); 198bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong assertEquals(1, fonts.length); 199bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong FontInfo font = fonts[0]; 200bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong assertEquals(RESULT_CODE_FONT_NOT_FOUND, font.getResultCode()); 201a0842b40441db5332a5290f941021636b1182761Sol Boucher } 202bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong 203bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong @Test 204bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong public void testGetFontFromProvider_resultFontUnavailable() { 205bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong FontRequest request = new FontRequest( 206bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong AUTHORITY, PACKAGE, MockFontProvider.UNAVAILABLE_QUERY, SIGNATURE); 207bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong FontInfo[] fonts = FontsContractCompat.getFontFromProvider( 208bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong mContext, request, AUTHORITY, null); 209a0842b40441db5332a5290f941021636b1182761Sol Boucher 210bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong assertNotNull(fonts); 211bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong assertEquals(1, fonts.length); 212bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong FontInfo font = fonts[0]; 213bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong assertEquals(RESULT_CODE_FONT_UNAVAILABLE, font.getResultCode()); 214bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong } 215bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong 216bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong @Test 217bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong public void testGetFontFromProvider_resultMalformedQuery() { 218bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong FontRequest request = new FontRequest( 219bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong AUTHORITY, PACKAGE, MockFontProvider.MALFORMED_QUERY, SIGNATURE); 2207e6c76ef7faf26aa1060b4abc1c65934b4e45338Angus Kong FontInfo[] fonts = FontsContractCompat.getFontFromProvider( 2217e6c76ef7faf26aa1060b4abc1c65934b4e45338Angus Kong mContext, request, AUTHORITY, null); 222a0842b40441db5332a5290f941021636b1182761Sol Boucher 2237e6c76ef7faf26aa1060b4abc1c65934b4e45338Angus Kong assertNotNull(fonts); 2247e6c76ef7faf26aa1060b4abc1c65934b4e45338Angus Kong assertEquals(1, fonts.length); 2257e6c76ef7faf26aa1060b4abc1c65934b4e45338Angus Kong FontInfo font = fonts[0]; 2267e6c76ef7faf26aa1060b4abc1c65934b4e45338Angus Kong assertEquals(RESULT_CODE_MALFORMED_QUERY, font.getResultCode()); 2277e6c76ef7faf26aa1060b4abc1c65934b4e45338Angus Kong } 2287e6c76ef7faf26aa1060b4abc1c65934b4e45338Angus Kong 2297e6c76ef7faf26aa1060b4abc1c65934b4e45338Angus Kong @Test 23060520c4df78e595964605cf8acfa21bbafaeba84Angus Kong public void testGetFontFromProvider_resultFontNotFoundSecondRow() { 231bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong FontRequest request = new FontRequest( 232bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong AUTHORITY, PACKAGE, MockFontProvider.NOT_FOUND_SECOND_QUERY, SIGNATURE); 233bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong FontInfo[] fonts = FontsContractCompat.getFontFromProvider( 234bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong mContext, request, AUTHORITY, null); 235a0842b40441db5332a5290f941021636b1182761Sol Boucher 236bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong assertNotNull(fonts); 237bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong assertEquals(2, fonts.length); 238bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong 239bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong FontInfo font = fonts[0]; 240bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong assertEquals(RESULT_CODE_OK, font.getResultCode()); 241bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong 242bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong font = fonts[1]; 243bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong assertEquals(RESULT_CODE_FONT_NOT_FOUND, font.getResultCode()); 244bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong } 245bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong 246bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong @Test 247bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong public void testGetFontFromProvider_resultFontNotFoundOtherRow() { 248bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong FontRequest request = new FontRequest( 249bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong AUTHORITY, PACKAGE, MockFontProvider.NOT_FOUND_THIRD_QUERY, SIGNATURE); 250bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong FontInfo[] fonts = FontsContractCompat.getFontFromProvider( 251bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong mContext, request, AUTHORITY, null); 252bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong 253bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong assertNotNull(fonts); 254b00b7a67213ee6868eb792b2a63ba0dca888a01fAngus Kong assertEquals(3, fonts.length); 255bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong 256b00b7a67213ee6868eb792b2a63ba0dca888a01fAngus Kong FontInfo font = fonts[0]; 257bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong assertEquals(RESULT_CODE_OK, font.getResultCode()); 258bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong 259bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong font = fonts[1]; 260bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong assertEquals(RESULT_CODE_FONT_NOT_FOUND, font.getResultCode()); 261bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong 262bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong font = fonts[2]; 26360520c4df78e595964605cf8acfa21bbafaeba84Angus Kong assertEquals(RESULT_CODE_OK, font.getResultCode()); 264bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong } 265bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong 266bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong public void testGetFontFromProvider_resultCodeIsNegativeNumber() { 267bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong FontRequest request = new FontRequest( 268bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong AUTHORITY, PACKAGE, MockFontProvider.NEGATIVE_ERROR_CODE_QUERY, SIGNATURE); 2694f425ba476d62b4be7078f2084af37cf306b31c6Sol Boucher FontInfo[] fonts = FontsContractCompat.getFontFromProvider( 270bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong mContext, request, AUTHORITY, null); 271bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong 2724f425ba476d62b4be7078f2084af37cf306b31c6Sol Boucher 273bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong assertNotNull(fonts); 274bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong assertEquals(1, fonts.length); 275bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong FontInfo font = fonts[0]; 276bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong assertEquals(RESULT_CODE_FONT_NOT_FOUND, font.getResultCode()); 277bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong } 2784f425ba476d62b4be7078f2084af37cf306b31c6Sol Boucher 2794f425ba476d62b4be7078f2084af37cf306b31c6Sol Boucher @Test 280bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong public void testGetProvider_providerNotFound() { 281bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong PackageManager packageManager = mock(PackageManager.class); 282bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong when(packageManager.resolveContentProvider(anyString(), anyInt())).thenReturn(null); 28360520c4df78e595964605cf8acfa21bbafaeba84Angus Kong 284bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong FontRequest request = new FontRequest(AUTHORITY, PACKAGE, "query", SIGNATURE); 285bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong try { 286a0842b40441db5332a5290f941021636b1182761Sol Boucher FontsContractCompat.getProvider(packageManager, request, null); 287a0842b40441db5332a5290f941021636b1182761Sol Boucher fail(); 2882d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu } catch (NameNotFoundException e) { 2892d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu // pass 2902d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu } 2912d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu } 2922d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu 2932d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu @Test 2942d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu public void testGetProvider_noCerts() 2952d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu throws PackageManager.NameNotFoundException { 2962d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu PackageManager packageManager = mContext.getPackageManager(); 2972d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu 2982d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu List<List<byte[]>> emptyList = Collections.emptyList(); 299a0842b40441db5332a5290f941021636b1182761Sol Boucher 30060520c4df78e595964605cf8acfa21bbafaeba84Angus Kong FontRequest request = new FontRequest(AUTHORITY, PACKAGE, "query", emptyList); 30160520c4df78e595964605cf8acfa21bbafaeba84Angus Kong assertNull(FontsContractCompat.getProvider(packageManager, request, null)); 30260520c4df78e595964605cf8acfa21bbafaeba84Angus Kong } 30360520c4df78e595964605cf8acfa21bbafaeba84Angus Kong 30460520c4df78e595964605cf8acfa21bbafaeba84Angus Kong @Test 30560520c4df78e595964605cf8acfa21bbafaeba84Angus Kong public void testGetProvider_wrongCerts() 30660520c4df78e595964605cf8acfa21bbafaeba84Angus Kong throws PackageManager.NameNotFoundException { 307a0842b40441db5332a5290f941021636b1182761Sol Boucher PackageManager packageManager = mock(PackageManager.class); 3082d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu setupPackageManager(packageManager); 3092d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu 3102d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu byte[] wrongCert = Base64.decode("this is a wrong cert", Base64.DEFAULT); 3112d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu List<byte[]> certList = Arrays.asList(wrongCert); 3122d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu FontRequest requestWrongCerts = new FontRequest( 3132d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu AUTHORITY, PACKAGE, "query", Arrays.asList(certList)); 3142d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu 3152d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu assertNull(FontsContractCompat.getProvider(packageManager, requestWrongCerts, null)); 3162d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu } 3172d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu 3182d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu @Test 3192d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu public void testGetProvider_correctCerts() 3202d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu throws PackageManager.NameNotFoundException { 3212d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu PackageManager packageManager = mock(PackageManager.class); 3222d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu ProviderInfo info = setupPackageManager(packageManager); 3232d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu 3242d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu List<byte[]> certList = Arrays.asList(BYTE_ARRAY); 3252d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu FontRequest requestRightCerts = new FontRequest( 3262d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu AUTHORITY, PACKAGE, "query", Arrays.asList(certList)); 3272d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu ProviderInfo result = 3282d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu FontsContractCompat.getProvider(packageManager, requestRightCerts, null); 3292d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu 3302d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu assertEquals(info, result); 3312d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu } 332a0842b40441db5332a5290f941021636b1182761Sol Boucher 333a0842b40441db5332a5290f941021636b1182761Sol Boucher @Test 334bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong public void testGetProvider_moreCerts() 335bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong throws PackageManager.NameNotFoundException { 3367e6c76ef7faf26aa1060b4abc1c65934b4e45338Angus Kong PackageManager packageManager = mock(PackageManager.class); 3377e6c76ef7faf26aa1060b4abc1c65934b4e45338Angus Kong setupPackageManager(packageManager); 3387e6c76ef7faf26aa1060b4abc1c65934b4e45338Angus Kong 3392d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu byte[] wrongCert = Base64.decode("this is a wrong cert", Base64.DEFAULT); 3407e6c76ef7faf26aa1060b4abc1c65934b4e45338Angus Kong List<byte[]> certList = Arrays.asList(wrongCert, BYTE_ARRAY); 3417e6c76ef7faf26aa1060b4abc1c65934b4e45338Angus Kong FontRequest requestRightCerts = new FontRequest( 3424f425ba476d62b4be7078f2084af37cf306b31c6Sol Boucher AUTHORITY, PACKAGE, "query", Arrays.asList(certList)); 3437e6c76ef7faf26aa1060b4abc1c65934b4e45338Angus Kong assertNull(FontsContractCompat.getProvider(packageManager, requestRightCerts, null)); 3447e6c76ef7faf26aa1060b4abc1c65934b4e45338Angus Kong } 345a0842b40441db5332a5290f941021636b1182761Sol Boucher 3467e6c76ef7faf26aa1060b4abc1c65934b4e45338Angus Kong @Test 3477e6c76ef7faf26aa1060b4abc1c65934b4e45338Angus Kong public void testGetProvider_duplicateCerts() 3487e6c76ef7faf26aa1060b4abc1c65934b4e45338Angus Kong throws PackageManager.NameNotFoundException { 3497e6c76ef7faf26aa1060b4abc1c65934b4e45338Angus Kong PackageManager packageManager = mock(PackageManager.class); 350a0842b40441db5332a5290f941021636b1182761Sol Boucher setupPackageManager(packageManager); 351a0842b40441db5332a5290f941021636b1182761Sol Boucher PackageInfo packageInfo = new PackageInfo(); 352a0842b40441db5332a5290f941021636b1182761Sol Boucher Signature signature = mock(Signature.class); 353a0842b40441db5332a5290f941021636b1182761Sol Boucher when(signature.toByteArray()).thenReturn(BYTE_ARRAY_COPY); 354a0842b40441db5332a5290f941021636b1182761Sol Boucher Signature signature2 = mock(Signature.class); 355a0842b40441db5332a5290f941021636b1182761Sol Boucher when(signature2.toByteArray()).thenReturn(BYTE_ARRAY_COPY); 356a0842b40441db5332a5290f941021636b1182761Sol Boucher packageInfo.packageName = PACKAGE; 357a0842b40441db5332a5290f941021636b1182761Sol Boucher packageInfo.signatures = new Signature[] { signature, signature2 }; 358a0842b40441db5332a5290f941021636b1182761Sol Boucher when(packageManager.getPackageInfo(anyString(), anyInt())).thenReturn(packageInfo); 359a0842b40441db5332a5290f941021636b1182761Sol Boucher 360a0842b40441db5332a5290f941021636b1182761Sol Boucher // The provider has {BYTE_ARRAY_COPY, BYTE_ARRAY_COPY}, the request has 3617e6c76ef7faf26aa1060b4abc1c65934b4e45338Angus Kong // {BYTE_ARRAY_2, BYTE_ARRAY_COPY}. 3627e6c76ef7faf26aa1060b4abc1c65934b4e45338Angus Kong List<byte[]> certList = Arrays.asList(BYTE_ARRAY_2, BYTE_ARRAY_COPY); 3632d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu FontRequest requestRightCerts = new FontRequest( 3642d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu AUTHORITY, PACKAGE, "query", Arrays.asList(certList)); 3652d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu assertNull(FontsContractCompat.getProvider(packageManager, requestRightCerts, null)); 3662d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu } 3672d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu 3682d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu @Test 3692d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu public void testGetProvider_correctCertsSeveralSets() 3702d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu throws PackageManager.NameNotFoundException { 3712d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu PackageManager packageManager = mock(PackageManager.class); 3722d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu ProviderInfo info = setupPackageManager(packageManager); 373bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong 374bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong List<List<byte[]>> certList = new ArrayList<>(); 375bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong byte[] wrongCert = Base64.decode("this is a wrong cert", Base64.DEFAULT); 376bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong certList.add(Arrays.asList(wrongCert)); 3772d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu certList.add(Arrays.asList(BYTE_ARRAY)); 378bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong FontRequest requestRightCerts = new FontRequest(AUTHORITY, PACKAGE, "query", certList); 379bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong ProviderInfo result = 380bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong FontsContractCompat.getProvider(packageManager, requestRightCerts, null); 381bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong 382bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong assertEquals(info, result); 383bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong } 384bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong 385bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong @Test 386a0842b40441db5332a5290f941021636b1182761Sol Boucher public void testGetProvider_wrongPackage() 387bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong throws PackageManager.NameNotFoundException { 388bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong PackageManager packageManager = mContext.getPackageManager(); 389c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 3904f425ba476d62b4be7078f2084af37cf306b31c6Sol Boucher List<List<byte[]>> certList = new ArrayList<>(); 391bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong certList.add(Arrays.asList(BYTE_ARRAY)); 392a0842b40441db5332a5290f941021636b1182761Sol Boucher FontRequest requestRightCerts = new FontRequest( 393bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong AUTHORITY, "com.wrong.package.name", "query", certList); 394bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong try { 395b30d2c670f1262f0d60181e40dad33f2151fee4aSol Boucher FontsContractCompat.getProvider(packageManager, requestRightCerts, null); 396b30d2c670f1262f0d60181e40dad33f2151fee4aSol Boucher fail(); 397a0842b40441db5332a5290f941021636b1182761Sol Boucher } catch (NameNotFoundException e) { 398b30d2c670f1262f0d60181e40dad33f2151fee4aSol Boucher // pass 399b30d2c670f1262f0d60181e40dad33f2151fee4aSol Boucher } 400c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 401c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 402a0842b40441db5332a5290f941021636b1182761Sol Boucher private ProviderInfo setupPackageManager(PackageManager packageManager) 403c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong throws PackageManager.NameNotFoundException { 404c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong ProviderInfo info = new ProviderInfo(); 4052d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu info.packageName = PACKAGE; 4062d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu info.applicationInfo = new ApplicationInfo(); 4072d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu when(packageManager.resolveContentProvider(anyString(), anyInt())).thenReturn(info); 4082d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu PackageInfo packageInfo = new PackageInfo(); 4092d01b8e2b5ad30ce3c442799cad4c3d26607fc6fSenpo Hu Signature signature = mock(Signature.class); 410bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong when(signature.toByteArray()).thenReturn(BYTE_ARRAY_COPY); 4114f425ba476d62b4be7078f2084af37cf306b31c6Sol Boucher packageInfo.packageName = PACKAGE; 4124f425ba476d62b4be7078f2084af37cf306b31c6Sol Boucher packageInfo.signatures = new Signature[] { signature }; 413bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong when(packageManager.getPackageInfo(anyString(), anyInt())).thenReturn(packageInfo); 414bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong return info; 415bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong } 416bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong} 417bdaaaf5f0257168590fa8965e4d59b054636e6dfAngus Kong