diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/src/com/android/providers/contacts/ContactDirectoryManagerTest.java | 68 |
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( |