BaseContactsProvider2Test.java revision bee1a6b2e7cbea778195890e442c9e50f2a4e6d9
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
22bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikovimport android.content.ContentProvider;
23d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.content.ContentUris;
24d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.content.ContentValues;
25d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.database.Cursor;
26d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.net.Uri;
27bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikovimport android.provider.ContactsContract;
28d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.provider.ContactsContract.Aggregates;
29d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.provider.ContactsContract.AggregationExceptions;
30d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.provider.ContactsContract.Contacts;
31d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.provider.ContactsContract.Data;
32bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millarimport android.provider.ContactsContract.Presence;
33bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millarimport android.provider.ContactsContract.CommonDataKinds.Im;
34d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.provider.ContactsContract.CommonDataKinds.StructuredName;
35a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikovimport android.provider.ContactsContract.CommonDataKinds.Email;
36a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikovimport android.provider.ContactsContract.CommonDataKinds.Nickname;
37bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikovimport android.provider.ContactsContract.CommonDataKinds.Phone;
38d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.test.AndroidTestCase;
39d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.test.mock.MockContentResolver;
40d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.test.suitebuilder.annotation.LargeTest;
41bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikovimport android.util.Log;
42bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov
43bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikovimport java.util.Locale;
44d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
45d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov/**
46d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov * A common superclass for {@link ContactsProvider2}-related tests.
47d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov */
48d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov@LargeTest
49d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovpublic abstract class BaseContactsProvider2Test extends AndroidTestCase {
50d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
51d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    protected static final String PACKAGE = "ContactsProvider2Test";
52d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
53bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov    protected ContactsActor mActor;
54d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    protected MockContentResolver mResolver;
55d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
56bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov    protected Class<? extends ContentProvider> getProviderClass() {
57bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov        return SynchronousContactsProvider2.class;
58bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov    }
59bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov
60bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov    protected String getAuthority() {
61bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov        return ContactsContract.AUTHORITY;
62bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov    }
63bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov
64d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    @Override
65d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    protected void setUp() throws Exception {
66d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        super.setUp();
67d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
68bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov        mActor = new ContactsActor(getContext(), PACKAGE_GREY, getProviderClass(), getAuthority());
69d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        mResolver = mActor.resolver;
70d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    }
71d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
72d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    protected long createContact() {
73d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        ContentValues values = new ContentValues();
74d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        values.put(Contacts.PACKAGE, mActor.packageName);
75d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        Uri contactUri = mResolver.insert(Contacts.CONTENT_URI, values);
76d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        return ContentUris.parseId(contactUri);
77d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    }
78d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
79d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    protected Uri insertStructuredName(long contactId, String givenName, String familyName) {
80d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        ContentValues values = new ContentValues();
81d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        StringBuilder sb = new StringBuilder();
82d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        if (givenName != null) {
83d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov            sb.append(givenName);
84d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        }
85d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        if (givenName != null && familyName != null) {
86d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov            sb.append(" ");
87d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        }
88d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        if (familyName != null) {
89d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov            sb.append(familyName);
90d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        }
91d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        values.put(StructuredName.DISPLAY_NAME, sb.toString());
92d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        values.put(StructuredName.GIVEN_NAME, givenName);
93d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        values.put(StructuredName.FAMILY_NAME, familyName);
94d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
954097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov        return insertStructuredName(contactId, values);
964097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov    }
974097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov
984097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov    protected Uri insertStructuredName(long contactId, ContentValues values) {
994097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov        values.put(Data.CONTACT_ID, contactId);
1004097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov        values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
101d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        Uri resultUri = mResolver.insert(Data.CONTENT_URI, values);
102d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        return resultUri;
103d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    }
104d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
105bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov    protected Uri insertPhoneNumber(long contactId, String phoneNumber) {
106bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov        ContentValues values = new ContentValues();
107bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov        values.put(Data.CONTACT_ID, contactId);
108bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov        values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
109bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov        values.put(Phone.NUMBER, phoneNumber);
110bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov
111bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov        Uri resultUri = mResolver.insert(Data.CONTENT_URI, values);
112bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov        return resultUri;
113bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov    }
114bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov
115a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov    protected Uri insertEmail(long contactId, String email) {
116a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov        ContentValues values = new ContentValues();
117a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov        values.put(Data.CONTACT_ID, contactId);
118a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov        values.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
119a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov        values.put(Email.DATA, email);
120a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov
121a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov        Uri resultUri = mResolver.insert(Data.CONTENT_URI, values);
122a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov        return resultUri;
123a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov    }
124a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov
125a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov    protected Uri insertNickname(long contactId, String nickname) {
126a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov        ContentValues values = new ContentValues();
127a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov        values.put(Data.CONTACT_ID, contactId);
128a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov        values.put(Data.MIMETYPE, Nickname.CONTENT_ITEM_TYPE);
129a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov        values.put(Nickname.NAME, nickname);
130a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov
131a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov        Uri resultUri = mResolver.insert(Data.CONTENT_URI, values);
132a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov        return resultUri;
133a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov    }
134a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov
135bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar    protected Uri insertPresence(int protocol, String handle, int presence) {
136bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar        ContentValues values = new ContentValues();
137bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar        values.put(Presence.IM_PROTOCOL, protocol);
138bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar        values.put(Presence.IM_HANDLE, handle);
139bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar        values.put(Presence.PRESENCE_STATUS, presence);
140bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar
141bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar        Uri resultUri = mResolver.insert(Presence.CONTENT_URI, values);
142bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar        return resultUri;
143bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar    }
144bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar
145bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar    protected Uri insertImHandle(long contactId, int protocol, String handle) {
146bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar        ContentValues values = new ContentValues();
147bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar        values.put(Data.CONTACT_ID, contactId);
148bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar        values.put(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE);
149bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar        values.put(Im.PROTOCOL, protocol);
150bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar        values.put(Im.DATA, handle);
151bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar
152bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar        Uri resultUri = mResolver.insert(Data.CONTENT_URI, values);
153bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar        return resultUri;
154bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar    }
155bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar
156d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    protected void setAggregationException(int type, long aggregateId, long contactId) {
157d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        ContentValues values = new ContentValues();
158d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        values.put(AggregationExceptions.AGGREGATE_ID, aggregateId);
159d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        values.put(AggregationExceptions.CONTACT_ID, contactId);
160d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        values.put(AggregationExceptions.TYPE, type);
161d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        mResolver.update(AggregationExceptions.CONTENT_URI, values, null, null);
162d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    }
163d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
164d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    protected Cursor queryContact(long contactId) {
165d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        return mResolver.query(ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId), null,
166d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov                null, null, null);
167d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    }
168d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
169d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    protected Cursor queryAggregate(long aggregateId) {
170d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        return mResolver.query(ContentUris.withAppendedId(Aggregates.CONTENT_URI, aggregateId),
171d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov                null, null, null, null);
172d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    }
173d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
174bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar    protected Cursor queryAggregateSummary(long aggregateId, String[] projection) {
175bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar        return mResolver.query(ContentUris.withAppendedId(Aggregates.CONTENT_SUMMARY_URI,
176bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar                aggregateId), projection, null, null, null);
177bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar    }
178bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar
179bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar    protected Cursor queryAggregateSummary() {
180bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar        return mResolver.query(Aggregates.CONTENT_SUMMARY_URI, null, null, null, null);
181bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar    }
182bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar
183d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    protected long queryAggregateId(long contactId) {
184d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        Cursor c = queryContact(contactId);
185d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        assertTrue(c.moveToFirst());
186d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        long aggregateId = c.getLong(c.getColumnIndex(Contacts.AGGREGATE_ID));
187d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        c.close();
188d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        return aggregateId;
189d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    }
190d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
191d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    protected String queryDisplayName(long aggregateId) {
192d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        Cursor c = queryAggregate(aggregateId);
193d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        assertTrue(c.moveToFirst());
194d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        String displayName = c.getString(c.getColumnIndex(Aggregates.DISPLAY_NAME));
195d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        c.close();
196d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        return displayName;
197d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    }
198d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
199bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov    protected void assertAggregated(long contactId1, long contactId2) {
200bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov        long aggregateId1 = queryAggregateId(contactId1);
201bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov        long aggregateId2 = queryAggregateId(contactId2);
202bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov        assertTrue(aggregateId1 == aggregateId2);
203bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov    }
204bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov
205d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    protected void assertAggregated(long contactId1, long contactId2, String expectedDisplayName) {
206d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        long aggregateId1 = queryAggregateId(contactId1);
207d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        long aggregateId2 = queryAggregateId(contactId2);
208d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        assertTrue(aggregateId1 == aggregateId2);
209d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
210d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        String displayName = queryDisplayName(aggregateId1);
211d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        assertEquals(expectedDisplayName, displayName);
212d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    }
213d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
214d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    protected void assertNotAggregated(long contactId1, long contactId2) {
215d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        long aggregateId1 = queryAggregateId(contactId1);
216d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        long aggregateId2 = queryAggregateId(contactId2);
217d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        assertTrue(aggregateId1 != aggregateId2);
218d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    }
2194097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov
2204097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov    protected void assertStructuredName(long contactId, String prefix, String givenName,
2214097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov            String middleName, String familyName, String suffix) {
2224097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov        Uri uri = Uri.withAppendedPath(ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId),
2234097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov                Contacts.Data.CONTENT_DIRECTORY);
2244097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov
2254097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov        final String[] projection = new String[] {
2264097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov                StructuredName.PREFIX, StructuredName.GIVEN_NAME, StructuredName.MIDDLE_NAME,
2274097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov                StructuredName.FAMILY_NAME, StructuredName.SUFFIX
2284097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov        };
2294097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov
2304097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov        Cursor c = mResolver.query(uri, projection, Data.MIMETYPE + "='"
2314097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov                + StructuredName.CONTENT_ITEM_TYPE + "'", null, null);
2324097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov
2334097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov        assertTrue(c.moveToFirst());
2344097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov        assertEquals(prefix, c.getString(0));
2354097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov        assertEquals(givenName, c.getString(1));
2364097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov        assertEquals(middleName, c.getString(2));
2374097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov        assertEquals(familyName, c.getString(3));
2384097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov        assertEquals(suffix, c.getString(4));
2394097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov        c.close();
2404097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov    }
241d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov}
242