1 package android.test; 2 3 import android.content.ContentProvider; 4 import android.content.ContentResolver; 5 import android.content.Context; 6 import android.test.mock.MockContext; 7 import android.test.mock.MockContentResolver; 8 import android.database.DatabaseUtils; 9 10 /** 11 * If you would like to test a single content provider with an 12 * {@link InstrumentationTestCase}, this provides some of the boiler plate in {@link #setUp} and 13 * {@link #tearDown}. 14 * 15 * @deprecated this class extends InstrumentationTestCase but should extend AndroidTestCase. Use 16 * ProviderTestCase2, which corrects this problem, instead. 17 */ 18 @Deprecated 19 public abstract class ProviderTestCase<T extends ContentProvider> 20 extends InstrumentationTestCase { 21 22 Class<T> mProviderClass; 23 String mProviderAuthority; 24 25 private IsolatedContext mProviderContext; 26 private MockContentResolver mResolver; 27 ProviderTestCase(Class<T> providerClass, String providerAuthority)28 public ProviderTestCase(Class<T> providerClass, String providerAuthority) { 29 mProviderClass = providerClass; 30 mProviderAuthority = providerAuthority; 31 } 32 33 /** 34 * The content provider that will be set up for use in each test method. 35 */ 36 private T mProvider; 37 getProvider()38 public T getProvider() { 39 return mProvider; 40 } 41 42 @Override setUp()43 protected void setUp() throws Exception { 44 super.setUp(); 45 46 mResolver = new MockContentResolver(); 47 final String filenamePrefix = "test."; 48 RenamingDelegatingContext targetContextWrapper = new RenamingDelegatingContext( 49 new MockContext(), // The context that most methods are delegated to 50 getInstrumentation().getTargetContext(), // The context that file methods are delegated to 51 filenamePrefix); 52 mProviderContext = new IsolatedContext(mResolver, targetContextWrapper); 53 54 mProvider = mProviderClass.newInstance(); 55 mProvider.attachInfo(mProviderContext, null); 56 assertNotNull(mProvider); 57 mResolver.addProvider(mProviderAuthority, getProvider()); 58 } 59 getMockContentResolver()60 public MockContentResolver getMockContentResolver() { 61 return mResolver; 62 } 63 getMockContext()64 public IsolatedContext getMockContext() { 65 return mProviderContext; 66 } 67 newResolverWithContentProviderFromSql( Context targetContext, Class<T> providerClass, String authority, String databaseName, int databaseVersion, String sql)68 public static <T extends ContentProvider> ContentResolver newResolverWithContentProviderFromSql( 69 Context targetContext, Class<T> providerClass, String authority, 70 String databaseName, int databaseVersion, String sql) 71 throws IllegalAccessException, InstantiationException { 72 final String filenamePrefix = "test."; 73 MockContentResolver resolver = new MockContentResolver(); 74 RenamingDelegatingContext targetContextWrapper = new RenamingDelegatingContext( 75 new MockContext(), // The context that most methods are delegated to 76 targetContext, // The context that file methods are delegated to 77 filenamePrefix); 78 Context context = new IsolatedContext( 79 resolver, targetContextWrapper); 80 DatabaseUtils.createDbFromSqlStatements(context, databaseName, databaseVersion, sql); 81 82 T provider = providerClass.newInstance(); 83 provider.attachInfo(context, null); 84 resolver.addProvider(authority, provider); 85 86 return resolver; 87 } 88 } 89