summaryrefslogtreecommitdiffstats
path: root/core/tests/coretests
diff options
context:
space:
mode:
authorFicus Kirkpatrick <ficus@android.com>2010-11-03 17:38:49 -0700
committerFicus Kirkpatrick <ficus@android.com>2010-11-08 16:11:54 -0800
commit553a53ef9ff789dff8b5a74dfea4d6f37feeb263 (patch)
treebc37fffcc822a2b29052335d1f493147bcca663d /core/tests/coretests
parent9f1425431f00e9fde4c1aa90d713bd9b011e7867 (diff)
downloadframeworks_base-553a53ef9ff789dff8b5a74dfea4d6f37feeb263.zip
frameworks_base-553a53ef9ff789dff8b5a74dfea4d6f37feeb263.tar.gz
frameworks_base-553a53ef9ff789dff8b5a74dfea4d6f37feeb263.tar.bz2
Make saveRecentQuery() async.
Bug: 3163612 Change-Id: Idd3c1925e0f1dc3272dd1303d8f2907c5c5fca8b
Diffstat (limited to 'core/tests/coretests')
-rw-r--r--core/tests/coretests/src/android/provider/SearchRecentSuggestionsProviderTest.java (renamed from core/tests/coretests/src/android/content/SearchRecentSuggestionsProviderTest.java)136
-rw-r--r--core/tests/coretests/src/android/provider/TestProvider.java33
2 files changed, 95 insertions, 74 deletions
diff --git a/core/tests/coretests/src/android/content/SearchRecentSuggestionsProviderTest.java b/core/tests/coretests/src/android/provider/SearchRecentSuggestionsProviderTest.java
index a4c33f5..1512eab 100644
--- a/core/tests/coretests/src/android/content/SearchRecentSuggestionsProviderTest.java
+++ b/core/tests/coretests/src/android/provider/SearchRecentSuggestionsProviderTest.java
@@ -14,72 +14,58 @@
* limitations under the License.
*/
-package android.content;
+package android.provider;
import android.app.SearchManager;
+import android.content.ContentResolver;
import android.database.Cursor;
import android.net.Uri;
-import android.provider.SearchRecentSuggestions;
import android.test.ProviderTestCase2;
-import android.test.suitebuilder.annotation.Suppress;
-
-/**
- * Very simple provider that I can instantiate right here.
- */
-class TestProvider extends SearchRecentSuggestionsProvider {
- final static String AUTHORITY = "android.content.TestProvider";
- final static int MODE = DATABASE_MODE_QUERIES + DATABASE_MODE_2LINES;
-
- public TestProvider() {
- super();
- setupSuggestions(AUTHORITY, MODE);
- }
-}
+import android.test.suitebuilder.annotation.MediumTest;
/**
* ProviderTestCase that performs unit tests of SearchRecentSuggestionsProvider.
- *
+ *
* You can run this test in isolation via the commands:
- *
+ *
* $ (cd tests/FrameworkTests/ && mm) && adb sync
* $ adb shell am instrument -w \
- * -e class android.content.SearchRecentSuggestionsProviderTest
+ * -e class android.provider.SearchRecentSuggestionsProviderTest
* com.android.frameworktest.tests/android.test.InstrumentationTestRunner
*/
-// Suppress these until bug http://b/issue?id=1416586 is fixed.
-@Suppress
+@MediumTest
public class SearchRecentSuggestionsProviderTest extends ProviderTestCase2<TestProvider> {
// Elements prepared by setUp()
SearchRecentSuggestions mSearchHelper;
-
+
public SearchRecentSuggestionsProviderTest() {
super(TestProvider.class, TestProvider.AUTHORITY);
}
-
+
/**
- * During setup, grab a helper for DB access
+ * During setup, grab a helper for DB access
*/
@Override
public void setUp() throws Exception {
super.setUp();
-
+
// Use the recent suggestions helper. As long as we pass in our isolated context,
// it should correctly access the provider under test.
- mSearchHelper = new SearchRecentSuggestions(getMockContext(),
+ mSearchHelper = new SearchRecentSuggestions(getMockContext(),
TestProvider.AUTHORITY, TestProvider.MODE);
// test for empty database at setup time
checkOpenCursorCount(0);
}
-
+
/**
* Simple test to see if we can instantiate the whole mess.
*/
public void testSetup() {
assertTrue(true);
}
-
+
/**
* Simple test to see if we can write and read back a single query
*/
@@ -87,22 +73,23 @@ public class SearchRecentSuggestionsProviderTest extends ProviderTestCase2<TestP
final String TEST_LINE1 = "test line 1";
final String TEST_LINE2 = "test line 2";
mSearchHelper.saveRecentQuery(TEST_LINE1, TEST_LINE2);
-
+ mSearchHelper.waitForSave();
+
// make sure that there are is exactly one entry returned by a non-filtering cursor
checkOpenCursorCount(1);
-
+
// test non-filtering cursor for correct entry
checkResultCounts(null, 1, 1, TEST_LINE1, TEST_LINE2);
-
+
// test filtering cursor for correct entry
checkResultCounts(TEST_LINE1, 1, 1, TEST_LINE1, TEST_LINE2);
checkResultCounts(TEST_LINE2, 1, 1, TEST_LINE1, TEST_LINE2);
-
+
// test that a different filter returns zero results
checkResultCounts("bad filter", 0, 0, null, null);
}
-
- /**
+
+ /**
* Simple test to see if we can write and read back a diverse set of queries
*/
public void testMixedQueries() {
@@ -111,19 +98,19 @@ public class SearchRecentSuggestionsProviderTest extends ProviderTestCase2<TestP
final String TEST_GROUP_2 = "test ";
final String TEST_LINE2 = "line2 ";
final int GROUP_COUNT = 10;
-
+
writeEntries(GROUP_COUNT, TEST_GROUP_1, TEST_LINE2);
writeEntries(GROUP_COUNT, TEST_GROUP_2, TEST_LINE2);
-
+
// check counts
checkOpenCursorCount(2 * GROUP_COUNT);
-
+
// check that each query returns the right result counts
checkResultCounts(TEST_GROUP_1, GROUP_COUNT, GROUP_COUNT, null, null);
checkResultCounts(TEST_GROUP_2, GROUP_COUNT, GROUP_COUNT, null, null);
checkResultCounts(TEST_LINE2, 2 * GROUP_COUNT, 2 * GROUP_COUNT, null, null);
}
-
+
/**
* Test that the reordering code works properly. The most recently injected queries
* should replace existing queries and be sorted to the top of the list.
@@ -134,41 +121,41 @@ public class SearchRecentSuggestionsProviderTest extends ProviderTestCase2<TestP
final String GROUP_1_QUERY = "group1 ";
final String GROUP_1_LINE2 = "line2 ";
writeEntries(GROUP_1_COUNT, GROUP_1_QUERY, GROUP_1_LINE2);
-
+
// check totals
checkOpenCursorCount(GROUP_1_COUNT);
// guarantee that group 1 has older timestamps
writeDelay();
-
+
// next we'll add 10 entries named "group2 x"
final int GROUP_2_COUNT = 10;
final String GROUP_2_QUERY = "group2 ";
final String GROUP_2_LINE2 = "line2 ";
writeEntries(GROUP_2_COUNT, GROUP_2_QUERY, GROUP_2_LINE2);
-
+
// check totals
checkOpenCursorCount(GROUP_1_COUNT + GROUP_2_COUNT);
// guarantee that group 2 has older timestamps
writeDelay();
-
+
// now refresh 5 of the 10 from group 1
// change line2 so they can be more easily tracked
final int GROUP_3_COUNT = 5;
final String GROUP_3_QUERY = GROUP_1_QUERY;
final String GROUP_3_LINE2 = "refreshed ";
writeEntries(GROUP_3_COUNT, GROUP_3_QUERY, GROUP_3_LINE2);
-
+
// confirm that the total didn't change (those were replacements, not adds)
checkOpenCursorCount(GROUP_1_COUNT + GROUP_2_COUNT);
-
+
// confirm that the are now 5 in group 1, 10 in group 2, and 5 in group 3
int newGroup1Count = GROUP_1_COUNT - GROUP_3_COUNT;
checkResultCounts(GROUP_1_QUERY, newGroup1Count, newGroup1Count, null, GROUP_1_LINE2);
checkResultCounts(GROUP_2_QUERY, GROUP_2_COUNT, GROUP_2_COUNT, null, null);
checkResultCounts(GROUP_3_QUERY, GROUP_3_COUNT, GROUP_3_COUNT, null, GROUP_3_LINE2);
-
+
// finally, spot check that the right groups are in the right places
// the ordering should be group 3 (newest), group 2, group 1 (oldest)
Cursor c = getQueryCursor(null);
@@ -199,14 +186,14 @@ public class SearchRecentSuggestionsProviderTest extends ProviderTestCase2<TestP
c.move(newGroup1Count - 1);
assertTrue("group 1 not in expected position after reordering",
checkRow(c, colQuery, colDisplay1, colDisplay2, GROUP_1_QUERY, GROUP_1_LINE2));
-
+
c.close();
}
-
+
/**
* Test that the pruning code works properly, The database should not go beyond 250 entries,
- * and the oldest entries should always be discarded first.
- *
+ * and the oldest entries should always be discarded first.
+ *
* TODO: This is a slow test, do we have annotation for that?
*/
public void testPruning() {
@@ -215,29 +202,29 @@ public class SearchRecentSuggestionsProviderTest extends ProviderTestCase2<TestP
final String GROUP_1_QUERY = "group1 ";
final String GROUP_1_LINE2 = "line2 ";
writeEntries(GROUP_1_COUNT, GROUP_1_QUERY, GROUP_1_LINE2);
-
+
// check totals
checkOpenCursorCount(GROUP_1_COUNT);
// guarantee that group 1 has older timestamps (and will be pruned first)
writeDelay();
-
+
// next we'll add 200 entries named "group2 x"
final int GROUP_2_COUNT = 200;
final String GROUP_2_QUERY = "group2 ";
final String GROUP_2_LINE2 = "line2 ";
writeEntries(GROUP_2_COUNT, GROUP_2_QUERY, GROUP_2_LINE2);
-
+
// check totals
checkOpenCursorCount(GROUP_1_COUNT + GROUP_2_COUNT);
-
+
// Finally we'll add 10 more entries named "group3 x"
// These should push out 10 entries from group 1
final int GROUP_3_COUNT = 10;
final String GROUP_3_QUERY = "group3 ";
final String GROUP_3_LINE2 = "line2 ";
writeEntries(GROUP_3_COUNT, GROUP_3_QUERY, GROUP_3_LINE2);
-
+
// total should still be 250
checkOpenCursorCount(GROUP_1_COUNT + GROUP_2_COUNT);
@@ -247,7 +234,7 @@ public class SearchRecentSuggestionsProviderTest extends ProviderTestCase2<TestP
checkResultCounts(GROUP_2_QUERY, GROUP_2_COUNT, GROUP_2_COUNT, null, null);
checkResultCounts(GROUP_3_QUERY, GROUP_3_COUNT, GROUP_3_COUNT, null, null);
}
-
+
/**
* Test that the clear history code works properly.
*/
@@ -257,23 +244,23 @@ public class SearchRecentSuggestionsProviderTest extends ProviderTestCase2<TestP
final String GROUP_1_QUERY = "group1 ";
final String GROUP_1_LINE2 = "line2 ";
writeEntries(GROUP_1_COUNT, GROUP_1_QUERY, GROUP_1_LINE2);
-
+
// next we'll add 10 entries named "group2 x"
final int GROUP_2_COUNT = 10;
final String GROUP_2_QUERY = "group2 ";
final String GROUP_2_LINE2 = "line2 ";
writeEntries(GROUP_2_COUNT, GROUP_2_QUERY, GROUP_2_LINE2);
-
+
// check totals
checkOpenCursorCount(GROUP_1_COUNT + GROUP_2_COUNT);
// delete all
mSearchHelper.clearHistory();
-
+
// check totals
checkOpenCursorCount(0);
}
-
+
/**
* Write a sequence of queries into the database, with incrementing counters in the strings.
*/
@@ -282,9 +269,10 @@ public class SearchRecentSuggestionsProviderTest extends ProviderTestCase2<TestP
final String line1 = line1Base + i;
final String line2 = line2Base + i;
mSearchHelper.saveRecentQuery(line1, line2);
+ mSearchHelper.waitForSave();
}
}
-
+
/**
* A very slight delay to ensure that successive groups of queries in the DB cannot
* have the same timestamp.
@@ -296,11 +284,11 @@ public class SearchRecentSuggestionsProviderTest extends ProviderTestCase2<TestP
fail("Interrupted sleep.");
}
}
-
+
/**
* Access an "open" (no selection) suggestions cursor and confirm that it has the specified
* number of entries.
- *
+ *
* @param expectCount The expected number of entries returned by the cursor.
*/
private void checkOpenCursorCount(int expectCount) {
@@ -308,10 +296,10 @@ public class SearchRecentSuggestionsProviderTest extends ProviderTestCase2<TestP
assertEquals(expectCount, c.getCount());
c.close();
}
-
+
/**
* Set up a filter cursor and then scan it for specific results.
- *
+ *
* @param queryString The query string to apply.
* @param minRows The minimum number of matching rows that must be found.
* @param maxRows The maximum number of matching rows that must be found.
@@ -320,12 +308,12 @@ public class SearchRecentSuggestionsProviderTest extends ProviderTestCase2<TestP
*/
private void checkResultCounts(String queryString, int minRows, int maxRows,
String matchDisplay1, String matchDisplay2) {
-
+
// get the cursor and apply sanity checks to result
Cursor c = getQueryCursor(queryString);
assertNotNull(c);
assertTrue("Insufficient rows in filtered cursor", c.getCount() >= minRows);
-
+
// look for minimum set of columns (note, display2 is optional)
int colQuery = c.getColumnIndexOrThrow(SearchManager.SUGGEST_COLUMN_QUERY);
int colDisplay1 = c.getColumnIndexOrThrow(SearchManager.SUGGEST_COLUMN_TEXT_1);
@@ -337,20 +325,20 @@ public class SearchRecentSuggestionsProviderTest extends ProviderTestCase2<TestP
while (!c.isAfterLast()) {
if (checkRow(c, colQuery, colDisplay1, colDisplay2, matchDisplay1, matchDisplay2)) {
foundRows++;
- }
+ }
c.moveToNext();
}
// now check the results
assertTrue(minRows <= foundRows);
assertTrue(foundRows <= maxRows);
-
+
c.close();
}
-
+
/**
* Check a single row for equality with target strings.
- *
+ *
* @param c The cursor, already moved to the row
* @param colQuery The column # containing the query. The query must match display1.
* @param colDisp1 The column # containing display line 1.
@@ -365,7 +353,7 @@ public class SearchRecentSuggestionsProviderTest extends ProviderTestCase2<TestP
String query = c.getString(colQuery);
String display1 = c.getString(colDisp1);
String display2 = (colDisp2 >= 0) ? c.getString(colDisp2) : null;
-
+
assertEquals(query, display1);
boolean result = true;
if (matchDisplay1 != null) {
@@ -374,13 +362,13 @@ public class SearchRecentSuggestionsProviderTest extends ProviderTestCase2<TestP
if (matchDisplay2 != null) {
result = result && (display2 != null) && display2.startsWith(matchDisplay2);
}
-
+
return result;
}
/**
* Generate a query cursor in a manner like the search dialog would.
- *
+ *
* @param queryString The search string, or, null for "all"
* @return Returns a cursor, or null if there was some problem. Be sure to close the cursor
* when done with it.
@@ -388,7 +376,7 @@ public class SearchRecentSuggestionsProviderTest extends ProviderTestCase2<TestP
private Cursor getQueryCursor(String queryString) {
ContentResolver cr = getMockContext().getContentResolver();
- String uriStr = "content://" + TestProvider.AUTHORITY +
+ String uriStr = "content://" + TestProvider.AUTHORITY +
'/' + SearchManager.SUGGEST_URI_PATH_QUERY;
Uri contentUri = Uri.parse(uriStr);
diff --git a/core/tests/coretests/src/android/provider/TestProvider.java b/core/tests/coretests/src/android/provider/TestProvider.java
new file mode 100644
index 0000000..63c43b3
--- /dev/null
+++ b/core/tests/coretests/src/android/provider/TestProvider.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.provider;
+
+import android.content.SearchRecentSuggestionsProvider;
+
+/**
+ * Very simple provider that I can instantiate right here.
+ */
+public class TestProvider extends SearchRecentSuggestionsProvider {
+ final static String AUTHORITY = "android.provider.TestProvider";
+ final static int MODE = DATABASE_MODE_QUERIES + DATABASE_MODE_2LINES;
+
+ public TestProvider() {
+ super();
+ setupSuggestions(AUTHORITY, MODE);
+ }
+}
+