1 package com.android.settings.search; 2 3 import static com.google.common.truth.Truth.assertThat; 4 import static org.mockito.Mockito.mock; 5 import static org.mockito.Mockito.spy; 6 7 import android.Manifest; 8 import android.content.pm.ProviderInfo; 9 import android.database.Cursor; 10 import android.net.Uri; 11 import android.provider.SearchIndexablesContract; 12 13 import com.android.settings.R; 14 import com.android.settings.search.indexing.FakeSettingsFragment; 15 import com.android.settings.testutils.FakeFeatureFactory; 16 import com.android.settings.testutils.SettingsRobolectricTestRunner; 17 18 import org.junit.After; 19 import org.junit.Before; 20 import org.junit.Test; 21 import org.junit.runner.RunWith; 22 import org.robolectric.RuntimeEnvironment; 23 import org.robolectric.annotation.Config; 24 25 @RunWith(SettingsRobolectricTestRunner.class) 26 public class SettingsSearchIndexablesProviderTest { 27 28 private static final String BASE_AUTHORITY = "com.android.settings"; 29 30 private SettingsSearchIndexablesProvider mProvider; 31 private FakeFeatureFactory mFakeFeatureFactory; 32 33 @Before setUp()34 public void setUp() { 35 mProvider = spy(new SettingsSearchIndexablesProvider()); 36 ProviderInfo info = new ProviderInfo(); 37 info.exported = true; 38 info.grantUriPermissions = true; 39 info.authority = BASE_AUTHORITY; 40 info.readPermission = Manifest.permission.READ_SEARCH_INDEXABLES; 41 mProvider.attachInfo(RuntimeEnvironment.application, info); 42 43 final SearchFeatureProvider featureProvider = new SearchFeatureProviderImpl(); 44 featureProvider.getSearchIndexableResources().getProviderValues().clear(); 45 featureProvider.getSearchIndexableResources().getProviderValues() 46 .add(FakeSettingsFragment.class); 47 mFakeFeatureFactory = FakeFeatureFactory.setupForTest(); 48 mFakeFeatureFactory.searchFeatureProvider = featureProvider; 49 } 50 51 @After cleanUp()52 public void cleanUp() { 53 mFakeFeatureFactory.searchFeatureProvider = mock(SearchFeatureProvider.class); 54 } 55 56 @Test testRawColumnFetched()57 public void testRawColumnFetched() { 58 Uri rawUri = Uri.parse("content://" + BASE_AUTHORITY + "/" + 59 SearchIndexablesContract.INDEXABLES_RAW_PATH); 60 61 final Cursor cursor = mProvider.query(rawUri, 62 SearchIndexablesContract.INDEXABLES_RAW_COLUMNS, null, null, null); 63 64 cursor.moveToFirst(); 65 assertThat(cursor.getString(1)).isEqualTo(FakeSettingsFragment.TITLE); 66 assertThat(cursor.getString(2)).isEqualTo(FakeSettingsFragment.SUMMARY_ON); 67 assertThat(cursor.getString(3)).isEqualTo(FakeSettingsFragment.SUMMARY_OFF); 68 assertThat(cursor.getString(4)).isEqualTo(FakeSettingsFragment.ENTRIES); 69 assertThat(cursor.getString(5)).isEqualTo(FakeSettingsFragment.KEYWORDS); 70 assertThat(cursor.getString(6)).isEqualTo(FakeSettingsFragment.SCREEN_TITLE); 71 assertThat(cursor.getString(7)).isEqualTo(FakeSettingsFragment.CLASS_NAME); 72 assertThat(cursor.getInt(8)).isEqualTo(FakeSettingsFragment.ICON); 73 assertThat(cursor.getString(9)).isEqualTo(FakeSettingsFragment.INTENT_ACTION); 74 assertThat(cursor.getString(10)).isEqualTo(FakeSettingsFragment.TARGET_PACKAGE); 75 assertThat(cursor.getString(11)).isEqualTo(FakeSettingsFragment.TARGET_CLASS); 76 assertThat(cursor.getString(12)).isEqualTo(FakeSettingsFragment.KEY); 77 } 78 79 @Test testResourcesColumnFetched()80 public void testResourcesColumnFetched() { 81 Uri rawUri = Uri.parse("content://" + BASE_AUTHORITY + "/" + 82 SearchIndexablesContract.INDEXABLES_XML_RES_PATH); 83 84 final Cursor cursor = mProvider.query(rawUri, 85 SearchIndexablesContract.INDEXABLES_XML_RES_COLUMNS, null, null, null); 86 87 cursor.moveToFirst(); 88 assertThat(cursor.getCount()).isEqualTo(1); 89 assertThat(cursor.getInt(1)).isEqualTo(R.xml.display_settings); 90 assertThat(cursor.getString(2)).isEqualTo(FakeSettingsFragment.CLASS_NAME); 91 assertThat(cursor.getInt(3)).isEqualTo(0); 92 assertThat(cursor.getString(4)).isNull(); 93 assertThat(cursor.getString(5)).isNull(); 94 assertThat(cursor.getString(6)).isNull(); 95 } 96 97 @Test 98 @Config(qualifiers = "mcc999") testNonIndexablesColumnFetched()99 public void testNonIndexablesColumnFetched() { 100 Uri rawUri = Uri.parse("content://" + BASE_AUTHORITY + "/" + 101 SearchIndexablesContract.NON_INDEXABLES_KEYS_PATH); 102 103 final Cursor cursor = mProvider.query(rawUri, 104 SearchIndexablesContract.NON_INDEXABLES_KEYS_COLUMNS, null, null, null); 105 106 cursor.moveToFirst(); 107 assertThat(cursor.getCount()).isEqualTo(2); 108 assertThat(cursor.getString(0)).isEqualTo("pref_key_1"); 109 cursor.moveToNext(); 110 assertThat(cursor.getString(0)).isEqualTo("pref_key_3"); 111 } 112 } 113