summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorDaisuke Miyakawa <dmiyakawa@google.com>2011-06-01 21:48:29 -0700
committerDaisuke Miyakawa <dmiyakawa@google.com>2011-06-02 20:59:13 -0700
commit37f0bdbb0a99b12abcc319f49a2caa5ab648add0 (patch)
treedc1cd97c05c18c8b7158814995f241f35e5229b4 /tests
parent17a22fae02931ae536f35293ca13a8de53439f72 (diff)
downloadpackages_providers_ContactsProvider-37f0bdbb0a99b12abcc319f49a2caa5ab648add0.zip
packages_providers_ContactsProvider-37f0bdbb0a99b12abcc319f49a2caa5ab648add0.tar.gz
packages_providers_ContactsProvider-37f0bdbb0a99b12abcc319f49a2caa5ab648add0.tar.bz2
Remove stale rows in directory table.
When upgrading from mr0 to mr2, we encounter some crashes on email compose. It is because BaseEmailAddressAdapter uses directory API, and the API has wrong resouce id in it. We need to remove rows which don't correspond to any directory provider. Bug: 4479240 Change-Id: Ife87a4a2ccad5d2a784eb5bd6ca56061a22c1787
Diffstat (limited to 'tests')
-rw-r--r--tests/src/com/android/providers/contacts/ContactDirectoryManagerTest.java68
1 files changed, 68 insertions, 0 deletions
diff --git a/tests/src/com/android/providers/contacts/ContactDirectoryManagerTest.java b/tests/src/com/android/providers/contacts/ContactDirectoryManagerTest.java
index 9ebc3d9..a0941a3 100644
--- a/tests/src/com/android/providers/contacts/ContactDirectoryManagerTest.java
+++ b/tests/src/com/android/providers/contacts/ContactDirectoryManagerTest.java
@@ -78,6 +78,8 @@ public class ContactDirectoryManagerTest extends BaseContactsProvider2Test {
String sortOrder) {
if (uri.toString().equals("content://" + mAuthority + "/directories")) {
+ // Should tolerate multiple queries.
+ mResponse.moveToPosition(-1);
return mResponse;
} else if (uri.toString().startsWith("content://" + mAuthority + "/contacts")) {
MatrixCursor cursor = new MatrixCursor(
@@ -309,6 +311,72 @@ public class ContactDirectoryManagerTest extends BaseContactsProvider2Test {
cursor.close();
}
+ /**
+ * Tests if the manager works correctly when the package name for a directory is changed
+ * (on system update).
+ */
+ public void testPackageRenamed() throws Exception {
+ mPackageManager.setInstalledPackages(
+ Lists.newArrayList(
+ createProviderPackage("test.package1", "authority1"),
+ createProviderPackage("test.package2", "authority2")));
+
+ MockContactDirectoryProvider provider1 = (MockContactDirectoryProvider) addProvider(
+ MockContactDirectoryProvider.class, "authority1");
+
+ MatrixCursor response1 = provider1.createResponseCursor();
+ addDirectoryRow(response1, "account-name1", "account-type1", "display-name1", 1,
+ Directory.EXPORT_SUPPORT_NONE, Directory.SHORTCUT_SUPPORT_NONE,
+ Directory.PHOTO_SUPPORT_NONE);
+
+ MockContactDirectoryProvider provider2 = (MockContactDirectoryProvider) addProvider(
+ MockContactDirectoryProvider.class, "authority2");
+
+ MatrixCursor response2 = provider2.createResponseCursor();
+ addDirectoryRow(response2, "account-name2", "account-type2", "display-name2", 2,
+ Directory.EXPORT_SUPPORT_SAME_ACCOUNT_ONLY, Directory.SHORTCUT_SUPPORT_FULL,
+ Directory.PHOTO_SUPPORT_FULL);
+
+ mDirectoryManager.scanAllPackages();
+
+ // At this point the manager has discovered two custom directories.
+ Cursor cursor = mResolver.query(Directory.CONTENT_URI, null, null, null, null);
+ assertEquals(4, cursor.getCount());
+ cursor.close();
+
+ // Pretend to rename the package name of a package on system update.
+ PackageInfo info = mPackageManager.getInstalledPackages(0).get(1);
+ info.packageName = "test.package3";
+ info.providers[0].packageName = "test.package3";
+ MatrixCursor response3 = provider2.createResponseCursor();
+ // Change resource id.
+ addDirectoryRow(response3, "account-name2", "account-type2", "display-name2", 3,
+ Directory.EXPORT_SUPPORT_SAME_ACCOUNT_ONLY, Directory.SHORTCUT_SUPPORT_FULL,
+ Directory.PHOTO_SUPPORT_FULL);
+
+ // When this happens on reboot, scanAllPackages() is called instead of onPackageChanged()
+ // (as part of ContactsProvider2 initialization).
+ // Accounts won't be affected so false should be passed here.
+ mDirectoryManager.scanAllPackages(false);
+
+ cursor = mResolver.query(Directory.CONTENT_URI, null, null, null, null);
+ // We should have columns for default, local_invisible, test.package1, and test.package3.
+ // The row for test.package2 should not remain.
+ assertEquals(4, cursor.getCount());
+
+ cursor.moveToPosition(2);
+ assertDirectoryRow(cursor, "test.package1", "authority1", "account-name1", "account-type1",
+ "display-name1", 1, Directory.EXPORT_SUPPORT_NONE, Directory.SHORTCUT_SUPPORT_NONE,
+ Directory.PHOTO_SUPPORT_NONE);
+
+ cursor.moveToNext();
+ assertDirectoryRow(cursor, "test.package3", "authority2", "account-name2", "account-type2",
+ "display-name2", 3, Directory.EXPORT_SUPPORT_SAME_ACCOUNT_ONLY,
+ Directory.SHORTCUT_SUPPORT_FULL, Directory.PHOTO_SUPPORT_FULL);
+
+ cursor.close();
+ }
+
public void testAccountRemoval() throws Exception {
mPackageManager.setInstalledPackages(
Lists.newArrayList(