• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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