127f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov/* 227f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov * Copyright (C) 2010 The Android Open Source Project 327f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov * 427f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov * Licensed under the Apache License, Version 2.0 (the "License"); 527f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov * you may not use this file except in compliance with the License. 627f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov * You may obtain a copy of the License at 727f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov * 827f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov * http://www.apache.org/licenses/LICENSE-2.0 927f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov * 1027f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov * Unless required by applicable law or agreed to in writing, software 1127f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov * distributed under the License is distributed on an "AS IS" BASIS, 1227f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1327f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov * See the License for the specific language governing permissions and 1427f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov * limitations under the License. 1527f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov */ 1627f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov 1727f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikovpackage com.android.contacts.tests.mocks; 1827f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov 1959a887eb0cd4f1f022cbcc7bbb34c2124585e0a5Flavio Lerdaimport com.android.contacts.model.AccountTypeManager; 2059a887eb0cd4f1f022cbcc7bbb34c2124585e0a5Flavio Lerda 2127f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikovimport android.content.ContentResolver; 2227f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikovimport android.content.Context; 2327f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikovimport android.content.ContextWrapper; 24b1f0e5e8a4de69bd80276742900441e930fa4c86Daisuke Miyakawaimport android.content.Intent; 2529996f299a7022b3592bdd68ef37fab283b7caddDmitri Plotnikovimport android.content.pm.PackageManager; 2629996f299a7022b3592bdd68ef37fab283b7caddDmitri Plotnikovimport android.content.pm.ProviderInfo; 2727f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikovimport android.provider.ContactsContract; 2827f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikovimport android.provider.Settings; 2927f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikovimport android.test.mock.MockContentResolver; 3027f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov 3127f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov/** 3229996f299a7022b3592bdd68ef37fab283b7caddDmitri Plotnikov * A mock context for contacts unit tests. Forwards everything to 3327f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov * a supplied context, except content resolver operations, which are sent 3427f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov * to mock content providers. 3527f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov */ 3627f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikovpublic class ContactsMockContext extends ContextWrapper { 3729996f299a7022b3592bdd68ef37fab283b7caddDmitri Plotnikov private ContactsMockPackageManager mPackageManager; 3827f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov private MockContentResolver mContentResolver; 3927f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov private MockContentProvider mContactsProvider; 4027f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov private MockContentProvider mSettingsProvider; 4159a887eb0cd4f1f022cbcc7bbb34c2124585e0a5Flavio Lerda private MockAccountTypeManager mMockAccountTypeManager; 42b1f0e5e8a4de69bd80276742900441e930fa4c86Daisuke Miyakawa private Intent mIntentForStartActivity; 4327f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov 4427f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov public ContactsMockContext(Context base) { 4527f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov super(base); 4629996f299a7022b3592bdd68ef37fab283b7caddDmitri Plotnikov mPackageManager = new ContactsMockPackageManager(); 4727f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov mContentResolver = new MockContentResolver(); 4827f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov mContactsProvider = new MockContentProvider(); 4927f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov mContentResolver.addProvider(ContactsContract.AUTHORITY, mContactsProvider); 5029996f299a7022b3592bdd68ef37fab283b7caddDmitri Plotnikov mContactsProvider.attachInfo(this, new ProviderInfo()); 5127f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov mSettingsProvider = new MockContentProvider(); 5229996f299a7022b3592bdd68ef37fab283b7caddDmitri Plotnikov mSettingsProvider.attachInfo(this, new ProviderInfo()); 5327f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov mContentResolver.addProvider(Settings.AUTHORITY, mSettingsProvider); 5427f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov } 5527f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov 5659a887eb0cd4f1f022cbcc7bbb34c2124585e0a5Flavio Lerda public void setMockAccountTypeManager(MockAccountTypeManager mockAccountTypeManager) { 5759a887eb0cd4f1f022cbcc7bbb34c2124585e0a5Flavio Lerda mMockAccountTypeManager = mockAccountTypeManager; 5859a887eb0cd4f1f022cbcc7bbb34c2124585e0a5Flavio Lerda } 5959a887eb0cd4f1f022cbcc7bbb34c2124585e0a5Flavio Lerda 6027f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov @Override 6127f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov public ContentResolver getContentResolver() { 6227f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov return mContentResolver; 6327f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov } 6427f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov 6527f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov public MockContentProvider getContactsProvider() { 6627f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov return mContactsProvider; 6727f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov } 6827f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov 6927f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov public MockContentProvider getSettingsProvider() { 7027f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov return mSettingsProvider; 7127f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov } 7274a2dc5dd353aa724f3b4bcfc4694f15c4d0ff73Daniel Lehmann 7374a2dc5dd353aa724f3b4bcfc4694f15c4d0ff73Daniel Lehmann @Override 7429996f299a7022b3592bdd68ef37fab283b7caddDmitri Plotnikov public PackageManager getPackageManager() { 7529996f299a7022b3592bdd68ef37fab283b7caddDmitri Plotnikov return mPackageManager; 7629996f299a7022b3592bdd68ef37fab283b7caddDmitri Plotnikov } 7729996f299a7022b3592bdd68ef37fab283b7caddDmitri Plotnikov 7829996f299a7022b3592bdd68ef37fab283b7caddDmitri Plotnikov @Override 7974a2dc5dd353aa724f3b4bcfc4694f15c4d0ff73Daniel Lehmann public Context getApplicationContext() { 8074a2dc5dd353aa724f3b4bcfc4694f15c4d0ff73Daniel Lehmann return this; 8174a2dc5dd353aa724f3b4bcfc4694f15c4d0ff73Daniel Lehmann } 8229996f299a7022b3592bdd68ef37fab283b7caddDmitri Plotnikov 83b1f0e5e8a4de69bd80276742900441e930fa4c86Daisuke Miyakawa /** 84b1f0e5e8a4de69bd80276742900441e930fa4c86Daisuke Miyakawa * Instead of actually sending Intent, this method just remembers what Intent was supplied last. 85b1f0e5e8a4de69bd80276742900441e930fa4c86Daisuke Miyakawa * You can check the content via {@link #getIntentForStartActivity()} for verification. 86b1f0e5e8a4de69bd80276742900441e930fa4c86Daisuke Miyakawa */ 87b1f0e5e8a4de69bd80276742900441e930fa4c86Daisuke Miyakawa @Override 88b1f0e5e8a4de69bd80276742900441e930fa4c86Daisuke Miyakawa public void startActivity(Intent intent) { 89b1f0e5e8a4de69bd80276742900441e930fa4c86Daisuke Miyakawa mIntentForStartActivity = intent; 90b1f0e5e8a4de69bd80276742900441e930fa4c86Daisuke Miyakawa } 91b1f0e5e8a4de69bd80276742900441e930fa4c86Daisuke Miyakawa 92b1f0e5e8a4de69bd80276742900441e930fa4c86Daisuke Miyakawa public Intent getIntentForStartActivity() { 93b1f0e5e8a4de69bd80276742900441e930fa4c86Daisuke Miyakawa return mIntentForStartActivity; 94b1f0e5e8a4de69bd80276742900441e930fa4c86Daisuke Miyakawa } 95b1f0e5e8a4de69bd80276742900441e930fa4c86Daisuke Miyakawa 9629996f299a7022b3592bdd68ef37fab283b7caddDmitri Plotnikov public void verify() { 9729996f299a7022b3592bdd68ef37fab283b7caddDmitri Plotnikov mContactsProvider.verify(); 9829996f299a7022b3592bdd68ef37fab283b7caddDmitri Plotnikov mSettingsProvider.verify(); 9929996f299a7022b3592bdd68ef37fab283b7caddDmitri Plotnikov } 10059a887eb0cd4f1f022cbcc7bbb34c2124585e0a5Flavio Lerda 10159a887eb0cd4f1f022cbcc7bbb34c2124585e0a5Flavio Lerda @Override 10259a887eb0cd4f1f022cbcc7bbb34c2124585e0a5Flavio Lerda public Object getSystemService(String name) { 10359a887eb0cd4f1f022cbcc7bbb34c2124585e0a5Flavio Lerda if (AccountTypeManager.ACCOUNT_TYPE_SERVICE.equals(name)) { 10459a887eb0cd4f1f022cbcc7bbb34c2124585e0a5Flavio Lerda return mMockAccountTypeManager; 10559a887eb0cd4f1f022cbcc7bbb34c2124585e0a5Flavio Lerda } 10659a887eb0cd4f1f022cbcc7bbb34c2124585e0a5Flavio Lerda return super.getSystemService(name); 10759a887eb0cd4f1f022cbcc7bbb34c2124585e0a5Flavio Lerda } 10827f1bc8b5687dbfd6542026293d68950d4555ecaDmitri Plotnikov} 109