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