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
19e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.content.ContentValues;
20e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.content.Intent;
21e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.content.Loader;
22e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.net.Uri;
23e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.os.AsyncTask;
24e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.provider.ContactsContract;
25e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.provider.ContactsContract.ContactCounts;
26e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.provider.ContactsContract.Contacts;
27e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.provider.ContactsContract.Directory;
28e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.provider.ContactsContract.Groups;
29e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.provider.ContactsContract.ProviderStatus;
30e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.provider.Settings;
31e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.test.ActivityInstrumentationTestCase2;
32e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.test.suitebuilder.annotation.SmallTest;
33e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.widget.TextView;
34e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Cheng
351173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikovimport com.android.contacts.ContactsApplication;
3632bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikovimport com.android.contacts.R;
3734793c436c1f95a1c57b1227466fd929e5d64e17Chiao Chengimport com.android.contacts.common.ContactPhotoManager;
38dabac3f99c85bd6af90681a774796748c2775bebChiao Chengimport com.android.contacts.common.test.mocks.ContactsMockContext;
39dabac3f99c85bd6af90681a774796748c2775bebChiao Chengimport com.android.contacts.common.test.mocks.MockContentProvider;
40dabac3f99c85bd6af90681a774796748c2775bebChiao Chengimport com.android.contacts.common.test.mocks.MockContentProvider.Query;
41ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikovimport com.android.contacts.detail.ContactDetailFragment;
4234ce5e98f78b46b858d8afd450d1153c1d985426Flavio Lerdaimport com.android.contacts.interactions.TestLoaderManager;
43ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikovimport com.android.contacts.list.ContactBrowseListFragment;
440d5588da244d0992c3ff8f25d0875fdf95a8c644Chiao Chengimport com.android.contacts.common.model.AccountTypeManager;
45428f008513d1591cc08fcfe2cf0c9237fb313241Chiao Chengimport com.android.contacts.common.model.account.AccountType;
46428f008513d1591cc08fcfe2cf0c9237fb313241Chiao Chengimport com.android.contacts.common.model.account.AccountWithDataSet;
47428f008513d1591cc08fcfe2cf0c9237fb313241Chiao Chengimport com.android.contacts.common.model.account.BaseAccountType;
48cd321f65f1e50409812976380ad1f0fdb3fa35cbYorke Leeimport com.android.contacts.common.test.InjectedServices;
49cd321f65f1e50409812976380ad1f0fdb3fa35cbYorke Leeimport com.android.contacts.common.test.mocks.MockAccountTypeManager;
50cd321f65f1e50409812976380ad1f0fdb3fa35cbYorke Leeimport com.android.contacts.common.test.mocks.MockContactPhotoManager;
51cd321f65f1e50409812976380ad1f0fdb3fa35cbYorke Leeimport com.android.contacts.common.test.mocks.MockSharedPreferences;
5257b4c0d00fd7eac4658c4b40f9643fe1227e70a7Daniel Lehmannimport com.android.contacts.util.PhoneCapabilityTester;
5332bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov
5432bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov/**
55e7d15fb4bacfe85e175aa8012f9af8d41a2cfa15Makoto Onuki * This test is so outdated that it's disabled temporarily.  TODO Update the test and re-enable it.
56e7d15fb4bacfe85e175aa8012f9af8d41a2cfa15Makoto Onuki *
579856fcee477d04f51bdbcbfdf632876c6b8a1173Katherine Kuan * Tests for {@link PeopleActivity}.
5832bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov *
5932bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * Running all tests:
6032bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov *
6132bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov *   runtest contacts
6232bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * or
6332bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov *   adb shell am instrument \
6432bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov *     -w com.android.contacts.tests/android.test.InstrumentationTestRunner
65e7d15fb4bacfe85e175aa8012f9af8d41a2cfa15Makoto Onuki *
6632bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov */
670454960b4b9e43b75bbfd0fb296c25d59111a765Daisuke Miyakawa@SmallTest
689856fcee477d04f51bdbcbfdf632876c6b8a1173Katherine Kuanpublic class PeopleActivityTest
699856fcee477d04f51bdbcbfdf632876c6b8a1173Katherine Kuan        extends ActivityInstrumentationTestCase2<PeopleActivity>
7032bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov{
71072d91171c749f43b64900118e6f4dcbdd7b1097Dmitri Plotnikov    static {
72072d91171c749f43b64900118e6f4dcbdd7b1097Dmitri Plotnikov        // AsyncTask class needs to be initialized on the main thread.
73072d91171c749f43b64900118e6f4dcbdd7b1097Dmitri Plotnikov        AsyncTask.init();
74072d91171c749f43b64900118e6f4dcbdd7b1097Dmitri Plotnikov    }
75072d91171c749f43b64900118e6f4dcbdd7b1097Dmitri Plotnikov
76ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov    private static final String TEST_ACCOUNT = "testAccount";
77ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov    private static final String TEST_ACCOUNT_TYPE = "testAccountType";
78ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov
7932bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov    private ContactsMockContext mContext;
8032bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov    private MockContentProvider mContactsProvider;
811173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov    private MockContentProvider mSettingsProvider;
8232bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov
839856fcee477d04f51bdbcbfdf632876c6b8a1173Katherine Kuan    public PeopleActivityTest() {
849856fcee477d04f51bdbcbfdf632876c6b8a1173Katherine Kuan        super(PeopleActivity.class);
8532bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov    }
8632bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov
8732bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov    @Override
8832bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov    public void setUp() {
89dabac3f99c85bd6af90681a774796748c2775bebChiao Cheng        mContext = new ContactsMockContext(getInstrumentation().getTargetContext());
9032bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov        mContactsProvider = mContext.getContactsProvider();
911173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov        mSettingsProvider = mContext.getSettingsProvider();
921173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov        InjectedServices services = new InjectedServices();
931173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov        services.setContentResolver(mContext.getContentResolver());
94072d91171c749f43b64900118e6f4dcbdd7b1097Dmitri Plotnikov        services.setSharedPreferences(new MockSharedPreferences());
9525d91b36a70474ed05c72a7b06a2dc44a0505476Daniel Lehmann        services.setSystemService(ContactPhotoManager.CONTACT_PHOTO_SERVICE,
9625d91b36a70474ed05c72a7b06a2dc44a0505476Daniel Lehmann                new MockContactPhotoManager());
9796e87fd6e808e9d853263ffeb5104f3253a18639Daniel Lehmann        AccountType accountType = new BaseAccountType() {
9896e87fd6e808e9d853263ffeb5104f3253a18639Daniel Lehmann            @Override
9996e87fd6e808e9d853263ffeb5104f3253a18639Daniel Lehmann            public boolean areContactsWritable() {
10096e87fd6e808e9d853263ffeb5104f3253a18639Daniel Lehmann                return false;
10196e87fd6e808e9d853263ffeb5104f3253a18639Daniel Lehmann            }
10296e87fd6e808e9d853263ffeb5104f3253a18639Daniel Lehmann        };
103ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov        accountType.accountType = TEST_ACCOUNT_TYPE;
10432bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov
1052b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro        AccountWithDataSet account = new AccountWithDataSet(TEST_ACCOUNT, TEST_ACCOUNT_TYPE, null);
1061173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov        ContactsApplication.injectServices(services);
107dabac3f99c85bd6af90681a774796748c2775bebChiao Cheng
108dabac3f99c85bd6af90681a774796748c2775bebChiao Cheng        final MockAccountTypeManager mockManager = new MockAccountTypeManager(
109dabac3f99c85bd6af90681a774796748c2775bebChiao Cheng                        new AccountType[] { accountType }, new AccountWithDataSet[] { account });
110dabac3f99c85bd6af90681a774796748c2775bebChiao Cheng        AccountTypeManager.setInstanceForTest(mockManager);
1111173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov    }
11232bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov
11351ada3680de8700bc273a7e652886823f4c1981fHugo Hudson    @Override
11451ada3680de8700bc273a7e652886823f4c1981fHugo Hudson    protected void tearDown() throws Exception {
11551ada3680de8700bc273a7e652886823f4c1981fHugo Hudson        ContactsApplication.injectServices(null);
11651ada3680de8700bc273a7e652886823f4c1981fHugo Hudson        super.tearDown();
11751ada3680de8700bc273a7e652886823f4c1981fHugo Hudson    }
11851ada3680de8700bc273a7e652886823f4c1981fHugo Hudson
1191173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov    public void testSingleAccountNoGroups() {
120e7d15fb4bacfe85e175aa8012f9af8d41a2cfa15Makoto Onuki
121e7d15fb4bacfe85e175aa8012f9af8d41a2cfa15Makoto Onuki        if (true) { // Need this to avoid "unreachable statement"
122e7d15fb4bacfe85e175aa8012f9af8d41a2cfa15Makoto Onuki            return; // Disabled for now.
123e7d15fb4bacfe85e175aa8012f9af8d41a2cfa15Makoto Onuki        }
124e7d15fb4bacfe85e175aa8012f9af8d41a2cfa15Makoto Onuki
12557b4c0d00fd7eac4658c4b40f9643fe1227e70a7Daniel Lehmann        // This two-pane UI test only makes sense if we run with two panes.
12657b4c0d00fd7eac4658c4b40f9643fe1227e70a7Daniel Lehmann        // Let's ignore this in the single pane case
12757b4c0d00fd7eac4658c4b40f9643fe1227e70a7Daniel Lehmann        if (!PhoneCapabilityTester.isUsingTwoPanes(mContext)) return;
12857b4c0d00fd7eac4658c4b40f9643fe1227e70a7Daniel Lehmann
1291173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov        expectSettingsQueriesAndReturnDefault();
13032bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov        expectProviderStatusQueryAndReturnNormal();
13132bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov        expectGroupsQueryAndReturnEmpty();
132ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov        expectContactListQuery(100);
133ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov        expectContactLookupQuery("lu1", 1, "lu1", 1);
134ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov        expectContactEntityQuery("lu1", 1);
13532bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov
1361173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov        setActivityIntent(new Intent(Intent.ACTION_DEFAULT));
13732bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov
1389856fcee477d04f51bdbcbfdf632876c6b8a1173Katherine Kuan        PeopleActivity activity = getActivity();
13932bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov
1401173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov        getInstrumentation().waitForIdleSync();
14132bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov
142ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov        ContactBrowseListFragment listFragment = activity.getListFragment();
143ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov        ContactDetailFragment detailFragment = activity.getDetailFragment();
144ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov
145ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov        Loader<?> filterLoader =
146ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov                activity.getLoaderManager().getLoader(R.id.contact_list_filter_loader);
147ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov        Loader<?> listLoader =
148ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov                listFragment.getLoaderManager().getLoader(0);
149ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov
150ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov        // TODO: wait for detail loader
151ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov        // TODO: wait for lookup key loading
15234ce5e98f78b46b858d8afd450d1153c1d985426Flavio Lerda        TestLoaderManager.waitForLoaders(filterLoader, listLoader);
15332bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov
15432bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov        getInstrumentation().waitForIdleSync();
15532bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov
15632bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov        mContext.verify();
157ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov
158ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov        TextView nameText = (TextView) detailFragment.getView().findViewById(R.id.name);
159ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov        assertEquals("Contact 1", nameText.getText());
16032bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov    }
16132bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov
1621173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov    private void expectSettingsQueriesAndReturnDefault() {
1631173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov        mSettingsProvider
1641173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov                .expectQuery(Settings.System.CONTENT_URI)
1651173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov                .withProjection(Settings.System.VALUE)
1661173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov                .withSelection(Settings.System.NAME + "=?",
1671173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov                        ContactsContract.Preferences.DISPLAY_ORDER)
1681173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov                .returnRow(ContactsContract.Preferences.DISPLAY_ORDER_PRIMARY)
1691173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov                .anyNumberOfTimes();
1701173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov        mSettingsProvider
1711173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov                .expectQuery(Settings.System.CONTENT_URI)
1721173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov                .withProjection(Settings.System.VALUE)
1731173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov                .withSelection(Settings.System.NAME + "=?",
1741173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov                        ContactsContract.Preferences.SORT_ORDER)
1751173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov                .returnRow(ContactsContract.Preferences.SORT_ORDER_PRIMARY)
1761173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov                .anyNumberOfTimes();
1771173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov    }
1781173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov
17932bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov    private void expectProviderStatusQueryAndReturnNormal() {
18032bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov        mContactsProvider
18132bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov                .expectQuery(ProviderStatus.CONTENT_URI)
18232bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov                .withProjection(ProviderStatus.STATUS, ProviderStatus.DATA1)
1831173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov                .returnRow(ProviderStatus.STATUS_NORMAL, null)
1841173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov                .anyNumberOfTimes();
18532bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov    }
18632bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov
18732bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov    private void expectGroupsQueryAndReturnEmpty() {
18832bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov        mContactsProvider
18932bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov                .expectQuery(Groups.CONTENT_URI)
19032bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov                .withAnyProjection()
19132bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov                .withAnySelection()
1921173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov                .returnEmptyCursor()
1931173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov                .anyNumberOfTimes();
1941173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov    }
1951173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov
196ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov    private void expectContactListQuery(int count) {
1971173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov        Uri uri = Contacts.CONTENT_URI.buildUpon()
1981173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov                .appendQueryParameter(ContactCounts.ADDRESS_BOOK_INDEX_EXTRAS, "true")
1991173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov                .appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY,
2001173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov                        String.valueOf(Directory.DEFAULT))
2011173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov                .build();
2021173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov
203ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov        Query query = mContactsProvider
204ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov                .expectQuery(uri)
205ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov                .withAnyProjection()
206ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov                .withSortOrder(Contacts.SORT_KEY_PRIMARY);
207ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov        for (int i = 1; i <= count; i++) {
208ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov            ContentValues values = new ContentValues();
209ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov            values.put(Contacts._ID, i);
210ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov            values.put(Contacts.DISPLAY_NAME, "Contact " + i);
211ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov            values.put(Contacts.SORT_KEY_PRIMARY, "contact " + i);
212ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov            values.put(Contacts.LOOKUP_KEY, "lu" + i);
213ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov            query.returnRow(values);
214ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov        }
215ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov    }
216ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov
217ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov    private void expectContactLookupQuery(
218ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov            String lookupKey, long id, String returnLookupKey, long returnId) {
219ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov        Uri uri = Contacts.getLookupUri(id, lookupKey);
220ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov        mContactsProvider.expectTypeQuery(uri, Contacts.CONTENT_ITEM_TYPE);
221ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov        mContactsProvider
222ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov                .expectQuery(uri)
223ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov                .withProjection(Contacts._ID, Contacts.LOOKUP_KEY)
224ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov                .returnRow(returnId, returnLookupKey);
225ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov    }
226ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov
227ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov    private void expectContactEntityQuery(String lookupKey, int contactId) {
228ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov        Uri uri = Uri.withAppendedPath(
229ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov                Contacts.getLookupUri(contactId, lookupKey), Contacts.Entity.CONTENT_DIRECTORY);
230ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov        ContentValues row1 = new ContentValues();
231ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov        row1.put(Contacts.Entity.DATA_ID, 1);
232ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov        row1.put(Contacts.Entity.LOOKUP_KEY, lookupKey);
233ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov        row1.put(Contacts.Entity.CONTACT_ID, contactId);
234ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov        row1.put(Contacts.Entity.DISPLAY_NAME, "Contact " + contactId);
235ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov        row1.put(Contacts.Entity.ACCOUNT_NAME, TEST_ACCOUNT);
236ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov        row1.put(Contacts.Entity.ACCOUNT_TYPE, TEST_ACCOUNT_TYPE);
2371173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov        mContactsProvider
2381173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov                .expectQuery(uri)
2391173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov                .withAnyProjection()
2401173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov                .withAnySortOrder()
241ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov                .returnRow(row1)
242ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov                .anyNumberOfTimes();
24332bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov    }
24432bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov}
245