DatabaseResultLoaderTest.java revision 2078bc2358031ef3a191900d9036daf4251911c1
17fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze/*
27fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze * Copyright (C) 2017 The Android Open Source Project
37fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze *
47fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze * Licensed under the Apache License, Version 2.0 (the "License");
57fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze * you may not use this file except in compliance with the License.
67fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze * You may obtain a copy of the License at
77fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze *
87fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze *      http://www.apache.org/licenses/LICENSE-2.0
97fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze *
107fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze * Unless required by applicable law or agreed to in writing, software
117fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze * distributed under the License is distributed on an "AS IS" BASIS,
127fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze * See the License for the specific language governing permissions and
147fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze * limitations under the License.
157fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze *
167fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze */
177fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
182078bc2358031ef3a191900d9036daf4251911c1Matthew Fritzepackage com.android.settings.search;
197fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
207fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritzeimport android.content.ContentValues;
217fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritzeimport android.content.Context;
2252b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritzeimport android.content.Intent;
237fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritzeimport android.database.sqlite.SQLiteDatabase;
24a8b089db8a6d495a18dc3ad91d3bd84b042fb004Fan Zhang
257fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritzeimport com.android.settings.SettingsRobolectricTestRunner;
267fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritzeimport com.android.settings.TestConfig;
27a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhangimport com.android.settings.dashboard.SiteMapManager;
282078bc2358031ef3a191900d9036daf4251911c1Matthew Fritzeimport com.android.settings.search.DatabaseIndexingUtils;
292078bc2358031ef3a191900d9036daf4251911c1Matthew Fritzeimport com.android.settings.search.DatabaseResultLoader;
30b7b286cb893268bec38584acdf5696f68675ecedMatthew Fritzeimport com.android.settings.search.IndexDatabaseHelper;
312078bc2358031ef3a191900d9036daf4251911c1Matthew Fritzeimport com.android.settings.search.InlineSwitchPayload;
322078bc2358031ef3a191900d9036daf4251911c1Matthew Fritzeimport com.android.settings.search.ResultPayload;
332078bc2358031ef3a191900d9036daf4251911c1Matthew Fritzeimport com.android.settings.search.ResultPayloadUtils;
342078bc2358031ef3a191900d9036daf4251911c1Matthew Fritzeimport com.android.settings.search.SearchResult;
35a8b089db8a6d495a18dc3ad91d3bd84b042fb004Fan Zhangimport com.android.settings.testutils.DatabaseTestUtils;
36a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhangimport com.android.settings.testutils.FakeFeatureFactory;
37a8b089db8a6d495a18dc3ad91d3bd84b042fb004Fan Zhang
387fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritzeimport org.junit.After;
397fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritzeimport org.junit.Before;
407fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritzeimport org.junit.Test;
417fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritzeimport org.junit.runner.RunWith;
42a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhangimport org.mockito.Answers;
43a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhangimport org.mockito.Mock;
44a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhangimport org.mockito.MockitoAnnotations;
457fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritzeimport org.robolectric.RuntimeEnvironment;
467fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritzeimport org.robolectric.annotation.Config;
477fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
4852b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritzeimport java.util.ArrayList;
49b7b286cb893268bec38584acdf5696f68675ecedMatthew Fritzeimport java.util.List;
50b7b286cb893268bec38584acdf5696f68675ecedMatthew Fritze
517fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritzeimport static com.google.common.truth.Truth.assertThat;
52a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhangimport static org.mockito.Matchers.anyString;
53a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhangimport static org.mockito.Matchers.eq;
54a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhangimport static org.mockito.Mockito.times;
55a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhangimport static org.mockito.Mockito.verify;
56a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhangimport static org.mockito.Mockito.when;
577fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
587fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze@RunWith(SettingsRobolectricTestRunner.class)
597fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
607fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritzepublic class DatabaseResultLoaderTest {
617fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
62a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhang    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
63a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhang    private Context mMockContext;
64a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhang    @Mock
65a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhang    private SiteMapManager mSiteMapManager;
66a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhang    private Context mContext;
677fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    private DatabaseResultLoader loader;
683746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze    private ResultPayload mResultPayload;
697fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
7052b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze    private final String titleOne = "titleOne";
7152b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze    private final String titleTwo = "titleTwo";
7252b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze    private final String titleThree = "titleThree";
7352b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze    private final String titleFour = "titleFour";
7452b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze    private final String summaryOne = "summaryOne";
7552b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze    private final String summaryTwo = "summaryTwo";
7652b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze    private final String summaryThree = "summaryThree";
7752b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze
787fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    SQLiteDatabase mDb;
797fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
807fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    @Before
817fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    public void setUp() {
82a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhang        MockitoAnnotations.initMocks(this);
837fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        mContext = RuntimeEnvironment.application;
843746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze        mResultPayload = new ResultPayload(new Intent());
85a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhang        FakeFeatureFactory.setupForTest(mMockContext);
86a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhang        FakeFeatureFactory factory =
87a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhang                (FakeFeatureFactory) FakeFeatureFactory.getFactory(mMockContext);
88a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhang        when(factory.searchFeatureProvider.getSiteMapManager())
89a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhang                .thenReturn(mSiteMapManager);
907fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        mDb = IndexDatabaseHelper.getInstance(mContext).getWritableDatabase();
917fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        setUpDb();
927fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    }
937fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
947fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    @After
957fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    public void cleanUp() {
96a8b089db8a6d495a18dc3ad91d3bd84b042fb004Fan Zhang        DatabaseTestUtils.clearDb();
977fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    }
987fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
997fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    @Test
1007fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    public void testMatchTitle() {
10140ce0fab758714c973945ec8f053c52076d5fc50Matthew Fritze        loader = new DatabaseResultLoader(mContext, "title", mSiteMapManager);
1023f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze        assertThat(loader.loadInBackground().size()).isEqualTo(2);
1033f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze        verify(mSiteMapManager, times(2)).buildBreadCrumb(eq(mContext), anyString(), anyString());
1047fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    }
1057fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
1067fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    @Test
1077fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    public void testMatchSummary() {
10840ce0fab758714c973945ec8f053c52076d5fc50Matthew Fritze        loader = new DatabaseResultLoader(mContext, "summary", mSiteMapManager);
1093f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze        assertThat(loader.loadInBackground().size()).isEqualTo(2);
1107fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    }
1117fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
1127fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    @Test
1137fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    public void testMatchKeywords() {
11440ce0fab758714c973945ec8f053c52076d5fc50Matthew Fritze        loader = new DatabaseResultLoader(mContext, "keywords", mSiteMapManager);
1153f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze        assertThat(loader.loadInBackground().size()).isEqualTo(2);
1167fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    }
1177fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
1187fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    @Test
1197fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    public void testMatchEntries() {
12040ce0fab758714c973945ec8f053c52076d5fc50Matthew Fritze        loader = new DatabaseResultLoader(mContext, "entries", mSiteMapManager);
1213f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze        assertThat(loader.loadInBackground().size()).isEqualTo(2);
1227fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    }
1237fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
1247fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    @Test
12552b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze    public void testSpecialCaseWord_matchesNonPrefix() {
1267fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        insertSpecialCase("Data usage");
12740ce0fab758714c973945ec8f053c52076d5fc50Matthew Fritze        loader = new DatabaseResultLoader(mContext, "usage", mSiteMapManager);
1287fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        assertThat(loader.loadInBackground().size()).isEqualTo(1);
1297fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    }
1307fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
1317fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    @Test
13252b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze    public void testSpecialCaseSpace_matches() {
1337fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        insertSpecialCase("space");
13440ce0fab758714c973945ec8f053c52076d5fc50Matthew Fritze        loader = new DatabaseResultLoader(mContext, " space ", mSiteMapManager);
1357fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        assertThat(loader.loadInBackground().size()).isEqualTo(1);
1367fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    }
1377fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
1387fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    @Test
13952b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze    public void testSpecialCaseDash_matchesWordNoDash() {
1407fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        insertSpecialCase("wi-fi calling");
14140ce0fab758714c973945ec8f053c52076d5fc50Matthew Fritze        loader = new DatabaseResultLoader(mContext, "wifi", mSiteMapManager);
1427fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        assertThat(loader.loadInBackground().size()).isEqualTo(1);
1437fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    }
1447fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
1457fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    @Test
14652b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze    public void testSpecialCaseDash_matchesWordWithDash() {
1477fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        insertSpecialCase("priorités seulment");
14840ce0fab758714c973945ec8f053c52076d5fc50Matthew Fritze        loader = new DatabaseResultLoader(mContext, "priorités", mSiteMapManager);
1497fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        assertThat(loader.loadInBackground().size()).isEqualTo(1);
1507fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    }
1517fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
1527fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    @Test
15352b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze    public void testSpecialCaseDash_matchesWordWithoutDash() {
1547fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        insertSpecialCase("priorités seulment");
15540ce0fab758714c973945ec8f053c52076d5fc50Matthew Fritze        loader = new DatabaseResultLoader(mContext, "priorites", mSiteMapManager);
1567fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        assertThat(loader.loadInBackground().size()).isEqualTo(1);
1577fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    }
1587fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
1597fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    @Test
16052b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze    public void testSpecialCaseDash_matchesEntireQueryWithoutDash() {
1617fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        insertSpecialCase("wi-fi calling");
16240ce0fab758714c973945ec8f053c52076d5fc50Matthew Fritze        loader = new DatabaseResultLoader(mContext, "wifi calling", mSiteMapManager);
1637fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        assertThat(loader.loadInBackground().size()).isEqualTo(1);
1647fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    }
1657fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
166314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze    @Test
16752b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze    public void testSpecialCasePrefix_matchesPrefixOfEntry() {
168314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        insertSpecialCase("Photos");
16940ce0fab758714c973945ec8f053c52076d5fc50Matthew Fritze        loader = new DatabaseResultLoader(mContext, "pho", mSiteMapManager);
170314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        assertThat(loader.loadInBackground().size()).isEqualTo(1);
171314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze    }
172314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze
173314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze    @Test
174314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze    public void testSpecialCasePrefix_DoesNotMatchNonPrefixSubstring() {
175314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        insertSpecialCase("Photos");
17640ce0fab758714c973945ec8f053c52076d5fc50Matthew Fritze        loader = new DatabaseResultLoader(mContext, "hot", mSiteMapManager);
177314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        assertThat(loader.loadInBackground().size()).isEqualTo(0);
178314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze    }
179314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze
180314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze    @Test
18152b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze    public void testSpecialCaseMultiWordPrefix_matchesPrefixOfEntry() {
182314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        insertSpecialCase("Apps Notifications");
18340ce0fab758714c973945ec8f053c52076d5fc50Matthew Fritze        loader = new DatabaseResultLoader(mContext, "Apps", mSiteMapManager);
184314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        assertThat(loader.loadInBackground().size()).isEqualTo(1);
185314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze    }
186314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze
187314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze    @Test
18852b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze    public void testSpecialCaseMultiWordPrefix_matchesSecondWordPrefixOfEntry() {
189314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        insertSpecialCase("Apps Notifications");
19040ce0fab758714c973945ec8f053c52076d5fc50Matthew Fritze        loader = new DatabaseResultLoader(mContext, "Not", mSiteMapManager);
191314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        assertThat(loader.loadInBackground().size()).isEqualTo(1);
192314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze    }
193314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze
194314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze    @Test
195314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze    public void testSpecialCaseMultiWordPrefix_DoesNotMatchMatchesPrefixOfFirstEntry() {
196314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        insertSpecialCase("Apps Notifications");
19740ce0fab758714c973945ec8f053c52076d5fc50Matthew Fritze        loader = new DatabaseResultLoader(mContext, "pp", mSiteMapManager);
198314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        assertThat(loader.loadInBackground().size()).isEqualTo(0);
199314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze    }
200314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze
201314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze    @Test
202314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze    public void testSpecialCaseMultiWordPrefix_DoesNotMatchMatchesPrefixOfSecondEntry() {
203314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        insertSpecialCase("Apps Notifications");
20440ce0fab758714c973945ec8f053c52076d5fc50Matthew Fritze        loader = new DatabaseResultLoader(mContext, "tion", mSiteMapManager);
205314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        assertThat(loader.loadInBackground().size()).isEqualTo(0);
206314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze    }
207314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze
208314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze    @Test
20952b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze    public void testSpecialCaseMultiWordPrefixWithSpecial_matchesPrefixOfEntry() {
210314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        insertSpecialCase("Apps & Notifications");
21140ce0fab758714c973945ec8f053c52076d5fc50Matthew Fritze        loader = new DatabaseResultLoader(mContext, "App", mSiteMapManager);
212314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        assertThat(loader.loadInBackground().size()).isEqualTo(1);
213314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze    }
214314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze
215314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze    @Test
21652b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze    public void testSpecialCaseMultiWordPrefixWithSpecial_matchesPrefixOfSecondEntry() {
217314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        insertSpecialCase("Apps & Notifications");
21840ce0fab758714c973945ec8f053c52076d5fc50Matthew Fritze        loader = new DatabaseResultLoader(mContext, "No", mSiteMapManager);
219314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        assertThat(loader.loadInBackground().size()).isEqualTo(1);
220314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze    }
221314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze
222b7b286cb893268bec38584acdf5696f68675ecedMatthew Fritze    @Test
22352b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze    public void testDeDupe_noDuplicates_originalListReturn() {
22452b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        // Three elements with unique titles and summaries
22552b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        List<SearchResult> results = new ArrayList();
22652b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze
22752b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        SearchResult.Builder builder = new SearchResult.Builder();
22852b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        builder.addTitle(titleOne)
22952b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze                .addSummary(summaryOne)
2303746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze                .addPayload(mResultPayload);
23152b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        SearchResult resultOne = builder.build();
23252b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        results.add(resultOne);
23352b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze
23452b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        builder.addTitle(titleTwo)
23552b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze                .addSummary(summaryTwo);
23652b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        SearchResult resultTwo = builder.build();
23752b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        results.add(resultTwo);
23852b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze
23952b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        builder.addTitle(titleThree)
24052b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze                .addSummary(summaryThree);
24152b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        SearchResult resultThree = builder.build();
24252b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        results.add(resultThree);
24352b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze
24452b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        loader = new DatabaseResultLoader(mContext, "", null);
24552b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        loader.removeDuplicates(results);
24652b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        assertThat(results.size()).isEqualTo(3);
24752b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        assertThat(results.get(0)).isEqualTo(resultOne);
24852b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        assertThat(results.get(1)).isEqualTo(resultTwo);
24952b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        assertThat(results.get(2)).isEqualTo(resultThree);
25052b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze    }
25152b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze
25252b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze    @Test
25352b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze    public void testDeDupe_oneDuplicate_duplicateRemoved() {
25452b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        List<SearchResult> results = new ArrayList();
25552b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze
25652b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        SearchResult.Builder builder = new SearchResult.Builder();
25752b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        builder.addTitle(titleOne)
25852b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze                .addSummary(summaryOne)
25952b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze                .addRank(0)
2603746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze                .addPayload(mResultPayload);
26152b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        SearchResult resultOne = builder.build();
26252b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        results.add(resultOne);
26352b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze
26452b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        // Duplicate of the first element
26552b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        builder.addTitle(titleOne)
26652b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze                .addSummary(summaryOne)
26752b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze                .addRank(1);
26852b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        SearchResult resultTwo = builder.build();
26952b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        results.add(resultTwo);
27052b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze
27152b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        // Unique
27252b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        builder.addTitle(titleThree)
27352b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze                .addSummary(summaryThree);
27452b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        SearchResult resultThree = builder.build();
27552b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        results.add(resultThree);
27652b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze
27752b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        loader = new DatabaseResultLoader(mContext, "", null);
27852b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        loader.removeDuplicates(results);
27952b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        assertThat(results.size()).isEqualTo(2);
28052b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        assertThat(results.get(0)).isEqualTo(resultOne);
28152b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        assertThat(results.get(1)).isEqualTo(resultThree);
28252b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze    }
28352b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze
28452b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze    @Test
28552b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze    public void testDeDupe_firstDupeInline_secondDuplicateRemoved() {
28652b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        List<SearchResult> results = new ArrayList();
2873746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze        InlineSwitchPayload inlinePayload = new InlineSwitchPayload("", 0, null, null);
28852b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze
28952b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        SearchResult.Builder builder = new SearchResult.Builder();
29052b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        // Inline result
29152b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        builder.addTitle(titleOne)
29252b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze                .addSummary(summaryOne)
29352b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze                .addRank(0)
29452b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze                .addPayload(inlinePayload);
29552b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        SearchResult resultOne = builder.build();
29652b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        results.add(resultOne);
29752b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze
29852b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        // Duplicate of first result, but Intent Result. Should be removed.
29952b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        builder.addTitle(titleOne)
30052b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze                .addSummary(summaryOne)
30152b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze                .addRank(1)
3023746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze                .addPayload(mResultPayload);
30352b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        SearchResult resultTwo = builder.build();
30452b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        results.add(resultTwo);
30552b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze
30652b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        // Unique
30752b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        builder.addTitle(titleThree)
30852b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze                .addSummary(summaryThree);
30952b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        SearchResult resultThree = builder.build();
31052b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        results.add(resultThree);
31152b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze
31252b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        loader = new DatabaseResultLoader(mContext, "", null);
31352b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        loader.removeDuplicates(results);
31452b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        assertThat(results.size()).isEqualTo(2);
31552b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        assertThat(results.get(0)).isEqualTo(resultOne);
31652b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        assertThat(results.get(1)).isEqualTo(resultThree);
31752b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze    }
31852b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze
31952b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze    @Test
32052b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze    public void testDeDupe_secondDupeInline_firstDuplicateRemoved() {
32152b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        /*
32252b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze         * Create a list as follows:
32352b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze         * (5) Intent Four
32452b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze         * (4) Inline Two
32552b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze         * (3) Intent Three
32652b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze         * (2) Intent Two
32752b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze         * (1) Intent One
32852b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze         *
32952b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze         * After removing duplicates:
33052b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze         * (4) Intent Four
33152b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze         * (3) Inline Two
33252b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze         * (2) Intent Three
33352b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze         * (1) Intent One
33452b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze         */
33552b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        List<SearchResult> results = new ArrayList();
3363746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze        InlineSwitchPayload inlinePayload = new InlineSwitchPayload("", 0, null, null);
33752b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze
33852b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        SearchResult.Builder builder = new SearchResult.Builder();
33952b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        // Intent One
34052b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        builder.addTitle(titleOne)
34152b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze                .addSummary(summaryOne)
3423746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze                .addPayload(mResultPayload);
34352b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        SearchResult resultOne = builder.build();
34452b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        results.add(resultOne);
34552b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze
34652b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        // Intent Two
34752b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        builder.addTitle(titleTwo)
34852b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze                .addSummary(summaryTwo)
3493746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze                .addPayload(mResultPayload);
35052b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        SearchResult resultTwo = builder.build();
35152b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        results.add(resultTwo);
35252b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze
35352b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        // Intent Three
35452b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        builder.addTitle(titleThree)
35552b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze                .addSummary(summaryThree);
35652b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        SearchResult resultThree = builder.build();
35752b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        results.add(resultThree);
35852b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze
35952b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        // Inline Two
36052b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        builder.addTitle(titleTwo)
36152b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze                .addSummary(summaryTwo)
36252b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze                .addPayload(inlinePayload);
36352b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        SearchResult resultFour = builder.build();
36452b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        results.add(resultFour);
36552b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze
36652b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        // Intent Four
36752b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        builder.addTitle(titleFour)
36852b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze                .addSummary(summaryOne)
3693746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze                .addPayload(mResultPayload);
37052b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        SearchResult resultFive = builder.build();
37152b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        results.add(resultFive);
37252b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze
37352b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        loader = new DatabaseResultLoader(mContext, "", null);
37452b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        loader.removeDuplicates(results);
37552b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        assertThat(results.size()).isEqualTo(4);
37652b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        assertThat(results.get(0)).isEqualTo(resultOne);
37752b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        assertThat(results.get(1)).isEqualTo(resultThree);
37852b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        assertThat(results.get(2)).isEqualTo(resultFour);
37952b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze        assertThat(results.get(3)).isEqualTo(resultFive);
38052b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze    }
38152b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze
38252b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze    @Test
38352b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze    public void testSpecialCaseTwoWords_firstWordMatches_ranksHigher() {
384b7b286cb893268bec38584acdf5696f68675ecedMatthew Fritze        final String caseOne = "Apple pear";
385b7b286cb893268bec38584acdf5696f68675ecedMatthew Fritze        final String caseTwo = "Banana apple";
386b7b286cb893268bec38584acdf5696f68675ecedMatthew Fritze        insertSpecialCase(caseOne);
387b7b286cb893268bec38584acdf5696f68675ecedMatthew Fritze        insertSpecialCase(caseTwo);
388b7b286cb893268bec38584acdf5696f68675ecedMatthew Fritze        loader = new DatabaseResultLoader(mContext, "App", null);
389b7b286cb893268bec38584acdf5696f68675ecedMatthew Fritze        List<? extends SearchResult> results = loader.loadInBackground();
390b7b286cb893268bec38584acdf5696f68675ecedMatthew Fritze
391b7b286cb893268bec38584acdf5696f68675ecedMatthew Fritze        assertThat(results.get(0).title).isEqualTo(caseOne);
392b7b286cb893268bec38584acdf5696f68675ecedMatthew Fritze        assertThat(results.get(1).title).isEqualTo(caseTwo);
393b7b286cb893268bec38584acdf5696f68675ecedMatthew Fritze        assertThat(results.get(0).rank).isLessThan(results.get(1).rank);
394b7b286cb893268bec38584acdf5696f68675ecedMatthew Fritze    }
395b7b286cb893268bec38584acdf5696f68675ecedMatthew Fritze
3967fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    private void insertSpecialCase(String specialCase) {
3977fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        String normalized = DatabaseIndexingUtils.normalizeHyphen(specialCase);
3987fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        normalized = DatabaseIndexingUtils.normalizeString(normalized);
3993746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze        final ResultPayload payload = new ResultPayload(new Intent());
4007fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
4017fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        ContentValues values = new ContentValues();
402b7b286cb893268bec38584acdf5696f68675ecedMatthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DOCID, normalized.hashCode());
4037fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.LOCALE, "en-us");
4047fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_RANK, 1);
4057fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_TITLE, specialCase);
4067fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_TITLE_NORMALIZED, normalized);
4077fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_ON, "");
4087fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_ON_NORMALIZED, "");
4097fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_OFF, "");
4107fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_OFF_NORMALIZED, "");
4117fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_ENTRIES, "");
4127fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_KEYWORDS, "");
4137fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.CLASS_NAME,
4147fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze                "com.android.settings.gestures.GestureSettings");
4157fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.SCREEN_TITLE, "Moves");
4167fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.INTENT_ACTION, "");
4177fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_PACKAGE, "");
4187fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_CLASS, "");
4197fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.ICON, "");
4203f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.ENABLED, true);
4217fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_KEY_REF, "gesture_double_tap_power");
4227fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.USER_ID, 0);
4237fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.PAYLOAD_TYPE, 0);
4243746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.PAYLOAD, ResultPayloadUtils.marshall(payload));
4257fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
4267fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        mDb.replaceOrThrow(IndexDatabaseHelper.Tables.TABLE_PREFS_INDEX, null, values);
4277fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    }
4287fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
4297fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    private void setUpDb() {
4303746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze        final byte[] payload = ResultPayloadUtils.marshall(new ResultPayload(new Intent()));
4313746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze
4327fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        ContentValues values = new ContentValues();
4337fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DOCID, 0);
4347fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.LOCALE, "en-us");
4357fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_RANK, 1);
4367fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_TITLE, "alpha_title");
4377fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_TITLE_NORMALIZED, "alpha title");
4387fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_ON, "alpha_summary");
439314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_ON_NORMALIZED, "alpha summary");
4407fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_OFF, "alpha_summary");
441314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_OFF_NORMALIZED, "alpha summary");
442314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_ENTRIES, "alpha entries");
443314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_KEYWORDS, "alpha keywords");
4447fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.CLASS_NAME,
4457fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze                "com.android.settings.gestures.GestureSettings");
4467fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.SCREEN_TITLE, "Moves");
4477fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.INTENT_ACTION, "");
4487fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_PACKAGE, "");
4497fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_CLASS, "");
4507fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.ICON, "");
4513f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.ENABLED, true);
4527fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_KEY_REF, "gesture_double_tap_power");
4537fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.USER_ID, 0);
4547fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.PAYLOAD_TYPE, 0);
4553746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.PAYLOAD, payload);
4567fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
4577fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        mDb.replaceOrThrow(IndexDatabaseHelper.Tables.TABLE_PREFS_INDEX, null, values);
4587fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
4597fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values = new ContentValues();
4607fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DOCID, 1);
4617fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.LOCALE, "en-us");
4627fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_RANK, 1);
4637fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_TITLE, "bravo_title");
4647fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_TITLE_NORMALIZED, "bravo title");
4657fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_ON, "bravo_summary");
466314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_ON_NORMALIZED, "bravo summary");
4677fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_OFF, "bravo_summary");
468314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_OFF_NORMALIZED, "bravo summary");
469314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_ENTRIES, "bravo entries");
470314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_KEYWORDS, "bravo keywords");
4717fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.CLASS_NAME,
4727fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze                "com.android.settings.gestures.GestureSettings");
4737fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.SCREEN_TITLE, "Moves");
4747fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.INTENT_ACTION, "");
4757fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_PACKAGE, "");
4767fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_CLASS, "");
4777fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.ICON, "");
4783f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.ENABLED, true);
4797fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_KEY_REF, "gesture_double_tap_power");
4807fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.USER_ID, 0);
4817fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.PAYLOAD_TYPE, 0);
4823746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.PAYLOAD, payload);
4837fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        mDb.replaceOrThrow(IndexDatabaseHelper.Tables.TABLE_PREFS_INDEX, null, values);
4847fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
4857fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values = new ContentValues();
4867fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DOCID, 2);
4877fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.LOCALE, "en-us");
4887fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_RANK, 1);
4897fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_TITLE, "charlie_title");
4907fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_TITLE_NORMALIZED, "charlie title");
4917fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_ON, "charlie_summary");
492314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_ON_NORMALIZED, "charlie summary");
4937fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_OFF, "charlie_summary");
494314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_OFF_NORMALIZED, "charlie summary");
495314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_ENTRIES, "charlie entries");
496314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_KEYWORDS, "charlie keywords");
4977fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.CLASS_NAME,
4987fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze                "com.android.settings.gestures.GestureSettings");
4997fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.SCREEN_TITLE, "Moves");
5007fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.INTENT_ACTION, "");
5017fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_PACKAGE, "");
5027fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_CLASS, "");
5037fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.ICON, "");
5043f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.ENABLED, false);
5057fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_KEY_REF, "gesture_double_tap_power");
5067fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.USER_ID, 0);
5077fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.PAYLOAD_TYPE, 0);
5083746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.PAYLOAD, payload);
5097fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
5107fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        mDb.replaceOrThrow(IndexDatabaseHelper.Tables.TABLE_PREFS_INDEX, null, values);
5117fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    }
512b7b286cb893268bec38584acdf5696f68675ecedMatthew Fritze}