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