1daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka/* 2daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka * Copyright (C) 2017 The Android Open Source Project 3daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka * 4daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka * Licensed under the Apache License, Version 2.0 (the "License"); 5daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka * you may not use this file except in compliance with the License. 6daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka * You may obtain a copy of the License at 7daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka * 8daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka * http://www.apache.org/licenses/LICENSE-2.0 9daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka * 10daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka * Unless required by applicable law or agreed to in writing, software 11daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka * distributed under the License is distributed on an "AS IS" BASIS, 12daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka * See the License for the specific language governing permissions and 14daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka * limitations under the License. 15daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka */ 16daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka 17daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonakapackage android.provider; 18daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka 19daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonakaimport static org.junit.Assert.assertEquals; 20daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonakaimport static org.junit.Assert.assertNotNull; 21daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonakaimport static org.junit.Assert.assertNotSame; 22d9de8be233d18ccc881cb647a5de2b32ff3e737cSeigo Nonakaimport static org.junit.Assert.assertNull; 23d9de8be233d18ccc881cb647a5de2b32ff3e737cSeigo Nonakaimport static org.junit.Assert.assertSame; 24daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka 25daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonakaimport android.app.Instrumentation; 26daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonakaimport android.content.Context; 27d9de8be233d18ccc881cb647a5de2b32ff3e737cSeigo Nonakaimport android.content.pm.PackageInfo; 28d9de8be233d18ccc881cb647a5de2b32ff3e737cSeigo Nonakaimport android.content.pm.PackageManager.NameNotFoundException; 29d9de8be233d18ccc881cb647a5de2b32ff3e737cSeigo Nonakaimport android.content.pm.PackageManager; 30d9de8be233d18ccc881cb647a5de2b32ff3e737cSeigo Nonakaimport android.content.pm.Signature; 31daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonakaimport android.graphics.Typeface; 32d9de8be233d18ccc881cb647a5de2b32ff3e737cSeigo Nonakaimport android.os.Handler; 33d9de8be233d18ccc881cb647a5de2b32ff3e737cSeigo Nonakaimport android.provider.FontsContract.Columns; 34daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonakaimport android.provider.FontsContract.FontFamilyResult; 35daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonakaimport android.provider.FontsContract.FontInfo; 36d9de8be233d18ccc881cb647a5de2b32ff3e737cSeigo Nonakaimport android.provider.FontsContract; 37daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonakaimport android.support.test.InstrumentationRegistry; 38daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonakaimport android.support.test.filters.SmallTest; 39daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonakaimport android.support.test.runner.AndroidJUnit4; 40daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonakaimport java.util.ArrayList; 41d9de8be233d18ccc881cb647a5de2b32ff3e737cSeigo Nonakaimport java.util.List; 42daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonakaimport org.junit.After; 43daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonakaimport org.junit.Before; 44daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonakaimport org.junit.Test; 45daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonakaimport org.junit.runner.RunWith; 46daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka 47daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka@SmallTest 48daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka@RunWith(AndroidJUnit4.class) 49daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonakapublic class FontsContractE2ETest { 50daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka private static final String AUTHORITY = "android.provider.fonts.font"; 51daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka private static final String PACKAGE = "com.android.frameworks.coretests"; 52daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka 53daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka // Signature to be used for authentication to access content provider. 54daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka // In this test case, the content provider and consumer live in the same package, self package's 55daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka // signature works. 56daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka private static List<List<byte[]>> SIGNATURE; 57daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka static { 58daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka final Context context = InstrumentationRegistry.getInstrumentation().getTargetContext(); 59daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka try { 60daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka PackageManager manager = context.getPackageManager(); 61daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka PackageInfo info = manager.getPackageInfo( 62daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka context.getPackageName(), PackageManager.GET_SIGNATURES); 63daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka ArrayList<byte[]> out = new ArrayList<>(); 64daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka for (Signature sig : info.signatures) { 65daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka out.add(sig.toByteArray()); 66daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka } 67daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka SIGNATURE = new ArrayList<>(); 68daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka SIGNATURE.add(out); 69daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka } catch (PackageManager.NameNotFoundException e) { 70daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka throw new RuntimeException(e); 71daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka } 72daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka } 73daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka 74daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka @Before 75daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka public void setUp() { 76daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka MockFontProvider.prepareFontFiles( 77daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka InstrumentationRegistry.getInstrumentation().getTargetContext()); 78daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka } 79daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka 80daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka @After 81daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka public void tearDown() { 82daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka MockFontProvider.cleanUpFontFiles( 83daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka InstrumentationRegistry.getInstrumentation().getTargetContext()); 84daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka } 85daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka 86daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka private static class TestCallback extends FontsContract.FontRequestCallback { 87daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka private Typeface mTypeface; 88daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka 89daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka private int mSuccessCallCount; 90daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka private int mFailedCallCount; 91daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka 92daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka public void onTypefaceRetrieved(Typeface typeface) { 93daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka mTypeface = typeface; 94daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka mSuccessCallCount++; 95daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka } 96daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka 97daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka public void onTypefaceRequestFailed(int reason) { 98daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka mFailedCallCount++; 99daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka } 100daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka 101daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka public Typeface getTypeface() { 102daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka return mTypeface; 103daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka } 104daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka 105daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka public int getSuccessCallCount() { 106daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka return mSuccessCallCount; 107daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka } 108daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka 109daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka public int getFailedCallCount() { 110daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka return mFailedCallCount; 111daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka } 112daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka } 113daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka 114daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka @Test 115daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka public void typefaceCacheTest() throws NameNotFoundException { 116daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka Instrumentation inst = InstrumentationRegistry.getInstrumentation(); 117daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka Context ctx = inst.getTargetContext(); 118daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka 119daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka final TestCallback callback = new TestCallback(); 120daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka inst.runOnMainSync(() -> { 121daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka FontRequest request = new FontRequest( 122daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka AUTHORITY, PACKAGE, "singleFontFamily", SIGNATURE); 1238ea62b036dd28231cb07beb210d361d9341c618eSeigo Nonaka FontsContract.requestFonts(ctx, request, new Handler(), null, callback); 124daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka }); 125daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka inst.waitForIdleSync(); 126daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka assertEquals(1, callback.getSuccessCallCount()); 127daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka assertEquals(0, callback.getFailedCallCount()); 128daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka assertNotNull(callback.getTypeface()); 129daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka 130daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka final TestCallback callback2 = new TestCallback(); 131daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka inst.runOnMainSync(() -> { 132daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka FontRequest request = new FontRequest( 133daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka AUTHORITY, PACKAGE, "singleFontFamily", SIGNATURE); 1348ea62b036dd28231cb07beb210d361d9341c618eSeigo Nonaka FontsContract.requestFonts(ctx, request, new Handler(), null, callback2); 135daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka }); 136daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka inst.waitForIdleSync(); 137daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka assertEquals(1, callback2.getSuccessCallCount()); 138daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka assertEquals(0, callback2.getFailedCallCount()); 139daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka assertSame(callback.getTypeface(), callback2.getTypeface()); 140daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka 141daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka final TestCallback callback3 = new TestCallback(); 142daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka inst.runOnMainSync(() -> { 143daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka FontRequest request = new FontRequest( 144daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka AUTHORITY, PACKAGE, "singleFontFamily2", SIGNATURE); 1458ea62b036dd28231cb07beb210d361d9341c618eSeigo Nonaka FontsContract.requestFonts(ctx, request, new Handler(), null, callback3); 146daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka }); 147daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka inst.waitForIdleSync(); 148daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka assertEquals(1, callback3.getSuccessCallCount()); 149daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka assertEquals(0, callback3.getFailedCallCount()); 150daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka assertNotSame(callback.getTypeface(), callback3.getTypeface()); 151daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka } 152daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka 153daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka @Test 154daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka public void typefaceNotCacheTest() throws NameNotFoundException { 155daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka Instrumentation inst = InstrumentationRegistry.getInstrumentation(); 156daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka Context ctx = inst.getTargetContext(); 157daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka 158daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka FontRequest request = new FontRequest( 159daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka AUTHORITY, PACKAGE, "singleFontFamily", SIGNATURE); 160daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka FontFamilyResult result = FontsContract.fetchFonts( 161daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka ctx, null /* cancellation signal */, request); 162daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka assertEquals(FontFamilyResult.STATUS_OK, result.getStatusCode()); 163daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka Typeface typeface = FontsContract.buildTypeface( 164daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka ctx, null /* cancellation signal */, result.getFonts()); 165daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka 166daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka FontFamilyResult result2 = FontsContract.fetchFonts( 167daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka ctx, null /* cancellation signal */, request); 168daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka assertEquals(FontFamilyResult.STATUS_OK, result2.getStatusCode()); 169daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka Typeface typeface2 = FontsContract.buildTypeface( 170daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka ctx, null /* cancellation signal */, result2.getFonts()); 171daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka 172daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka // Neighter fetchFonts nor buildTypeface should cache the Typeface. 173daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka assertNotSame(typeface, typeface2); 174daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka } 175d9de8be233d18ccc881cb647a5de2b32ff3e737cSeigo Nonaka 176d9de8be233d18ccc881cb647a5de2b32ff3e737cSeigo Nonaka @Test 177d9de8be233d18ccc881cb647a5de2b32ff3e737cSeigo Nonaka public void typefaceNullFdTest() throws NameNotFoundException { 178d9de8be233d18ccc881cb647a5de2b32ff3e737cSeigo Nonaka Instrumentation inst = InstrumentationRegistry.getInstrumentation(); 179d9de8be233d18ccc881cb647a5de2b32ff3e737cSeigo Nonaka Context ctx = inst.getTargetContext(); 180d9de8be233d18ccc881cb647a5de2b32ff3e737cSeigo Nonaka 181d9de8be233d18ccc881cb647a5de2b32ff3e737cSeigo Nonaka FontRequest request = new FontRequest( 182d9de8be233d18ccc881cb647a5de2b32ff3e737cSeigo Nonaka AUTHORITY, PACKAGE, MockFontProvider.NULL_FD_QUERY, SIGNATURE); 183d9de8be233d18ccc881cb647a5de2b32ff3e737cSeigo Nonaka FontFamilyResult result = FontsContract.fetchFonts( 184d9de8be233d18ccc881cb647a5de2b32ff3e737cSeigo Nonaka ctx, null /* cancellation signal */, request); 185d9de8be233d18ccc881cb647a5de2b32ff3e737cSeigo Nonaka assertNull(FontsContract.buildTypeface( 186d9de8be233d18ccc881cb647a5de2b32ff3e737cSeigo Nonaka ctx, null /* cancellation signal */, result.getFonts())); 187d9de8be233d18ccc881cb647a5de2b32ff3e737cSeigo Nonaka } 188d9de8be233d18ccc881cb647a5de2b32ff3e737cSeigo Nonaka 189d9de8be233d18ccc881cb647a5de2b32ff3e737cSeigo Nonaka @Test 190d9de8be233d18ccc881cb647a5de2b32ff3e737cSeigo Nonaka public void getFontSyncTest() { 191d9de8be233d18ccc881cb647a5de2b32ff3e737cSeigo Nonaka FontRequest request = new FontRequest(AUTHORITY, PACKAGE, "singleFontFamily", SIGNATURE); 192d9de8be233d18ccc881cb647a5de2b32ff3e737cSeigo Nonaka assertNotNull(FontsContract.getFontSync(request)); 193d9de8be233d18ccc881cb647a5de2b32ff3e737cSeigo Nonaka } 194d9de8be233d18ccc881cb647a5de2b32ff3e737cSeigo Nonaka 195d9de8be233d18ccc881cb647a5de2b32ff3e737cSeigo Nonaka @Test 196d9de8be233d18ccc881cb647a5de2b32ff3e737cSeigo Nonaka public void getFontSyncTest_timeout() { 197d9de8be233d18ccc881cb647a5de2b32ff3e737cSeigo Nonaka FontRequest request = new FontRequest( 198d9de8be233d18ccc881cb647a5de2b32ff3e737cSeigo Nonaka AUTHORITY, PACKAGE, MockFontProvider.BLOCKING_QUERY, SIGNATURE); 199d9de8be233d18ccc881cb647a5de2b32ff3e737cSeigo Nonaka assertNull(FontsContract.getFontSync(request)); 200d9de8be233d18ccc881cb647a5de2b32ff3e737cSeigo Nonaka MockFontProvider.unblock(); 201d9de8be233d18ccc881cb647a5de2b32ff3e737cSeigo Nonaka } 202daa8dfc690c4755510ccc15da5ed5bbdd9731fa4Seigo Nonaka} 203