10ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze/*
22078bc2358031ef3a191900d9036daf4251911c1Matthew Fritze * Copyright (C) 2017 The Android Open Source Project
30ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze *
40ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze * Licensed under the Apache License, Version 2.0 (the "License");
50ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze * you may not use this file except in compliance with the License.
60ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze * You may obtain a copy of the License at
70ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze *
80ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze *      http://www.apache.org/licenses/LICENSE-2.0
90ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze *
100ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze * Unless required by applicable law or agreed to in writing, software
110ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze * distributed under the License is distributed on an "AS IS" BASIS,
120ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze * See the License for the specific language governing permissions and
140ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze * limitations under the License.
150ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze *
160ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze */
170ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze
182078bc2358031ef3a191900d9036daf4251911c1Matthew Fritzepackage com.android.settings.search;
190ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze
204e7bd693b20b471f1d170909e9609fe5c97a72f0Fan Zhangimport static com.google.common.truth.Truth.assertThat;
214e7bd693b20b471f1d170909e9609fe5c97a72f0Fan Zhang
220ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritzeimport android.app.Activity;
230ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritzeimport android.content.Context;
240ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritzeimport android.content.Intent;
253746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritzeimport android.database.Cursor;
260ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritzeimport android.database.MatrixCursor;
270ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritzeimport android.graphics.drawable.Drawable;
286c423bd518da0852f9b18782c7b0ff743c92e7feFan Zhang
29b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritzeimport com.android.settings.DisplaySettings;
3012daf6830de241cc86408f904300ff0bdee02a9cFan Zhangimport com.android.settings.R;
310ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritzeimport com.android.settings.TestConfig;
32a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhangimport com.android.settings.dashboard.SiteMapManager;
33d299b03f28fd23973b32931c3ae9a254a37d474dDoris Lingimport com.android.settings.gestures.SwipeToNotificationSettings;
342b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritzeimport com.android.settings.search.ResultPayload.Availability;
352078bc2358031ef3a191900d9036daf4251911c1Matthew Fritzeimport com.android.settings.search.ResultPayload.PayloadType;
364e7bd693b20b471f1d170909e9609fe5c97a72f0Fan Zhangimport com.android.settings.testutils.SettingsRobolectricTestRunner;
37b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritzeimport com.android.settings.wifi.WifiSettings;
384e7bd693b20b471f1d170909e9609fe5c97a72f0Fan Zhang
390ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritzeimport org.junit.Before;
400ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritzeimport org.junit.Test;
410ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritzeimport org.junit.runner.RunWith;
42a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhangimport org.mockito.Answers;
43a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhangimport org.mockito.Mock;
44a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhangimport org.mockito.MockitoAnnotations;
450ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritzeimport org.robolectric.Robolectric;
4612daf6830de241cc86408f904300ff0bdee02a9cFan Zhangimport org.robolectric.annotation.Config;
470ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze
480ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritzeimport java.util.ArrayList;
496efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritzeimport java.util.Arrays;
500ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritzeimport java.util.List;
516efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritzeimport java.util.Set;
520ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze
530ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze@RunWith(SettingsRobolectricTestRunner.class)
540ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
5565fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritzepublic class CursorToSearchResultConverterTest {
5665fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze
576efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze    private static final List<String> TITLES = Arrays.asList("title1", "title2", "title3");
587fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    private static final String SUMMARY = "summary";
596c423bd518da0852f9b18782c7b0ff743c92e7feFan Zhang    private static final String TARGET_PACKAGE = "a.b.c";
606c423bd518da0852f9b18782c7b0ff743c92e7feFan Zhang    private static final String TARGET_CLASS = "a.b.c.class";
613746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze    private static final String KEY = "key";
626c423bd518da0852f9b18782c7b0ff743c92e7feFan Zhang    private static final Intent INTENT = new Intent("com.android.settings");
634e7bd693b20b471f1d170909e9609fe5c97a72f0Fan Zhang    private static final int ICON = R.drawable.ic_search_24dp;
646c423bd518da0852f9b18782c7b0ff743c92e7feFan Zhang    private static final int BASE_RANK = 1;
657fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
66a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhang    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
67a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhang    private SiteMapManager mSiteMapManager;
680ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze    private Drawable mDrawable;
696c423bd518da0852f9b18782c7b0ff743c92e7feFan Zhang    private CursorToSearchResultConverter mConverter;
700ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze
710ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze    @Before
720ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze    public void setUp() {
73a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhang        MockitoAnnotations.initMocks(this);
740ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze        Context context = Robolectric.buildActivity(Activity.class).get();
756c423bd518da0852f9b18782c7b0ff743c92e7feFan Zhang        mDrawable = context.getDrawable(ICON);
766efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        mConverter = new CursorToSearchResultConverter(context);
770ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze    }
780ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze
790ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze    @Test
800ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze    public void testParseNullResults_ReturnsNull() {
816efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        final Set<SearchResult> results = mConverter.convertCursor(
826efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze                mSiteMapManager, null, BASE_RANK);
830ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze        assertThat(results).isNull();
840ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze    }
850ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze
860ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze    @Test
870ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze    public void testParseCursor_NotNull() {
886efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        final Set<SearchResult> results = mConverter.convertCursor(
89a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhang                mSiteMapManager, getDummyCursor(), BASE_RANK);
900ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze        assertThat(results).isNotNull();
910ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze    }
920ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze
930ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze    @Test
940ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze    public void testParseCursor_MatchesRank() {
956efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        final Set<SearchResult> results = mConverter.convertCursor(
96a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhang                mSiteMapManager, getDummyCursor(), BASE_RANK);
976efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        for (SearchResult result : results) {
986efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze            assertThat(result.rank).isEqualTo(BASE_RANK);
990ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze        }
1000ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze    }
1010ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze
1020ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze    @Test
1030ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze    public void testParseCursor_MatchesTitle() {
1046efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        final Set<SearchResult> results = mConverter.convertCursor(
105a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhang                mSiteMapManager, getDummyCursor(), BASE_RANK);
1066efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        for (SearchResult result : results) {
1076efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze            assertThat(TITLES).contains(result.title);
1080ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze        }
1090ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze    }
1100ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze
1110ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze    @Test
1120ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze    public void testParseCursor_MatchesSummary() {
1136efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        final Set<SearchResult> results = mConverter.convertCursor(
114a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhang                mSiteMapManager, getDummyCursor(), BASE_RANK);
1156efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        for (SearchResult result : results) {
1166efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze            assertThat(result.summary).isEqualTo(SUMMARY);
1170ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze        }
1180ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze    }
1190ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze
1200ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze    @Test
1210ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze    public void testParseCursor_MatchesIcon() {
1223746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze        final MatrixCursor cursor = new MatrixCursor(DatabaseResultLoader.SELECT_COLUMNS);
1233746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze        final byte[] payload = ResultPayloadUtils.marshall(new ResultPayload(INTENT));
1243746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze        final String BLANK = "";
1253746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze        cursor.addRow(new Object[]{
1266efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze                KEY.hashCode(),      // Doc ID
1273746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze                "Longer than 20 characters", // Title
1283746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze                SUMMARY, // Summary on
1293746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze                SUMMARY, // summary off
1303746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze                DisplaySettings.class.getName(),
1313746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze                BLANK,   // screen title
1323746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze                ICON,    // icon
1333746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze                BLANK,   // action
1343746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze                null,    // target package
1353746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze                BLANK,   // target class
1366efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze                KEY,   // Key
1373746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze                PayloadType.INTENT,       // Payload Type
1383746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze                payload     // Payload
1393746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze        });
1403746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze
1416efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        final Set<SearchResult> results = mConverter.convertCursor(
1423746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze                mSiteMapManager, cursor, BASE_RANK);
1433746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze
1446efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        for (SearchResult result : results) {
1456efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze            Drawable resultDrawable = result.icon;
1466efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze            assertThat(resultDrawable).isNotNull();
1476efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze            assertThat(resultDrawable.toString()).isEqualTo(mDrawable.toString());
1486efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        }
1490ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze    }
1500ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze
1510ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze    @Test
15212daf6830de241cc86408f904300ff0bdee02a9cFan Zhang    public void testParseCursor_NoIcon() {
1536efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        final Set<SearchResult> results = mConverter.convertCursor(
1546efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze                mSiteMapManager, getDummyCursor("noIcon" /* key */, "" /* className */), BASE_RANK);
1556efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        for (SearchResult result : results) {
1566efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze            assertThat(result.icon).isNull();
15712daf6830de241cc86408f904300ff0bdee02a9cFan Zhang        }
15812daf6830de241cc86408f904300ff0bdee02a9cFan Zhang    }
15912daf6830de241cc86408f904300ff0bdee02a9cFan Zhang
16012daf6830de241cc86408f904300ff0bdee02a9cFan Zhang    @Test
1610ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze    public void testParseCursor_MatchesPayloadType() {
1626efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        final Set<SearchResult> results = mConverter.convertCursor(
163a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhang                mSiteMapManager, getDummyCursor(), BASE_RANK);
1640ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze        ResultPayload payload;
1656efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        for (SearchResult result : results) {
1666efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze            payload = result.payload;
1670ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze            assertThat(payload.getType()).isEqualTo(PayloadType.INTENT);
1680ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze        }
1690ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze    }
1700ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze
1710ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze    @Test
172b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze    public void testLongTitle_PenalizedInRank() {
1733746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze        final MatrixCursor cursor = new MatrixCursor(DatabaseResultLoader.SELECT_COLUMNS);
1743746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze        final byte[] payload = ResultPayloadUtils.marshall(new ResultPayload(INTENT));
175b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze        final String BLANK = "";
176b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze        cursor.addRow(new Object[]{
1776efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze                KEY.hashCode(),      // Doc ID
178b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze                "Longer than 20 characters", // Title
179b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze                SUMMARY, // Summary on
180b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze                SUMMARY, // summary off
181b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze                DisplaySettings.class.getName(),
182b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze                BLANK,   // screen title
183b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze                null,    // icon
184b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze                BLANK,   // action
185b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze                null,    // target package
186b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze                BLANK,   // target class
1876efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze                KEY,   // Key
1883746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze                PayloadType.INTENT,       // Payload Type
1893746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze                payload     // Payload
190b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze        });
1916efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        final Set<SearchResult> results = mConverter.convertCursor(mSiteMapManager, cursor,
1923746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze                BASE_RANK);
1936efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        for (SearchResult result : results) {
1946efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze            assertThat(result.rank).isEqualTo(BASE_RANK + 1);
1956efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        }
196b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze    }
197b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze
198b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze    @Test
1993746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze    public void testParseCursor_MatchesResultPayload() {
2006efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        final Set<SearchResult> results = mConverter.convertCursor(
201a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhang                mSiteMapManager, getDummyCursor(), BASE_RANK);
2023746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze        ResultPayload payload;
2036efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        for (SearchResult result : results) {
2046efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze            payload = result.payload;
2053746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze            Intent intent = payload.getIntent();
2066c423bd518da0852f9b18782c7b0ff743c92e7feFan Zhang            assertThat(intent.getAction()).isEqualTo(INTENT.getAction());
2070ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze        }
2080ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze    }
2090ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze
2106c423bd518da0852f9b18782c7b0ff743c92e7feFan Zhang
2116c423bd518da0852f9b18782c7b0ff743c92e7feFan Zhang    @Test
21265fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze    public void testParseCursor_MatchesInlineSwitchPayload() {
2136c423bd518da0852f9b18782c7b0ff743c92e7feFan Zhang        MatrixCursor cursor = new MatrixCursor(DatabaseResultLoader.SELECT_COLUMNS);
21465fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze        final String BLANK = "";
21565fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze        final String uri = "test.com";
21665fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze        final int type = ResultPayload.PayloadType.INLINE_SWITCH;
21765fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze        final int source = ResultPayload.SettingsSource.SECURE;
2183746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze        final String intentKey = "key";
2193746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze        final String intentVal = "value";
2203746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze        final Intent intent = new Intent();
2213746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze        intent.putExtra(intentKey, intentVal);
2222b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze        final InlineSwitchPayload payload = new InlineSwitchPayload(uri, source, 1 /* onValue */,
223458bb887e130926f36d8926ea8462ecfbfd1e0efMatthew Fritze                intent, true /* isDeviceSupported */, 0 /* defautValue */);
22465fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze
22565fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze        cursor.addRow(new Object[]{
2266efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze                KEY.hashCode(),      // Doc ID
2276efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze                TITLES.get(0), // Title
2287fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze                SUMMARY, // Summary on
22965fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze                SUMMARY, // summary off
230d299b03f28fd23973b32931c3ae9a254a37d474dDoris Ling                SwipeToNotificationSettings.class.getName(),
23165fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze                BLANK,   // screen title
23265fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze                null,    // icon
23365fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze                BLANK,   // action
23465fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze                null,    // target package
23565fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze                BLANK,   // target class
2366efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze                KEY,   // Key
23765fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze                type,    // Payload Type
23865fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze                ResultPayloadUtils.marshall(payload) // Payload
23965fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze        });
2406efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        final Set<SearchResult> results = mConverter.convertCursor(mSiteMapManager, cursor,
2413746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze                BASE_RANK);
2426efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze
2436efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        for (SearchResult result : results) {
2446efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze            final InlineSwitchPayload newPayload = (InlineSwitchPayload) result.payload;
2456efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze            final Intent rebuiltIntent = newPayload.getIntent();
2462b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze            assertThat(newPayload.mSettingKey).isEqualTo(uri);
247694088075e57f031a36a1000d6c69e356fe52d51Matthew Fritze            assertThat(newPayload.getType()).isEqualTo(type);
2482b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze            assertThat(newPayload.mSettingSource).isEqualTo(source);
2492b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze            assertThat(newPayload.isStandard()).isTrue();
2502b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze            assertThat(newPayload.getAvailability()).isEqualTo(Availability.AVAILABLE);
2516efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze            assertThat(rebuiltIntent.getStringExtra(intentKey)).isEqualTo(intentVal);
2526efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        }
25365fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze    }
25465fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze
255b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze    // The following tests are temporary, and should be removed when we replace the Search
256b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze    // White-list solution for elevating ranking.
257b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze
258b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze    @Test
259b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze    public void testWifiKey_PrioritizedResult() {
260b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze        final String key = "main_toggle_wifi";
2613746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze        final Cursor cursor = getDummyCursor(key,  WifiSettings.class.getName());
2626efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        final Set<SearchResult> results = mConverter.convertCursor(mSiteMapManager, cursor,
2633746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze                BASE_RANK);
264b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze
2656efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        for (SearchResult result : results) {
2666efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze            assertThat(result.rank).isEqualTo(SearchResult.TOP_RANK);
2676efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        }
268b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze    }
269b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze
270b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze    @Test
271b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze    public void testBluetoothKey_PrioritizedResult() {
272b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze        final String key = "main_toggle_bluetooth";
2733746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze        final Cursor cursor = getDummyCursor(key,  WifiSettings.class.getName());
2746efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        final Set<SearchResult> results = mConverter.convertCursor(mSiteMapManager, cursor,
2753746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze                BASE_RANK);
276b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze
2776efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        for (SearchResult result : results) {
2786efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze            assertThat(result.rank).isEqualTo(SearchResult.TOP_RANK);
2796efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        }
280b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze    }
281b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze
282b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze    @Test
283b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze    public void testAirplaneKey_PrioritizedResult() {
284b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze        final String key = "toggle_airplane";
2853746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze        final Cursor cursor = getDummyCursor(key,  WifiSettings.class.getName());
2866efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        Set<SearchResult> results = mConverter.convertCursor(mSiteMapManager, cursor, BASE_RANK);
2876efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        for (SearchResult result : results) {
2886efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze            assertThat(result.rank).isEqualTo(SearchResult.TOP_RANK);
2896efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        }
290b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze    }
291b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze
292b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze    @Test
293b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze    public void testHotspotKey_PrioritizedResult() {
294b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze        final String key = "tether_settings";
2953746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze        final Cursor cursor = getDummyCursor(key,  WifiSettings.class.getName());
2966efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        final Set<SearchResult> results = mConverter.convertCursor(mSiteMapManager, cursor,
2973746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze                BASE_RANK);
298b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze
2996efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        for (SearchResult result : results) {
3006efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze            assertThat(result.rank).isEqualTo(SearchResult.TOP_RANK);
3016efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        }
302b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze    }
303b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze
304b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze    @Test
305b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze    public void testBatterySaverKey_PrioritizedResult() {
306b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze        final String key = "battery_saver";
3073746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze        final Cursor cursor = getDummyCursor(key,  WifiSettings.class.getName());
3086efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        final Set<SearchResult> results = mConverter.convertCursor(mSiteMapManager, cursor,
3093746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze                BASE_RANK);
310b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze
3116efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        for (SearchResult result : results) {
3126efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze            assertThat(result.rank).isEqualTo(SearchResult.TOP_RANK);
3136efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        }
314b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze    }
315b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze
316b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze    @Test
317b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze    public void testNFCKey_PrioritizedResult() {
318b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze        final String key = "toggle_nfc";
3193746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze        final Cursor cursor = getDummyCursor(key,  WifiSettings.class.getName());
3206efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        final Set<SearchResult> results = mConverter.convertCursor(mSiteMapManager, cursor,
3213746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze                BASE_RANK);
322b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze
3236efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        for (SearchResult result : results) {
3246efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze            assertThat(result.rank).isEqualTo(SearchResult.TOP_RANK);
3256efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        }
326b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze    }
327b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze
328b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze    @Test
329b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze    public void testDataSaverKey_PrioritizedResult() {
330b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze        final String key = "restrict_background";
3313746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze        final Cursor cursor = getDummyCursor(key,  WifiSettings.class.getName());
3326efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        final Set<SearchResult> results = mConverter.convertCursor(mSiteMapManager, cursor,
3333746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze                BASE_RANK);
334b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze
3356efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        for (SearchResult result : results) {
3366efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze            assertThat(result.rank).isEqualTo(SearchResult.TOP_RANK);
3376efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        }
338b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze    }
339b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze
340b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze    @Test
341b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze    public void testDataUsageKey_PrioritizedResult() {
342b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze        final String key = "data_usage_enable";
3433746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze        final Cursor cursor = getDummyCursor(key,  WifiSettings.class.getName());
3446efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        final Set<SearchResult> results = mConverter.convertCursor(mSiteMapManager, cursor,
3453746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze                BASE_RANK);
3466efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        for (SearchResult result : results) {
3476efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze            assertThat(result.rank).isEqualTo(SearchResult.TOP_RANK);
3486efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        }
349b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze    }
350b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze
351b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze    @Test
352b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze    public void testRoamingKey_PrioritizedResult() {
353b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze        final String key = "button_roaming_key";
3543746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze        final Cursor cursor = getDummyCursor(key,  WifiSettings.class.getName());
3556efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        final Set<SearchResult> results = mConverter.convertCursor(mSiteMapManager, cursor,
3563746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze                BASE_RANK);
357b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze
3586efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        for (SearchResult result : results) {
3596efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze            assertThat(result.rank).isEqualTo(SearchResult.TOP_RANK);
3606efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        }
361b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze    }
362b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze
363b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze    // End of temporary tests
364b759516cbf26c9bb5f71c7f93e764fac73f48701Matthew Fritze
3650ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze    private MatrixCursor getDummyCursor() {
3666efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        String[] keys = new String[] {KEY + "1", KEY + "2", KEY + "3"};
3676efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        return getDummyCursor(keys, "" /* className */);
3683746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze    }
3693746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze
3703746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze    private MatrixCursor getDummyCursor(String key, String className) {
3716efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        String[] keys = new String[] {key};
3726efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        return getDummyCursor(keys, className);
37312daf6830de241cc86408f904300ff0bdee02a9cFan Zhang    }
37412daf6830de241cc86408f904300ff0bdee02a9cFan Zhang
3756efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze    private MatrixCursor getDummyCursor(String[] keys, String className) {
3766c423bd518da0852f9b18782c7b0ff743c92e7feFan Zhang        MatrixCursor cursor = new MatrixCursor(DatabaseResultLoader.SELECT_COLUMNS);
3770ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze        final String BLANK = "";
3783746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze        final byte[] payload = ResultPayloadUtils.marshall(new ResultPayload(INTENT));
3790ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze
3806efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        for (int i = 0; i < keys.length; i++) {
3813746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze            ArrayList<Object> item = new ArrayList<>(DatabaseResultLoader.SELECT_COLUMNS.length);
3826efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze            item.add(keys[i].hashCode()); // Doc ID
3836efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze            item.add(TITLES.get(i)); // Title
3847fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze            item.add(SUMMARY); // Summary on
3850ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze            item.add(BLANK); // summary off
3863746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze            item.add(className); // classname
3870ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze            item.add(BLANK); // screen title
3886efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze            item.add(null); // Icon
3896c423bd518da0852f9b18782c7b0ff743c92e7feFan Zhang            item.add(INTENT.getAction()); // Intent action
3903746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze            item.add(TARGET_PACKAGE); // target package
3913746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze            item.add(TARGET_CLASS); // target class
3926efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze            item.add(keys[i]); // Key
39365fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze            item.add(Integer.toString(0));     // Payload Type
3943746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze            item.add(payload); // Payload
3950ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze
3960ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze            cursor.addRow(item);
3970ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze        }
3980ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze        return cursor;
3990ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze    }
4000ed37c351333429f58e1561fcb8e6af9c2041507Matthew Fritze}
401