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