132bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov/* 232bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * Copyright (C) 2010 The Android Open Source Project 332bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * 432bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * Licensed under the Apache License, Version 2.0 (the "License"); 532bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * you may not use this file except in compliance with the License. 632bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * You may obtain a copy of the License at 732bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * 832bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * http://www.apache.org/licenses/LICENSE-2.0 932bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * 1032bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * Unless required by applicable law or agreed to in writing, software 1132bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * distributed under the License is distributed on an "AS IS" BASIS, 1232bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1332bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * See the License for the specific language governing permissions and 1432bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * limitations under the License. 1532bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov */ 1632bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov 1732bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikovpackage com.android.contacts.activities; 1832bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov 197039633999b3a46a87c851fa06d9168897ccc54bYorke Leeimport android.content.ContentUris; 20e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.content.ContentValues; 21e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.net.Uri; 22e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.provider.ContactsContract; 23e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.provider.ContactsContract.Contacts; 24e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.provider.ContactsContract.Directory; 25e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.provider.ContactsContract.Groups; 26e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.provider.ContactsContract.ProviderStatus; 27e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.test.ActivityInstrumentationTestCase2; 28e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.test.suitebuilder.annotation.SmallTest; 29e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Cheng 300a49afa2ad697307cc04ef4cb86570574fa720f2Gary Maiimport com.android.contacts.ContactPhotoManager; 311173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikovimport com.android.contacts.ContactsApplication; 3269c182afb0e6d82a341a28b4317aa703af768906Gary Maiimport com.android.contacts.model.AccountTypeManager; 3369c182afb0e6d82a341a28b4317aa703af768906Gary Maiimport com.android.contacts.model.account.AccountType; 3469c182afb0e6d82a341a28b4317aa703af768906Gary Maiimport com.android.contacts.model.account.AccountWithDataSet; 3569c182afb0e6d82a341a28b4317aa703af768906Gary Maiimport com.android.contacts.model.account.BaseAccountType; 360a49afa2ad697307cc04ef4cb86570574fa720f2Gary Maiimport com.android.contacts.test.mocks.ContactsMockContext; 370a49afa2ad697307cc04ef4cb86570574fa720f2Gary Maiimport com.android.contacts.test.mocks.MockAccountTypeManager; 380a49afa2ad697307cc04ef4cb86570574fa720f2Gary Maiimport com.android.contacts.test.mocks.MockContactPhotoManager; 390a49afa2ad697307cc04ef4cb86570574fa720f2Gary Maiimport com.android.contacts.test.mocks.MockContentProvider; 400a49afa2ad697307cc04ef4cb86570574fa720f2Gary Maiimport com.android.contacts.test.mocks.MockContentProvider.Query; 410a49afa2ad697307cc04ef4cb86570574fa720f2Gary Maiimport com.android.contacts.test.mocks.MockSharedPreferences; 420a49afa2ad697307cc04ef4cb86570574fa720f2Gary Maiimport com.android.contacts.testing.InjectedServices; 4332bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov 4432bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov/** 45e7d15fb4bacfe85e175aa8012f9af8d41a2cfa15Makoto Onuki * This test is so outdated that it's disabled temporarily. TODO Update the test and re-enable it. 46e7d15fb4bacfe85e175aa8012f9af8d41a2cfa15Makoto Onuki * 479856fcee477d04f51bdbcbfdf632876c6b8a1173Katherine Kuan * Tests for {@link PeopleActivity}. 4832bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * 4932bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * Running all tests: 5032bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * 5132bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * runtest contacts 5232bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * or 5332bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * adb shell am instrument \ 5432bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * -w com.android.contacts.tests/android.test.InstrumentationTestRunner 55e7d15fb4bacfe85e175aa8012f9af8d41a2cfa15Makoto Onuki * 5632bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov */ 570454960b4b9e43b75bbfd0fb296c25d59111a765Daisuke Miyakawa@SmallTest 589856fcee477d04f51bdbcbfdf632876c6b8a1173Katherine Kuanpublic class PeopleActivityTest 599856fcee477d04f51bdbcbfdf632876c6b8a1173Katherine Kuan extends ActivityInstrumentationTestCase2<PeopleActivity> 6032bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov{ 61ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov private static final String TEST_ACCOUNT = "testAccount"; 62ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov private static final String TEST_ACCOUNT_TYPE = "testAccountType"; 63ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov 6432bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov private ContactsMockContext mContext; 6532bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov private MockContentProvider mContactsProvider; 661173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov private MockContentProvider mSettingsProvider; 6732bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov 689856fcee477d04f51bdbcbfdf632876c6b8a1173Katherine Kuan public PeopleActivityTest() { 699856fcee477d04f51bdbcbfdf632876c6b8a1173Katherine Kuan super(PeopleActivity.class); 7032bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov } 7132bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov 7232bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov @Override 7332bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov public void setUp() { 74dabac3f99c85bd6af90681a774796748c2775bebChiao Cheng mContext = new ContactsMockContext(getInstrumentation().getTargetContext()); 7532bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov mContactsProvider = mContext.getContactsProvider(); 767039633999b3a46a87c851fa06d9168897ccc54bYorke Lee // The ContactsApplication performs this getType query to warm up the provider - see 777039633999b3a46a87c851fa06d9168897ccc54bYorke Lee // ContactsApplication#DelayedInitialization.doInBackground 787039633999b3a46a87c851fa06d9168897ccc54bYorke Lee mContactsProvider.expectTypeQuery(ContentUris.withAppendedId(Contacts.CONTENT_URI, 1), 797039633999b3a46a87c851fa06d9168897ccc54bYorke Lee Contacts.CONTENT_ITEM_TYPE); 801173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov mSettingsProvider = mContext.getSettingsProvider(); 811173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov InjectedServices services = new InjectedServices(); 821173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov services.setContentResolver(mContext.getContentResolver()); 83072d91171c749f43b64900118e6f4dcbdd7b1097Dmitri Plotnikov services.setSharedPreferences(new MockSharedPreferences()); 84f26fd6d6c6de1f75b33557c6297ee6b5a6e1c112Andrew Lee ContactPhotoManager.injectContactPhotoManagerForTesting(new MockContactPhotoManager()); 8596e87fd6e808e9d853263ffeb5104f3253a18639Daniel Lehmann AccountType accountType = new BaseAccountType() { 8696e87fd6e808e9d853263ffeb5104f3253a18639Daniel Lehmann @Override 8796e87fd6e808e9d853263ffeb5104f3253a18639Daniel Lehmann public boolean areContactsWritable() { 8896e87fd6e808e9d853263ffeb5104f3253a18639Daniel Lehmann return false; 8996e87fd6e808e9d853263ffeb5104f3253a18639Daniel Lehmann } 9096e87fd6e808e9d853263ffeb5104f3253a18639Daniel Lehmann }; 91ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov accountType.accountType = TEST_ACCOUNT_TYPE; 9232bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov 932b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro AccountWithDataSet account = new AccountWithDataSet(TEST_ACCOUNT, TEST_ACCOUNT_TYPE, null); 941173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov ContactsApplication.injectServices(services); 95dabac3f99c85bd6af90681a774796748c2775bebChiao Cheng 96dabac3f99c85bd6af90681a774796748c2775bebChiao Cheng final MockAccountTypeManager mockManager = new MockAccountTypeManager( 97dabac3f99c85bd6af90681a774796748c2775bebChiao Cheng new AccountType[] { accountType }, new AccountWithDataSet[] { account }); 98dabac3f99c85bd6af90681a774796748c2775bebChiao Cheng AccountTypeManager.setInstanceForTest(mockManager); 991173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov } 10032bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov 10151ada3680de8700bc273a7e652886823f4c1981fHugo Hudson @Override 10251ada3680de8700bc273a7e652886823f4c1981fHugo Hudson protected void tearDown() throws Exception { 10351ada3680de8700bc273a7e652886823f4c1981fHugo Hudson ContactsApplication.injectServices(null); 10451ada3680de8700bc273a7e652886823f4c1981fHugo Hudson super.tearDown(); 10551ada3680de8700bc273a7e652886823f4c1981fHugo Hudson } 10651ada3680de8700bc273a7e652886823f4c1981fHugo Hudson 10732bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov private void expectProviderStatusQueryAndReturnNormal() { 10832bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov mContactsProvider 10932bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov .expectQuery(ProviderStatus.CONTENT_URI) 110c3d202ccbaf93ddd8291672027e59f549c32eee3Brian Attwell .withProjection(ProviderStatus.STATUS) 111c3d202ccbaf93ddd8291672027e59f549c32eee3Brian Attwell .returnRow(ProviderStatus.STATUS_NORMAL) 1121173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov .anyNumberOfTimes(); 11332bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov } 11432bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov 11532bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov private void expectGroupsQueryAndReturnEmpty() { 11632bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov mContactsProvider 11732bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov .expectQuery(Groups.CONTENT_URI) 11832bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov .withAnyProjection() 11932bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov .withAnySelection() 1201173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov .returnEmptyCursor() 1211173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov .anyNumberOfTimes(); 1221173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov } 1231173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov 124ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov private void expectContactListQuery(int count) { 1251173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov Uri uri = Contacts.CONTENT_URI.buildUpon() 1269d2b6d5bcead8c71e96dcd27bc393e9ee0ec656fYorke Lee .appendQueryParameter(Contacts.EXTRA_ADDRESS_BOOK_INDEX, "true") 1271173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov .appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY, 1281173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov String.valueOf(Directory.DEFAULT)) 1291173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov .build(); 1301173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov 131ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov Query query = mContactsProvider 132ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov .expectQuery(uri) 133ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov .withAnyProjection() 134ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov .withSortOrder(Contacts.SORT_KEY_PRIMARY); 135ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov for (int i = 1; i <= count; i++) { 136ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov ContentValues values = new ContentValues(); 137ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov values.put(Contacts._ID, i); 138ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov values.put(Contacts.DISPLAY_NAME, "Contact " + i); 139ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov values.put(Contacts.SORT_KEY_PRIMARY, "contact " + i); 140ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov values.put(Contacts.LOOKUP_KEY, "lu" + i); 141ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov query.returnRow(values); 142ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov } 143ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov } 144ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov 145ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov private void expectContactLookupQuery( 146ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov String lookupKey, long id, String returnLookupKey, long returnId) { 147ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov Uri uri = Contacts.getLookupUri(id, lookupKey); 148ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov mContactsProvider.expectTypeQuery(uri, Contacts.CONTENT_ITEM_TYPE); 149ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov mContactsProvider 150ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov .expectQuery(uri) 151ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov .withProjection(Contacts._ID, Contacts.LOOKUP_KEY) 152ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov .returnRow(returnId, returnLookupKey); 153ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov } 154ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov 155ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov private void expectContactEntityQuery(String lookupKey, int contactId) { 156ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov Uri uri = Uri.withAppendedPath( 157ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov Contacts.getLookupUri(contactId, lookupKey), Contacts.Entity.CONTENT_DIRECTORY); 158ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov ContentValues row1 = new ContentValues(); 159ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov row1.put(Contacts.Entity.DATA_ID, 1); 160ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov row1.put(Contacts.Entity.LOOKUP_KEY, lookupKey); 161ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov row1.put(Contacts.Entity.CONTACT_ID, contactId); 162ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov row1.put(Contacts.Entity.DISPLAY_NAME, "Contact " + contactId); 163ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov row1.put(Contacts.Entity.ACCOUNT_NAME, TEST_ACCOUNT); 164ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov row1.put(Contacts.Entity.ACCOUNT_TYPE, TEST_ACCOUNT_TYPE); 1651173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov mContactsProvider 1661173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov .expectQuery(uri) 1671173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov .withAnyProjection() 1681173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov .withAnySortOrder() 169ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov .returnRow(row1) 170ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov .anyNumberOfTimes(); 17132bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov } 17232bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov} 173