BaseContactsProvider2Test.java revision a5ad551e1753086825499f1aeb6415bb986f3588
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 */
16d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovpackage com.android.providers.contacts2;
17d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
18d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport static com.android.providers.contacts2.ContactsActor.PACKAGE_GREY;
19d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
20d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.content.ContentUris;
21d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.content.ContentValues;
22d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.database.Cursor;
23d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.net.Uri;
24d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.provider.ContactsContract.Aggregates;
25d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.provider.ContactsContract.AggregationExceptions;
26d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.provider.ContactsContract.Contacts;
27d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.provider.ContactsContract.Data;
28d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.provider.ContactsContract.CommonDataKinds.StructuredName;
29a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikovimport android.provider.ContactsContract.CommonDataKinds.Email;
30a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikovimport android.provider.ContactsContract.CommonDataKinds.Nickname;
31bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikovimport android.provider.ContactsContract.CommonDataKinds.Phone;
32d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.test.AndroidTestCase;
33d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.test.mock.MockContentResolver;
34d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.test.suitebuilder.annotation.LargeTest;
35d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
36d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov/**
37d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov * A common superclass for {@link ContactsProvider2}-related tests.
38d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov */
39d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov@LargeTest
40d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovpublic abstract class BaseContactsProvider2Test extends AndroidTestCase {
41d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
42d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    protected static final String PACKAGE = "ContactsProvider2Test";
43d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
44d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    private ContactsActor mActor;
45d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    protected MockContentResolver mResolver;
46d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
47d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    @Override
48d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    protected void setUp() throws Exception {
49d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        super.setUp();
50d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
51d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        mActor = new ContactsActor(getContext(), PACKAGE_GREY);
52d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        mResolver = mActor.resolver;
53d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    }
54d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
55d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    protected long createContact() {
56d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        ContentValues values = new ContentValues();
57d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        values.put(Contacts.PACKAGE, mActor.packageName);
58d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        Uri contactUri = mResolver.insert(Contacts.CONTENT_URI, values);
59d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        return ContentUris.parseId(contactUri);
60d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    }
61d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
62d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    protected Uri insertStructuredName(long contactId, String givenName, String familyName) {
63d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        ContentValues values = new ContentValues();
64d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        values.put(Data.CONTACT_ID, contactId);
65d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
66d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        StringBuilder sb = new StringBuilder();
67d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        if (givenName != null) {
68d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov            sb.append(givenName);
69d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        }
70d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        if (givenName != null && familyName != null) {
71d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov            sb.append(" ");
72d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        }
73d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        if (familyName != null) {
74d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov            sb.append(familyName);
75d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        }
76d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        values.put(StructuredName.DISPLAY_NAME, sb.toString());
77d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        values.put(StructuredName.GIVEN_NAME, givenName);
78d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        values.put(StructuredName.FAMILY_NAME, familyName);
79d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
80d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        Uri resultUri = mResolver.insert(Data.CONTENT_URI, values);
81d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        return resultUri;
82d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    }
83d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
84bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov    protected Uri insertPhoneNumber(long contactId, String phoneNumber) {
85bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov        ContentValues values = new ContentValues();
86bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov        values.put(Data.CONTACT_ID, contactId);
87bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov        values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
88bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov        values.put(Phone.NUMBER, phoneNumber);
89bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov
90bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov        Uri resultUri = mResolver.insert(Data.CONTENT_URI, values);
91bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov        return resultUri;
92bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov    }
93bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov
94a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov    protected Uri insertEmail(long contactId, String email) {
95a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov        ContentValues values = new ContentValues();
96a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov        values.put(Data.CONTACT_ID, contactId);
97a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov        values.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
98a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov        values.put(Email.DATA, email);
99a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov
100a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov        Uri resultUri = mResolver.insert(Data.CONTENT_URI, values);
101a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov        return resultUri;
102a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov    }
103a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov
104a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov    protected Uri insertNickname(long contactId, String nickname) {
105a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov        ContentValues values = new ContentValues();
106a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov        values.put(Data.CONTACT_ID, contactId);
107a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov        values.put(Data.MIMETYPE, Nickname.CONTENT_ITEM_TYPE);
108a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov        values.put(Nickname.NAME, nickname);
109a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov
110a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov        Uri resultUri = mResolver.insert(Data.CONTENT_URI, values);
111a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov        return resultUri;
112a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov    }
113a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov
114d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    protected void setAggregationException(int type, long aggregateId, long contactId) {
115d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        ContentValues values = new ContentValues();
116d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        values.put(AggregationExceptions.AGGREGATE_ID, aggregateId);
117d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        values.put(AggregationExceptions.CONTACT_ID, contactId);
118d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        values.put(AggregationExceptions.TYPE, type);
119d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        mResolver.update(AggregationExceptions.CONTENT_URI, values, null, null);
120d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    }
121d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
122d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    protected Cursor queryContact(long contactId) {
123d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        return mResolver.query(ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId), null,
124d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov                null, null, null);
125d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    }
126d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
127d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    protected Cursor queryAggregate(long aggregateId) {
128d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        return mResolver.query(ContentUris.withAppendedId(Aggregates.CONTENT_URI, aggregateId),
129d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov                null, null, null, null);
130d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    }
131d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
132d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    protected long queryAggregateId(long contactId) {
133d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        Cursor c = queryContact(contactId);
134d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        assertTrue(c.moveToFirst());
135d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        long aggregateId = c.getLong(c.getColumnIndex(Contacts.AGGREGATE_ID));
136d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        c.close();
137d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        return aggregateId;
138d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    }
139d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
140d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    protected String queryDisplayName(long aggregateId) {
141d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        Cursor c = queryAggregate(aggregateId);
142d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        assertTrue(c.moveToFirst());
143d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        String displayName = c.getString(c.getColumnIndex(Aggregates.DISPLAY_NAME));
144d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        c.close();
145d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        return displayName;
146d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    }
147d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
148bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov    protected void assertAggregated(long contactId1, long contactId2) {
149bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov        long aggregateId1 = queryAggregateId(contactId1);
150bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov        long aggregateId2 = queryAggregateId(contactId2);
151bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov        assertTrue(aggregateId1 == aggregateId2);
152bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov    }
153bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov
154d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    protected void assertAggregated(long contactId1, long contactId2, String expectedDisplayName) {
155d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        long aggregateId1 = queryAggregateId(contactId1);
156d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        long aggregateId2 = queryAggregateId(contactId2);
157d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        assertTrue(aggregateId1 == aggregateId2);
158d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
159d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        String displayName = queryDisplayName(aggregateId1);
160d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        assertEquals(expectedDisplayName, displayName);
161d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    }
162d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
163d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    protected void assertNotAggregated(long contactId1, long contactId2) {
164d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        long aggregateId1 = queryAggregateId(contactId1);
165d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        long aggregateId2 = queryAggregateId(contactId2);
166d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        assertTrue(aggregateId1 != aggregateId2);
167d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    }
168d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov}
169