BaseContactsProvider2Test.java revision 28f8857b1b46bde18b85c6d3c2a63ac44c3c2e1c
1d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov/*
2d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov * Copyright (C) 2009 The Android Open Source Project
3d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov *
4d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov * Licensed under the Apache License, Version 2.0 (the "License");
5d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov * you may not use this file except in compliance with the License.
6d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov * You may obtain a copy of the License at
7d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov *
8d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov *      http://www.apache.org/licenses/LICENSE-2.0
9d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov *
10d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov * Unless required by applicable law or agreed to in writing, software
11d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov * distributed under the License is distributed on an "AS IS" BASIS,
12d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov * See the License for the specific language governing permissions and
14d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov * limitations under the License.
15d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov */
1628f8857b1b46bde18b85c6d3c2a63ac44c3c2e1cEvan Millarpackage com.android.providers.contacts;
17d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
1828f8857b1b46bde18b85c6d3c2a63ac44c3c2e1cEvan Millarimport static com.android.providers.contacts.ContactsActor.PACKAGE_GREY;
19d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
2028f8857b1b46bde18b85c6d3c2a63ac44c3c2e1cEvan Millarimport com.android.providers.contacts.ContactsActor;
21bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar
22d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.content.ContentUris;
23d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.content.ContentValues;
24d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.database.Cursor;
25d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.net.Uri;
26d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.provider.ContactsContract.Aggregates;
27d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.provider.ContactsContract.AggregationExceptions;
28d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.provider.ContactsContract.Contacts;
29d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.provider.ContactsContract.Data;
30bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millarimport android.provider.ContactsContract.Presence;
31bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millarimport android.provider.ContactsContract.CommonDataKinds.Im;
32d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.provider.ContactsContract.CommonDataKinds.StructuredName;
33a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikovimport android.provider.ContactsContract.CommonDataKinds.Email;
34a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikovimport android.provider.ContactsContract.CommonDataKinds.Nickname;
35bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikovimport android.provider.ContactsContract.CommonDataKinds.Phone;
36d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.test.AndroidTestCase;
37d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.test.mock.MockContentResolver;
38d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.test.suitebuilder.annotation.LargeTest;
39d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
40d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov/**
41d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov * A common superclass for {@link ContactsProvider2}-related tests.
42d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov */
43d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov@LargeTest
44d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovpublic abstract class BaseContactsProvider2Test extends AndroidTestCase {
45d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
46d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    protected static final String PACKAGE = "ContactsProvider2Test";
47d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
48d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    private ContactsActor mActor;
49d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    protected MockContentResolver mResolver;
50d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
51d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    @Override
52d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    protected void setUp() throws Exception {
53d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        super.setUp();
54d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
55d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        mActor = new ContactsActor(getContext(), PACKAGE_GREY);
56d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        mResolver = mActor.resolver;
57d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    }
58d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
59d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    protected long createContact() {
60d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        ContentValues values = new ContentValues();
61d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        values.put(Contacts.PACKAGE, mActor.packageName);
62d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        Uri contactUri = mResolver.insert(Contacts.CONTENT_URI, values);
63d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        return ContentUris.parseId(contactUri);
64d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    }
65d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
66d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    protected Uri insertStructuredName(long contactId, String givenName, String familyName) {
67d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        ContentValues values = new ContentValues();
68d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        StringBuilder sb = new StringBuilder();
69d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        if (givenName != null) {
70d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov            sb.append(givenName);
71d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        }
72d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        if (givenName != null && familyName != null) {
73d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov            sb.append(" ");
74d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        }
75d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        if (familyName != null) {
76d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov            sb.append(familyName);
77d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        }
78d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        values.put(StructuredName.DISPLAY_NAME, sb.toString());
79d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        values.put(StructuredName.GIVEN_NAME, givenName);
80d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        values.put(StructuredName.FAMILY_NAME, familyName);
81d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
824097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov        return insertStructuredName(contactId, values);
834097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov    }
844097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov
854097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov    protected Uri insertStructuredName(long contactId, ContentValues values) {
864097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov        values.put(Data.CONTACT_ID, contactId);
874097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov        values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
88d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        Uri resultUri = mResolver.insert(Data.CONTENT_URI, values);
89d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        return resultUri;
90d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    }
91d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
92bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov    protected Uri insertPhoneNumber(long contactId, String phoneNumber) {
93bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov        ContentValues values = new ContentValues();
94bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov        values.put(Data.CONTACT_ID, contactId);
95bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov        values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
96bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov        values.put(Phone.NUMBER, phoneNumber);
97bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov
98bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov        Uri resultUri = mResolver.insert(Data.CONTENT_URI, values);
99bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov        return resultUri;
100bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov    }
101bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov
102a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov    protected Uri insertEmail(long contactId, String email) {
103a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov        ContentValues values = new ContentValues();
104a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov        values.put(Data.CONTACT_ID, contactId);
105a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov        values.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
106a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov        values.put(Email.DATA, email);
107a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov
108a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov        Uri resultUri = mResolver.insert(Data.CONTENT_URI, values);
109a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov        return resultUri;
110a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov    }
111a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov
112a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov    protected Uri insertNickname(long contactId, String nickname) {
113a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov        ContentValues values = new ContentValues();
114a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov        values.put(Data.CONTACT_ID, contactId);
115a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov        values.put(Data.MIMETYPE, Nickname.CONTENT_ITEM_TYPE);
116a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov        values.put(Nickname.NAME, nickname);
117a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov
118a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov        Uri resultUri = mResolver.insert(Data.CONTENT_URI, values);
119a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov        return resultUri;
120a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov    }
121a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov
122bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar    protected Uri insertPresence(int protocol, String handle, int presence) {
123bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar        ContentValues values = new ContentValues();
124bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar        values.put(Presence.IM_PROTOCOL, protocol);
125bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar        values.put(Presence.IM_HANDLE, handle);
126bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar        values.put(Presence.PRESENCE_STATUS, presence);
127bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar
128bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar        Uri resultUri = mResolver.insert(Presence.CONTENT_URI, values);
129bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar        return resultUri;
130bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar    }
131bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar
132bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar    protected Uri insertImHandle(long contactId, int protocol, String handle) {
133bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar        ContentValues values = new ContentValues();
134bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar        values.put(Data.CONTACT_ID, contactId);
135bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar        values.put(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE);
136bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar        values.put(Im.PROTOCOL, protocol);
137bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar        values.put(Im.DATA, handle);
138bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar
139bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar        Uri resultUri = mResolver.insert(Data.CONTENT_URI, values);
140bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar        return resultUri;
141bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar    }
142bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar
143d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    protected void setAggregationException(int type, long aggregateId, long contactId) {
144d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        ContentValues values = new ContentValues();
145d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        values.put(AggregationExceptions.AGGREGATE_ID, aggregateId);
146d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        values.put(AggregationExceptions.CONTACT_ID, contactId);
147d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        values.put(AggregationExceptions.TYPE, type);
148d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        mResolver.update(AggregationExceptions.CONTENT_URI, values, null, null);
149d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    }
150d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
151d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    protected Cursor queryContact(long contactId) {
152d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        return mResolver.query(ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId), null,
153d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov                null, null, null);
154d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    }
155d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
156d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    protected Cursor queryAggregate(long aggregateId) {
157d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        return mResolver.query(ContentUris.withAppendedId(Aggregates.CONTENT_URI, aggregateId),
158d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov                null, null, null, null);
159d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    }
160d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
161bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar    protected Cursor queryAggregateSummary(long aggregateId, String[] projection) {
162bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar        return mResolver.query(ContentUris.withAppendedId(Aggregates.CONTENT_SUMMARY_URI,
163bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar                aggregateId), projection, null, null, null);
164bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar    }
165bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar
166bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar    protected Cursor queryAggregateSummary() {
167bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar        return mResolver.query(Aggregates.CONTENT_SUMMARY_URI, null, null, null, null);
168bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar    }
169bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar
170d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    protected long queryAggregateId(long contactId) {
171d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        Cursor c = queryContact(contactId);
172d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        assertTrue(c.moveToFirst());
173d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        long aggregateId = c.getLong(c.getColumnIndex(Contacts.AGGREGATE_ID));
174d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        c.close();
175d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        return aggregateId;
176d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    }
177d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
178d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    protected String queryDisplayName(long aggregateId) {
179d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        Cursor c = queryAggregate(aggregateId);
180d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        assertTrue(c.moveToFirst());
181d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        String displayName = c.getString(c.getColumnIndex(Aggregates.DISPLAY_NAME));
182d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        c.close();
183d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        return displayName;
184d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    }
185d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
186bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov    protected void assertAggregated(long contactId1, long contactId2) {
187bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov        long aggregateId1 = queryAggregateId(contactId1);
188bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov        long aggregateId2 = queryAggregateId(contactId2);
189bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov        assertTrue(aggregateId1 == aggregateId2);
190bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov    }
191bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov
192d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    protected void assertAggregated(long contactId1, long contactId2, String expectedDisplayName) {
193d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        long aggregateId1 = queryAggregateId(contactId1);
194d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        long aggregateId2 = queryAggregateId(contactId2);
195d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        assertTrue(aggregateId1 == aggregateId2);
196d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
197d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        String displayName = queryDisplayName(aggregateId1);
198d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        assertEquals(expectedDisplayName, displayName);
199d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    }
200d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
201d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    protected void assertNotAggregated(long contactId1, long contactId2) {
202d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        long aggregateId1 = queryAggregateId(contactId1);
203d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        long aggregateId2 = queryAggregateId(contactId2);
204d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        assertTrue(aggregateId1 != aggregateId2);
205d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    }
2064097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov
2074097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov    protected void assertStructuredName(long contactId, String prefix, String givenName,
2084097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov            String middleName, String familyName, String suffix) {
2094097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov        Uri uri = Uri.withAppendedPath(ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId),
2104097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov                Contacts.Data.CONTENT_DIRECTORY);
2114097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov
2124097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov        final String[] projection = new String[] {
2134097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov                StructuredName.PREFIX, StructuredName.GIVEN_NAME, StructuredName.MIDDLE_NAME,
2144097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov                StructuredName.FAMILY_NAME, StructuredName.SUFFIX
2154097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov        };
2164097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov
2174097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov        Cursor c = mResolver.query(uri, projection, Data.MIMETYPE + "='"
2184097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov                + StructuredName.CONTENT_ITEM_TYPE + "'", null, null);
2194097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov
2204097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov        assertTrue(c.moveToFirst());
2214097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov        assertEquals(prefix, c.getString(0));
2224097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov        assertEquals(givenName, c.getString(1));
2234097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov        assertEquals(middleName, c.getString(2));
2244097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov        assertEquals(familyName, c.getString(3));
2254097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov        assertEquals(suffix, c.getString(4));
2264097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov        c.close();
2274097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov    }
228d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov}
229