1 /* 2 * Copyright (C) 2010 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.contacts.activities; 18 19 import android.content.ContentUris; 20 import android.content.ContentValues; 21 import android.content.Intent; 22 import android.content.Loader; 23 import android.net.Uri; 24 import android.provider.ContactsContract; 25 import android.provider.ContactsContract.Contacts; 26 import android.provider.ContactsContract.Directory; 27 import android.provider.ContactsContract.Groups; 28 import android.provider.ContactsContract.ProviderStatus; 29 import android.provider.Settings; 30 import android.test.ActivityInstrumentationTestCase2; 31 import android.test.suitebuilder.annotation.SmallTest; 32 import android.widget.TextView; 33 34 import com.android.contacts.ContactsApplication; 35 import com.android.contacts.R; 36 import com.android.contacts.common.ContactPhotoManager; 37 import com.android.contacts.common.testing.InjectedServices; 38 import com.android.contacts.common.test.mocks.ContactsMockContext; 39 import com.android.contacts.common.test.mocks.MockContentProvider; 40 import com.android.contacts.common.test.mocks.MockContentProvider.Query; 41 import com.android.contacts.interactions.TestLoaderManager; 42 import com.android.contacts.list.ContactBrowseListFragment; 43 import com.android.contacts.common.model.AccountTypeManager; 44 import com.android.contacts.common.model.account.AccountType; 45 import com.android.contacts.common.model.account.AccountWithDataSet; 46 import com.android.contacts.common.model.account.BaseAccountType; 47 import com.android.contacts.common.preference.ContactsPreferences; 48 import com.android.contacts.common.test.mocks.MockAccountTypeManager; 49 import com.android.contacts.common.test.mocks.MockContactPhotoManager; 50 import com.android.contacts.common.test.mocks.MockSharedPreferences; 51 import com.android.contacts.util.PhoneCapabilityTester; 52 53 /** 54 * This test is so outdated that it's disabled temporarily. TODO Update the test and re-enable it. 55 * 56 * Tests for {@link PeopleActivity}. 57 * 58 * Running all tests: 59 * 60 * runtest contacts 61 * or 62 * adb shell am instrument \ 63 * -w com.android.contacts.tests/android.test.InstrumentationTestRunner 64 * 65 */ 66 @SmallTest 67 public class PeopleActivityTest 68 extends ActivityInstrumentationTestCase2<PeopleActivity> 69 { 70 private static final String TEST_ACCOUNT = "testAccount"; 71 private static final String TEST_ACCOUNT_TYPE = "testAccountType"; 72 73 private ContactsMockContext mContext; 74 private MockContentProvider mContactsProvider; 75 private MockContentProvider mSettingsProvider; 76 PeopleActivityTest()77 public PeopleActivityTest() { 78 super(PeopleActivity.class); 79 } 80 81 @Override setUp()82 public void setUp() { 83 mContext = new ContactsMockContext(getInstrumentation().getTargetContext()); 84 mContactsProvider = mContext.getContactsProvider(); 85 // The ContactsApplication performs this getType query to warm up the provider - see 86 // ContactsApplication#DelayedInitialization.doInBackground 87 mContactsProvider.expectTypeQuery(ContentUris.withAppendedId(Contacts.CONTENT_URI, 1), 88 Contacts.CONTENT_ITEM_TYPE); 89 mSettingsProvider = mContext.getSettingsProvider(); 90 InjectedServices services = new InjectedServices(); 91 services.setContentResolver(mContext.getContentResolver()); 92 services.setSharedPreferences(new MockSharedPreferences()); 93 ContactPhotoManager.injectContactPhotoManagerForTesting(new MockContactPhotoManager()); 94 AccountType accountType = new BaseAccountType() { 95 @Override 96 public boolean areContactsWritable() { 97 return false; 98 } 99 }; 100 accountType.accountType = TEST_ACCOUNT_TYPE; 101 102 AccountWithDataSet account = new AccountWithDataSet(TEST_ACCOUNT, TEST_ACCOUNT_TYPE, null); 103 ContactsApplication.injectServices(services); 104 105 final MockAccountTypeManager mockManager = new MockAccountTypeManager( 106 new AccountType[] { accountType }, new AccountWithDataSet[] { account }); 107 AccountTypeManager.setInstanceForTest(mockManager); 108 } 109 110 @Override tearDown()111 protected void tearDown() throws Exception { 112 ContactsApplication.injectServices(null); 113 super.tearDown(); 114 } 115 expectProviderStatusQueryAndReturnNormal()116 private void expectProviderStatusQueryAndReturnNormal() { 117 mContactsProvider 118 .expectQuery(ProviderStatus.CONTENT_URI) 119 .withProjection(ProviderStatus.STATUS) 120 .returnRow(ProviderStatus.STATUS_NORMAL) 121 .anyNumberOfTimes(); 122 } 123 expectGroupsQueryAndReturnEmpty()124 private void expectGroupsQueryAndReturnEmpty() { 125 mContactsProvider 126 .expectQuery(Groups.CONTENT_URI) 127 .withAnyProjection() 128 .withAnySelection() 129 .returnEmptyCursor() 130 .anyNumberOfTimes(); 131 } 132 expectContactListQuery(int count)133 private void expectContactListQuery(int count) { 134 Uri uri = Contacts.CONTENT_URI.buildUpon() 135 .appendQueryParameter(Contacts.EXTRA_ADDRESS_BOOK_INDEX, "true") 136 .appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY, 137 String.valueOf(Directory.DEFAULT)) 138 .build(); 139 140 Query query = mContactsProvider 141 .expectQuery(uri) 142 .withAnyProjection() 143 .withSortOrder(Contacts.SORT_KEY_PRIMARY); 144 for (int i = 1; i <= count; i++) { 145 ContentValues values = new ContentValues(); 146 values.put(Contacts._ID, i); 147 values.put(Contacts.DISPLAY_NAME, "Contact " + i); 148 values.put(Contacts.SORT_KEY_PRIMARY, "contact " + i); 149 values.put(Contacts.LOOKUP_KEY, "lu" + i); 150 query.returnRow(values); 151 } 152 } 153 expectContactLookupQuery( String lookupKey, long id, String returnLookupKey, long returnId)154 private void expectContactLookupQuery( 155 String lookupKey, long id, String returnLookupKey, long returnId) { 156 Uri uri = Contacts.getLookupUri(id, lookupKey); 157 mContactsProvider.expectTypeQuery(uri, Contacts.CONTENT_ITEM_TYPE); 158 mContactsProvider 159 .expectQuery(uri) 160 .withProjection(Contacts._ID, Contacts.LOOKUP_KEY) 161 .returnRow(returnId, returnLookupKey); 162 } 163 expectContactEntityQuery(String lookupKey, int contactId)164 private void expectContactEntityQuery(String lookupKey, int contactId) { 165 Uri uri = Uri.withAppendedPath( 166 Contacts.getLookupUri(contactId, lookupKey), Contacts.Entity.CONTENT_DIRECTORY); 167 ContentValues row1 = new ContentValues(); 168 row1.put(Contacts.Entity.DATA_ID, 1); 169 row1.put(Contacts.Entity.LOOKUP_KEY, lookupKey); 170 row1.put(Contacts.Entity.CONTACT_ID, contactId); 171 row1.put(Contacts.Entity.DISPLAY_NAME, "Contact " + contactId); 172 row1.put(Contacts.Entity.ACCOUNT_NAME, TEST_ACCOUNT); 173 row1.put(Contacts.Entity.ACCOUNT_TYPE, TEST_ACCOUNT_TYPE); 174 mContactsProvider 175 .expectQuery(uri) 176 .withAnyProjection() 177 .withAnySortOrder() 178 .returnRow(row1) 179 .anyNumberOfTimes(); 180 } 181 } 182