ProviderTestCase.java revision 4a51c20ce607c74914f90fd897f04080121ac13b
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.test; 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ContentProvider; 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ContentResolver; 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context; 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.mock.MockContext; 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.mock.MockContentResolver; 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.database.DatabaseUtils; 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If you would like to test a single content provider with an 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link InstrumentationTestCase}, this provides some of the boiler plate in {@link #setUp} and 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #tearDown}. 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @deprecated this class extends InstrumentationTestCase but should extend AndroidTestCase. Use 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ProviderTestCase2, which corrects this problem, instead. 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 184a51c20ce607c74914f90fd897f04080121ac13bDianne Hackborn@Deprecated 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic abstract class ProviderTestCase<T extends ContentProvider> 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project extends InstrumentationTestCase { 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Class<T> mProviderClass; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String mProviderAuthority; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private IsolatedContext mProviderContext; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private MockContentResolver mResolver; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ProviderTestCase(Class<T> providerClass, String providerAuthority) { 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mProviderClass = providerClass; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mProviderAuthority = providerAuthority; 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The content provider that will be set up for use in each test method. 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private T mProvider; 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public T getProvider() { 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mProvider; 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void setUp() throws Exception { 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.setUp(); 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mResolver = new MockContentResolver(); 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final String filenamePrefix = "test."; 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project RenamingDelegatingContext targetContextWrapper = new RenamingDelegatingContext( 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new MockContext(), // The context that most methods are delegated to 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getInstrumentation().getTargetContext(), // The context that file methods are delegated to 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project filenamePrefix); 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mProviderContext = new IsolatedContext(mResolver, targetContextWrapper); 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mProvider = mProviderClass.newInstance(); 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mProvider.attachInfo(mProviderContext, null); 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertNotNull(mProvider); 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mResolver.addProvider(mProviderAuthority, getProvider()); 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public MockContentResolver getMockContentResolver() { 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mResolver; 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public IsolatedContext getMockContext() { 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mProviderContext; 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static <T extends ContentProvider> ContentResolver newResolverWithContentProviderFromSql( 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Context targetContext, Class<T> providerClass, String authority, 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String databaseName, int databaseVersion, String sql) 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throws IllegalAccessException, InstantiationException { 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final String filenamePrefix = "test."; 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MockContentResolver resolver = new MockContentResolver(); 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project RenamingDelegatingContext targetContextWrapper = new RenamingDelegatingContext( 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new MockContext(), // The context that most methods are delegated to 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project targetContext, // The context that file methods are delegated to 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project filenamePrefix); 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Context context = new IsolatedContext( 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project resolver, targetContextWrapper); 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DatabaseUtils.createDbFromSqlStatements(context, databaseName, databaseVersion, sql); 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project T provider = providerClass.newInstance(); 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project provider.attachInfo(context, null); 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project resolver.addProvider(authority, provider); 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return resolver; 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 89