blob: bb463e87722e5734b9d342e32309bfdca4ca3504 [file] [log] [blame]
Dmitri Plotnikov32bac642011-01-06 18:43:46 -08001/*
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
17package com.android.contacts.activities;
18
Yorke Lee70396332014-05-28 12:16:35 -070019import android.content.ContentUris;
Chiao Chenge0b2f1e2012-06-12 13:07:56 -070020import android.content.ContentValues;
21import android.content.Intent;
22import android.content.Loader;
23import android.net.Uri;
Chiao Chenge0b2f1e2012-06-12 13:07:56 -070024import android.provider.ContactsContract;
Chiao Chenge0b2f1e2012-06-12 13:07:56 -070025import android.provider.ContactsContract.Contacts;
26import android.provider.ContactsContract.Directory;
27import android.provider.ContactsContract.Groups;
28import android.provider.ContactsContract.ProviderStatus;
29import android.provider.Settings;
30import android.test.ActivityInstrumentationTestCase2;
31import android.test.suitebuilder.annotation.SmallTest;
32import android.widget.TextView;
33
Dmitri Plotnikov1173ae22011-01-09 14:00:39 -080034import com.android.contacts.ContactsApplication;
Dmitri Plotnikov32bac642011-01-06 18:43:46 -080035import com.android.contacts.R;
Chiao Cheng34793c42012-10-31 11:10:58 -070036import com.android.contacts.common.ContactPhotoManager;
Yorke Lee70396332014-05-28 12:16:35 -070037import com.android.contacts.common.testing.InjectedServices;
Chiao Chengdabac3f2012-11-01 17:03:07 -070038import com.android.contacts.common.test.mocks.ContactsMockContext;
39import com.android.contacts.common.test.mocks.MockContentProvider;
40import com.android.contacts.common.test.mocks.MockContentProvider.Query;
Flavio Lerda34ce5e92011-06-06 15:25:17 +010041import com.android.contacts.interactions.TestLoaderManager;
Dmitri Plotnikovab75f822011-01-10 11:21:59 -080042import com.android.contacts.list.ContactBrowseListFragment;
Chiao Cheng0d5588d2012-11-26 15:34:14 -080043import com.android.contacts.common.model.AccountTypeManager;
Chiao Cheng428f0082012-11-13 18:38:56 -080044import com.android.contacts.common.model.account.AccountType;
45import com.android.contacts.common.model.account.AccountWithDataSet;
46import com.android.contacts.common.model.account.BaseAccountType;
Yorke Leec9bb2172014-07-10 11:38:34 -070047import com.android.contacts.common.preference.ContactsPreferences;
Yorke Leecd321f62013-10-28 15:20:15 -070048import com.android.contacts.common.test.mocks.MockAccountTypeManager;
49import com.android.contacts.common.test.mocks.MockContactPhotoManager;
50import com.android.contacts.common.test.mocks.MockSharedPreferences;
Daniel Lehmann57b4c0d2011-05-04 22:34:14 -070051import com.android.contacts.util.PhoneCapabilityTester;
Dmitri Plotnikov32bac642011-01-06 18:43:46 -080052
Dmitri Plotnikov32bac642011-01-06 18:43:46 -080053/**
Makoto Onukie7d15fb2011-08-24 18:20:22 -070054 * This test is so outdated that it's disabled temporarily. TODO Update the test and re-enable it.
55 *
Katherine Kuan9856fce2011-06-01 10:24:09 -070056 * Tests for {@link PeopleActivity}.
Dmitri Plotnikov32bac642011-01-06 18:43:46 -080057 *
58 * Running all tests:
59 *
60 * runtest contacts
61 * or
62 * adb shell am instrument \
63 * -w com.android.contacts.tests/android.test.InstrumentationTestRunner
Makoto Onukie7d15fb2011-08-24 18:20:22 -070064 *
Dmitri Plotnikov32bac642011-01-06 18:43:46 -080065 */
Daisuke Miyakawa04549602011-11-23 13:25:10 -080066@SmallTest
Katherine Kuan9856fce2011-06-01 10:24:09 -070067public class PeopleActivityTest
68 extends ActivityInstrumentationTestCase2<PeopleActivity>
Dmitri Plotnikov32bac642011-01-06 18:43:46 -080069{
Dmitri Plotnikovab75f822011-01-10 11:21:59 -080070 private static final String TEST_ACCOUNT = "testAccount";
71 private static final String TEST_ACCOUNT_TYPE = "testAccountType";
72
Dmitri Plotnikov32bac642011-01-06 18:43:46 -080073 private ContactsMockContext mContext;
74 private MockContentProvider mContactsProvider;
Dmitri Plotnikov1173ae22011-01-09 14:00:39 -080075 private MockContentProvider mSettingsProvider;
Dmitri Plotnikov32bac642011-01-06 18:43:46 -080076
Katherine Kuan9856fce2011-06-01 10:24:09 -070077 public PeopleActivityTest() {
78 super(PeopleActivity.class);
Dmitri Plotnikov32bac642011-01-06 18:43:46 -080079 }
80
81 @Override
82 public void setUp() {
Chiao Chengdabac3f2012-11-01 17:03:07 -070083 mContext = new ContactsMockContext(getInstrumentation().getTargetContext());
Dmitri Plotnikov32bac642011-01-06 18:43:46 -080084 mContactsProvider = mContext.getContactsProvider();
Yorke Lee70396332014-05-28 12:16:35 -070085 // 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);
Dmitri Plotnikov1173ae22011-01-09 14:00:39 -080089 mSettingsProvider = mContext.getSettingsProvider();
90 InjectedServices services = new InjectedServices();
91 services.setContentResolver(mContext.getContentResolver());
Dmitri Plotnikov072d9112011-01-09 15:48:11 -080092 services.setSharedPreferences(new MockSharedPreferences());
Andrew Leef26fd6d2015-03-27 15:12:55 -070093 ContactPhotoManager.injectContactPhotoManagerForTesting(new MockContactPhotoManager());
Daniel Lehmann96e87fd2011-09-20 21:31:37 -070094 AccountType accountType = new BaseAccountType() {
95 @Override
96 public boolean areContactsWritable() {
97 return false;
98 }
99 };
Dmitri Plotnikovab75f822011-01-10 11:21:59 -0800100 accountType.accountType = TEST_ACCOUNT_TYPE;
Dmitri Plotnikov1173ae22011-01-09 14:00:39 -0800101
Dave Santoro2b3f3c52011-07-26 17:35:42 -0700102 AccountWithDataSet account = new AccountWithDataSet(TEST_ACCOUNT, TEST_ACCOUNT_TYPE, null);
Dmitri Plotnikov1173ae22011-01-09 14:00:39 -0800103 ContactsApplication.injectServices(services);
Chiao Chengdabac3f2012-11-01 17:03:07 -0700104
105 final MockAccountTypeManager mockManager = new MockAccountTypeManager(
106 new AccountType[] { accountType }, new AccountWithDataSet[] { account });
107 AccountTypeManager.setInstanceForTest(mockManager);
Dmitri Plotnikov32bac642011-01-06 18:43:46 -0800108 }
109
Hugo Hudson51ada362011-08-05 14:36:14 +0100110 @Override
111 protected void tearDown() throws Exception {
112 ContactsApplication.injectServices(null);
113 super.tearDown();
114 }
115
Dmitri Plotnikov32bac642011-01-06 18:43:46 -0800116 private void expectProviderStatusQueryAndReturnNormal() {
117 mContactsProvider
118 .expectQuery(ProviderStatus.CONTENT_URI)
Brian Attwellc3d202c2015-01-08 15:01:03 -0800119 .withProjection(ProviderStatus.STATUS)
120 .returnRow(ProviderStatus.STATUS_NORMAL)
Dmitri Plotnikov1173ae22011-01-09 14:00:39 -0800121 .anyNumberOfTimes();
Dmitri Plotnikov32bac642011-01-06 18:43:46 -0800122 }
123
124 private void expectGroupsQueryAndReturnEmpty() {
125 mContactsProvider
126 .expectQuery(Groups.CONTENT_URI)
127 .withAnyProjection()
128 .withAnySelection()
Dmitri Plotnikov1173ae22011-01-09 14:00:39 -0800129 .returnEmptyCursor()
130 .anyNumberOfTimes();
131 }
132
Dmitri Plotnikovab75f822011-01-10 11:21:59 -0800133 private void expectContactListQuery(int count) {
Dmitri Plotnikov1173ae22011-01-09 14:00:39 -0800134 Uri uri = Contacts.CONTENT_URI.buildUpon()
Yorke Lee9d2b6d52014-09-04 14:58:56 -0700135 .appendQueryParameter(Contacts.EXTRA_ADDRESS_BOOK_INDEX, "true")
Dmitri Plotnikov1173ae22011-01-09 14:00:39 -0800136 .appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY,
137 String.valueOf(Directory.DEFAULT))
138 .build();
139
Dmitri Plotnikovab75f822011-01-10 11:21:59 -0800140 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
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
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);
Dmitri Plotnikov1173ae22011-01-09 14:00:39 -0800174 mContactsProvider
175 .expectQuery(uri)
176 .withAnyProjection()
Dmitri Plotnikov1173ae22011-01-09 14:00:39 -0800177 .withAnySortOrder()
Dmitri Plotnikovab75f822011-01-10 11:21:59 -0800178 .returnRow(row1)
179 .anyNumberOfTimes();
Dmitri Plotnikov32bac642011-01-06 18:43:46 -0800180 }
181}