BaseContactsProvider2Test.java revision d35d9c748af4c3182679c4c546137acfc11eb7a8
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;
29d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.test.AndroidTestCase;
30d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.test.mock.MockContentResolver;
31d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.test.suitebuilder.annotation.LargeTest;
32d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
33d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov/**
34d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov * A common superclass for {@link ContactsProvider2}-related tests.
35d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov */
36d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov@LargeTest
37d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovpublic abstract class BaseContactsProvider2Test extends AndroidTestCase {
38d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
39d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    protected static final String PACKAGE = "ContactsProvider2Test";
40d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
41d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    private ContactsActor mActor;
42d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    protected MockContentResolver mResolver;
43d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
44d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    @Override
45d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    protected void setUp() throws Exception {
46d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        super.setUp();
47d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
48d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        mActor = new ContactsActor(getContext(), PACKAGE_GREY);
49d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        mResolver = mActor.resolver;
50d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    }
51d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
52d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    protected long createContact() {
53d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        ContentValues values = new ContentValues();
54d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        values.put(Contacts.PACKAGE, mActor.packageName);
55d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        Uri contactUri = mResolver.insert(Contacts.CONTENT_URI, values);
56d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        return ContentUris.parseId(contactUri);
57d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    }
58d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
59d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    protected Uri insertStructuredName(long contactId, String givenName, String familyName) {
60d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        ContentValues values = new ContentValues();
61d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        values.put(Data.CONTACT_ID, contactId);
62d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
63d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        StringBuilder sb = new StringBuilder();
64d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        if (givenName != null) {
65d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov            sb.append(givenName);
66d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        }
67d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        if (givenName != null && familyName != null) {
68d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov            sb.append(" ");
69d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        }
70d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        if (familyName != null) {
71d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov            sb.append(familyName);
72d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        }
73d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        values.put(StructuredName.DISPLAY_NAME, sb.toString());
74d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        values.put(StructuredName.GIVEN_NAME, givenName);
75d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        values.put(StructuredName.FAMILY_NAME, familyName);
76d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
77d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        Uri resultUri = mResolver.insert(Data.CONTENT_URI, values);
78d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        return resultUri;
79d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    }
80d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
81d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    protected void setAggregationException(int type, long aggregateId, long contactId) {
82d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        ContentValues values = new ContentValues();
83d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        values.put(AggregationExceptions.AGGREGATE_ID, aggregateId);
84d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        values.put(AggregationExceptions.CONTACT_ID, contactId);
85d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        values.put(AggregationExceptions.TYPE, type);
86d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        mResolver.update(AggregationExceptions.CONTENT_URI, values, null, null);
87d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    }
88d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
89d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    protected Cursor queryContact(long contactId) {
90d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        return mResolver.query(ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId), null,
91d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov                null, null, null);
92d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    }
93d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
94d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    protected Cursor queryAggregate(long aggregateId) {
95d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        return mResolver.query(ContentUris.withAppendedId(Aggregates.CONTENT_URI, aggregateId),
96d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov                null, null, null, null);
97d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    }
98d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
99d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    protected long queryAggregateId(long contactId) {
100d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        Cursor c = queryContact(contactId);
101d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        assertTrue(c.moveToFirst());
102d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        long aggregateId = c.getLong(c.getColumnIndex(Contacts.AGGREGATE_ID));
103d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        c.close();
104d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        return aggregateId;
105d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    }
106d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
107d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    protected String queryDisplayName(long aggregateId) {
108d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        Cursor c = queryAggregate(aggregateId);
109d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        assertTrue(c.moveToFirst());
110d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        String displayName = c.getString(c.getColumnIndex(Aggregates.DISPLAY_NAME));
111d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        c.close();
112d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        return displayName;
113d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    }
114d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
115d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    protected void assertAggregated(long contactId1, long contactId2, String expectedDisplayName) {
116d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        long aggregateId1 = queryAggregateId(contactId1);
117d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        long aggregateId2 = queryAggregateId(contactId2);
118d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        assertTrue(aggregateId1 == aggregateId2);
119d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
120d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        String displayName = queryDisplayName(aggregateId1);
121d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        assertEquals(expectedDisplayName, displayName);
122d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    }
123d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov
124d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    protected void assertNotAggregated(long contactId1, long contactId2) {
125d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        long aggregateId1 = queryAggregateId(contactId1);
126d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        long aggregateId2 = queryAggregateId(contactId2);
127d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov        assertTrue(aggregateId1 != aggregateId2);
128d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov    }
129d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov}
130