ProviderTestCase.java revision 0c9e14aa4aa1370e01872dc05238f822f2dd552c
110362ab9d67d87c0c3217e804e64d3e7038211dfKenny Root/* 210362ab9d67d87c0c3217e804e64d3e7038211dfKenny Root * Copyright (C) 2007 The Android Open Source Project 310362ab9d67d87c0c3217e804e64d3e7038211dfKenny Root * 410362ab9d67d87c0c3217e804e64d3e7038211dfKenny Root * Licensed under the Apache License, Version 2.0 (the "License"); 510362ab9d67d87c0c3217e804e64d3e7038211dfKenny Root * you may not use this file except in compliance with the License. 610362ab9d67d87c0c3217e804e64d3e7038211dfKenny Root * You may obtain a copy of the License at 710362ab9d67d87c0c3217e804e64d3e7038211dfKenny Root * 810362ab9d67d87c0c3217e804e64d3e7038211dfKenny Root * http://www.apache.org/licenses/LICENSE-2.0 910362ab9d67d87c0c3217e804e64d3e7038211dfKenny Root * 1010362ab9d67d87c0c3217e804e64d3e7038211dfKenny Root * Unless required by applicable law or agreed to in writing, software 1110362ab9d67d87c0c3217e804e64d3e7038211dfKenny Root * distributed under the License is distributed on an "AS IS" BASIS, 1210362ab9d67d87c0c3217e804e64d3e7038211dfKenny Root * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1310362ab9d67d87c0c3217e804e64d3e7038211dfKenny Root * See the License for the specific language governing permissions and 1410362ab9d67d87c0c3217e804e64d3e7038211dfKenny Root * limitations under the License. 1510362ab9d67d87c0c3217e804e64d3e7038211dfKenny Root */ 1610362ab9d67d87c0c3217e804e64d3e7038211dfKenny Root 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.test; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ContentProvider; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ContentResolver; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.mock.MockContext; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.mock.MockContentResolver; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.database.DatabaseUtils; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If you would like to test a single content provider with an 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link InstrumentationTestCase}, this provides some of the boiler plate in {@link #setUp} and 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #tearDown}. 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @deprecated this class extends InstrumentationTestCase but should extend AndroidTestCase. Use 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ProviderTestCase2, which corrects this problem, instead. 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 344a51c20ce607c74914f90fd897f04080121ac13bDianne Hackborn@Deprecated 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic abstract class ProviderTestCase<T extends ContentProvider> 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project extends InstrumentationTestCase { 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Class<T> mProviderClass; 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String mProviderAuthority; 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private IsolatedContext mProviderContext; 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private MockContentResolver mResolver; 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ProviderTestCase(Class<T> providerClass, String providerAuthority) { 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mProviderClass = providerClass; 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mProviderAuthority = providerAuthority; 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The content provider that will be set up for use in each test method. 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private T mProvider; 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public T getProvider() { 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mProvider; 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void setUp() throws Exception { 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.setUp(); 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mResolver = new MockContentResolver(); 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final String filenamePrefix = "test."; 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project RenamingDelegatingContext targetContextWrapper = new RenamingDelegatingContext( 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new MockContext(), // The context that most methods are delegated to 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getInstrumentation().getTargetContext(), // The context that file methods are delegated to 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project filenamePrefix); 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mProviderContext = new IsolatedContext(mResolver, targetContextWrapper); 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mProvider = mProviderClass.newInstance(); 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mProvider.attachInfo(mProviderContext, null); 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertNotNull(mProvider); 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mResolver.addProvider(mProviderAuthority, getProvider()); 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 760c9e14aa4aa1370e01872dc05238f822f2dd552cVasu Nori /** 770c9e14aa4aa1370e01872dc05238f822f2dd552cVasu Nori * Tears down the environment for the test fixture. 780c9e14aa4aa1370e01872dc05238f822f2dd552cVasu Nori * <p> 790c9e14aa4aa1370e01872dc05238f822f2dd552cVasu Nori * Calls {@link android.content.ContentProvider#shutdown()} on the 800c9e14aa4aa1370e01872dc05238f822f2dd552cVasu Nori * {@link android.content.ContentProvider} represented by {@link #mProvider} 810c9e14aa4aa1370e01872dc05238f822f2dd552cVasu Nori */ 820c9e14aa4aa1370e01872dc05238f822f2dd552cVasu Nori @Override 830c9e14aa4aa1370e01872dc05238f822f2dd552cVasu Nori protected void tearDown() throws Exception { 840c9e14aa4aa1370e01872dc05238f822f2dd552cVasu Nori mProvider.shutdown(); 850c9e14aa4aa1370e01872dc05238f822f2dd552cVasu Nori super.tearDown(); 860c9e14aa4aa1370e01872dc05238f822f2dd552cVasu Nori } 870c9e14aa4aa1370e01872dc05238f822f2dd552cVasu Nori 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public MockContentResolver getMockContentResolver() { 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mResolver; 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public IsolatedContext getMockContext() { 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mProviderContext; 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static <T extends ContentProvider> ContentResolver newResolverWithContentProviderFromSql( 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Context targetContext, Class<T> providerClass, String authority, 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String databaseName, int databaseVersion, String sql) 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throws IllegalAccessException, InstantiationException { 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final String filenamePrefix = "test."; 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MockContentResolver resolver = new MockContentResolver(); 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project RenamingDelegatingContext targetContextWrapper = new RenamingDelegatingContext( 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new MockContext(), // The context that most methods are delegated to 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project targetContext, // The context that file methods are delegated to 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project filenamePrefix); 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Context context = new IsolatedContext( 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project resolver, targetContextWrapper); 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DatabaseUtils.createDbFromSqlStatements(context, databaseName, databaseVersion, sql); 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project T provider = providerClass.newInstance(); 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project provider.attachInfo(context, null); 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project resolver.addProvider(authority, provider); 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return resolver; 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 117