DatabaseResultLoaderTest.java revision a96b11f65d9f29dd4037da85e12f5cf9dcfa0176
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 18package com.android.settings.search; 19 20import android.content.ContentValues; 21import android.content.Context; 22import android.database.sqlite.SQLiteDatabase; 23 24import com.android.settings.SettingsRobolectricTestRunner; 25import com.android.settings.TestConfig; 26import com.android.settings.dashboard.SiteMapManager; 27import com.android.settings.search2.DatabaseIndexingUtils; 28import com.android.settings.search2.DatabaseResultLoader; 29import com.android.settings.testutils.DatabaseTestUtils; 30import com.android.settings.testutils.FakeFeatureFactory; 31 32import org.junit.After; 33import org.junit.Before; 34import org.junit.Test; 35import org.junit.runner.RunWith; 36import org.mockito.Answers; 37import org.mockito.Mock; 38import org.mockito.MockitoAnnotations; 39import org.robolectric.RuntimeEnvironment; 40import org.robolectric.annotation.Config; 41 42import static com.google.common.truth.Truth.assertThat; 43import static org.mockito.Matchers.anyString; 44import static org.mockito.Matchers.eq; 45import static org.mockito.Mockito.times; 46import static org.mockito.Mockito.verify; 47import static org.mockito.Mockito.when; 48 49@RunWith(SettingsRobolectricTestRunner.class) 50@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) 51public class DatabaseResultLoaderTest { 52 53 @Mock(answer = Answers.RETURNS_DEEP_STUBS) 54 private Context mMockContext; 55 @Mock 56 private SiteMapManager mSiteMapManager; 57 private Context mContext; 58 private DatabaseResultLoader loader; 59 60 SQLiteDatabase mDb; 61 62 @Before 63 public void setUp() { 64 MockitoAnnotations.initMocks(this); 65 mContext = RuntimeEnvironment.application; 66 FakeFeatureFactory.setupForTest(mMockContext); 67 FakeFeatureFactory factory = 68 (FakeFeatureFactory) FakeFeatureFactory.getFactory(mMockContext); 69 when(factory.searchFeatureProvider.getSiteMapManager()) 70 .thenReturn(mSiteMapManager); 71 mDb = IndexDatabaseHelper.getInstance(mContext).getWritableDatabase(); 72 setUpDb(); 73 } 74 75 @After 76 public void cleanUp() { 77 DatabaseTestUtils.clearDb(); 78 } 79 80 @Test 81 public void testMatchTitle() { 82 loader = new DatabaseResultLoader(mContext, "title"); 83 assertThat(loader.loadInBackground().size()).isEqualTo(3); 84 verify(mSiteMapManager, times(3)).buildBreadCrumb(eq(mContext), anyString(), anyString()); 85 } 86 87 @Test 88 public void testMatchSummary() { 89 loader = new DatabaseResultLoader(mContext, "summary"); 90 assertThat(loader.loadInBackground().size()).isEqualTo(3); 91 } 92 93 @Test 94 public void testMatchKeywords() { 95 loader = new DatabaseResultLoader(mContext, "keywords"); 96 assertThat(loader.loadInBackground().size()).isEqualTo(3); 97 } 98 99 @Test 100 public void testMatchEntries() { 101 loader = new DatabaseResultLoader(mContext, "entries"); 102 assertThat(loader.loadInBackground().size()).isEqualTo(3); 103 } 104 105 @Test 106 public void testSpecialCaseWord_MatchesNonPrefix() { 107 insertSpecialCase("Data usage"); 108 loader = new DatabaseResultLoader(mContext, "usage"); 109 assertThat(loader.loadInBackground().size()).isEqualTo(1); 110 } 111 112 @Test 113 public void testSpecialCaseSpace_Matches() { 114 insertSpecialCase("space"); 115 loader = new DatabaseResultLoader(mContext, " space "); 116 assertThat(loader.loadInBackground().size()).isEqualTo(1); 117 } 118 119 @Test 120 public void testSpecialCaseDash_MatchesWordNoDash() { 121 insertSpecialCase("wi-fi calling"); 122 loader = new DatabaseResultLoader(mContext, "wifi"); 123 assertThat(loader.loadInBackground().size()).isEqualTo(1); 124 } 125 126 @Test 127 public void testSpecialCaseDash_MatchesWordWithDash() { 128 insertSpecialCase("priorités seulment"); 129 loader = new DatabaseResultLoader(mContext, "priorités"); 130 assertThat(loader.loadInBackground().size()).isEqualTo(1); 131 } 132 133 @Test 134 public void testSpecialCaseDash_MatchesWordWithoutDash() { 135 insertSpecialCase("priorités seulment"); 136 loader = new DatabaseResultLoader(mContext, "priorites"); 137 assertThat(loader.loadInBackground().size()).isEqualTo(1); 138 } 139 140 @Test 141 public void testSpecialCaseDash_MatchesEntireQueryWithoutDash() { 142 insertSpecialCase("wi-fi calling"); 143 loader = new DatabaseResultLoader(mContext, "wifi calling"); 144 assertThat(loader.loadInBackground().size()).isEqualTo(1); 145 } 146 147 private void insertSpecialCase(String specialCase) { 148 String normalized = DatabaseIndexingUtils.normalizeHyphen(specialCase); 149 normalized = DatabaseIndexingUtils.normalizeString(normalized); 150 151 ContentValues values = new ContentValues(); 152 values.put(IndexDatabaseHelper.IndexColumns.DOCID, 0); 153 values.put(IndexDatabaseHelper.IndexColumns.LOCALE, "en-us"); 154 values.put(IndexDatabaseHelper.IndexColumns.DATA_RANK, 1); 155 values.put(IndexDatabaseHelper.IndexColumns.DATA_TITLE, specialCase); 156 values.put(IndexDatabaseHelper.IndexColumns.DATA_TITLE_NORMALIZED, normalized); 157 values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_ON, ""); 158 values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_ON_NORMALIZED, ""); 159 values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_OFF, ""); 160 values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_OFF_NORMALIZED, ""); 161 values.put(IndexDatabaseHelper.IndexColumns.DATA_ENTRIES, ""); 162 values.put(IndexDatabaseHelper.IndexColumns.DATA_KEYWORDS, ""); 163 values.put(IndexDatabaseHelper.IndexColumns.CLASS_NAME, 164 "com.android.settings.gestures.GestureSettings"); 165 values.put(IndexDatabaseHelper.IndexColumns.SCREEN_TITLE, "Moves"); 166 values.put(IndexDatabaseHelper.IndexColumns.INTENT_ACTION, ""); 167 values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_PACKAGE, ""); 168 values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_CLASS, ""); 169 values.put(IndexDatabaseHelper.IndexColumns.ICON, ""); 170 values.put(IndexDatabaseHelper.IndexColumns.ENABLED, ""); 171 values.put(IndexDatabaseHelper.IndexColumns.DATA_KEY_REF, "gesture_double_tap_power"); 172 values.put(IndexDatabaseHelper.IndexColumns.USER_ID, 0); 173 values.put(IndexDatabaseHelper.IndexColumns.PAYLOAD_TYPE, 0); 174 values.put(IndexDatabaseHelper.IndexColumns.PAYLOAD, (String) null); 175 176 mDb.replaceOrThrow(IndexDatabaseHelper.Tables.TABLE_PREFS_INDEX, null, values); 177 } 178 179 private void setUpDb() { 180 ContentValues values = new ContentValues(); 181 values.put(IndexDatabaseHelper.IndexColumns.DOCID, 0); 182 values.put(IndexDatabaseHelper.IndexColumns.LOCALE, "en-us"); 183 values.put(IndexDatabaseHelper.IndexColumns.DATA_RANK, 1); 184 values.put(IndexDatabaseHelper.IndexColumns.DATA_TITLE, "alpha_title"); 185 values.put(IndexDatabaseHelper.IndexColumns.DATA_TITLE_NORMALIZED, "alpha title"); 186 values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_ON, "alpha_summary"); 187 values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_ON_NORMALIZED, "alpha_summary"); 188 values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_OFF, "alpha_summary"); 189 values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_OFF_NORMALIZED, "alpha_summary"); 190 values.put(IndexDatabaseHelper.IndexColumns.DATA_ENTRIES, "alpha_entries"); 191 values.put(IndexDatabaseHelper.IndexColumns.DATA_KEYWORDS, "alpha_keywords"); 192 values.put(IndexDatabaseHelper.IndexColumns.CLASS_NAME, 193 "com.android.settings.gestures.GestureSettings"); 194 values.put(IndexDatabaseHelper.IndexColumns.SCREEN_TITLE, "Moves"); 195 values.put(IndexDatabaseHelper.IndexColumns.INTENT_ACTION, ""); 196 values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_PACKAGE, ""); 197 values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_CLASS, ""); 198 values.put(IndexDatabaseHelper.IndexColumns.ICON, ""); 199 values.put(IndexDatabaseHelper.IndexColumns.ENABLED, ""); 200 values.put(IndexDatabaseHelper.IndexColumns.DATA_KEY_REF, "gesture_double_tap_power"); 201 values.put(IndexDatabaseHelper.IndexColumns.USER_ID, 0); 202 values.put(IndexDatabaseHelper.IndexColumns.PAYLOAD_TYPE, 0); 203 values.put(IndexDatabaseHelper.IndexColumns.PAYLOAD, (String) null); 204 205 mDb.replaceOrThrow(IndexDatabaseHelper.Tables.TABLE_PREFS_INDEX, null, values); 206 207 values = new ContentValues(); 208 values.put(IndexDatabaseHelper.IndexColumns.DOCID, 1); 209 values.put(IndexDatabaseHelper.IndexColumns.LOCALE, "en-us"); 210 values.put(IndexDatabaseHelper.IndexColumns.DATA_RANK, 1); 211 values.put(IndexDatabaseHelper.IndexColumns.DATA_TITLE, "bravo_title"); 212 values.put(IndexDatabaseHelper.IndexColumns.DATA_TITLE_NORMALIZED, "bravo title"); 213 values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_ON, "bravo_summary"); 214 values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_ON_NORMALIZED, "bravo_summary"); 215 values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_OFF, "bravo_summary"); 216 values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_OFF_NORMALIZED, "bravo_summary"); 217 values.put(IndexDatabaseHelper.IndexColumns.DATA_ENTRIES, "bravo_entries"); 218 values.put(IndexDatabaseHelper.IndexColumns.DATA_KEYWORDS, "bravo_keywords"); 219 values.put(IndexDatabaseHelper.IndexColumns.CLASS_NAME, 220 "com.android.settings.gestures.GestureSettings"); 221 values.put(IndexDatabaseHelper.IndexColumns.SCREEN_TITLE, "Moves"); 222 values.put(IndexDatabaseHelper.IndexColumns.INTENT_ACTION, ""); 223 values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_PACKAGE, ""); 224 values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_CLASS, ""); 225 values.put(IndexDatabaseHelper.IndexColumns.ICON, ""); 226 values.put(IndexDatabaseHelper.IndexColumns.ENABLED, ""); 227 values.put(IndexDatabaseHelper.IndexColumns.DATA_KEY_REF, "gesture_double_tap_power"); 228 values.put(IndexDatabaseHelper.IndexColumns.USER_ID, 0); 229 values.put(IndexDatabaseHelper.IndexColumns.PAYLOAD_TYPE, 0); 230 values.put(IndexDatabaseHelper.IndexColumns.PAYLOAD, (String) null); 231 mDb.replaceOrThrow(IndexDatabaseHelper.Tables.TABLE_PREFS_INDEX, null, values); 232 233 values = new ContentValues(); 234 values.put(IndexDatabaseHelper.IndexColumns.DOCID, 2); 235 values.put(IndexDatabaseHelper.IndexColumns.LOCALE, "en-us"); 236 values.put(IndexDatabaseHelper.IndexColumns.DATA_RANK, 1); 237 values.put(IndexDatabaseHelper.IndexColumns.DATA_TITLE, "charlie_title"); 238 values.put(IndexDatabaseHelper.IndexColumns.DATA_TITLE_NORMALIZED, "charlie title"); 239 values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_ON, "charlie_summary"); 240 values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_ON_NORMALIZED, "charlie_summary"); 241 values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_OFF, "charlie_summary"); 242 values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_OFF_NORMALIZED, "charlie_summary"); 243 values.put(IndexDatabaseHelper.IndexColumns.DATA_ENTRIES, "charlie_entries"); 244 values.put(IndexDatabaseHelper.IndexColumns.DATA_KEYWORDS, "charlie_keywords"); 245 values.put(IndexDatabaseHelper.IndexColumns.CLASS_NAME, 246 "com.android.settings.gestures.GestureSettings"); 247 values.put(IndexDatabaseHelper.IndexColumns.SCREEN_TITLE, "Moves"); 248 values.put(IndexDatabaseHelper.IndexColumns.INTENT_ACTION, ""); 249 values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_PACKAGE, ""); 250 values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_CLASS, ""); 251 values.put(IndexDatabaseHelper.IndexColumns.ICON, ""); 252 values.put(IndexDatabaseHelper.IndexColumns.ENABLED, ""); 253 values.put(IndexDatabaseHelper.IndexColumns.DATA_KEY_REF, "gesture_double_tap_power"); 254 values.put(IndexDatabaseHelper.IndexColumns.USER_ID, 0); 255 values.put(IndexDatabaseHelper.IndexColumns.PAYLOAD_TYPE, 0); 256 values.put(IndexDatabaseHelper.IndexColumns.PAYLOAD, (String) null); 257 258 mDb.replaceOrThrow(IndexDatabaseHelper.Tables.TABLE_PREFS_INDEX, null, values); 259 } 260} 261