blob: 588238780d04cf2bfb820b68e999c81461a0cfa0 [file] [log] [blame]
The Android Open Source Project54b6cfa2008-10-21 07:00:00 -07001package android.test;
2
3import android.content.ContentProvider;
4import android.content.ContentResolver;
5import android.content.Context;
6import android.test.mock.MockContext;
7import android.test.mock.MockContentResolver;
8import 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 */
15public abstract class ProviderTestCase<T extends ContentProvider>
16 extends InstrumentationTestCase {
17
18 Class<T> mProviderClass;
19 String mProviderAuthority;
20
21 private IsolatedContext mProviderContext;
22 private MockContentResolver mResolver;
23
24 public ProviderTestCase(Class<T> providerClass, String providerAuthority) {
25 mProviderClass = providerClass;
26 mProviderAuthority = providerAuthority;
27 }
28
29 /**
30 * The content provider that will be set up for use in each test method.
31 */
32 private T mProvider;
33
34 public T getProvider() {
35 return mProvider;
36 }
37
38 @Override
39 protected void setUp() throws Exception {
40 super.setUp();
41
42 mResolver = new MockContentResolver();
43 final String filenamePrefix = "test.";
44 RenamingDelegatingContext targetContextWrapper = new RenamingDelegatingContext(
45 new MockContext(), // The context that most methods are delegated to
46 getInstrumentation().getTargetContext(), // The context that file methods are delegated to
47 filenamePrefix);
48 mProviderContext = new IsolatedContext(mResolver, targetContextWrapper);
49
50 mProvider = mProviderClass.newInstance();
51 mProvider.attachInfo(mProviderContext, null);
52 assertNotNull(mProvider);
53 mResolver.addProvider(mProviderAuthority, getProvider());
54 }
55
56 public MockContentResolver getMockContentResolver() {
57 return mResolver;
58 }
59
60 public IsolatedContext getMockContext() {
61 return mProviderContext;
62 }
63
64 public static <T extends ContentProvider> ContentResolver newResolverWithContentProviderFromSql(
65 Context targetContext, Class<T> providerClass, String authority,
66 String databaseName, int databaseVersion, String sql)
67 throws IllegalAccessException, InstantiationException {
68 final String filenamePrefix = "test.";
69 MockContentResolver mockContentResolver = new MockContentResolver();
70 RenamingDelegatingContext targetContextWrapper = new RenamingDelegatingContext(
71 new MockContext(), // The context that most methods are delegated to
72 targetContext, // The context that file methods are delegated to
73 filenamePrefix);
74 Context context = new IsolatedContext(
75 mockContentResolver, targetContextWrapper);
76 DatabaseUtils.createDbFromSqlStatements(context, databaseName, databaseVersion, sql);
77
78 T provider = providerClass.newInstance();
79 provider.attachInfo(context, null);
80 MockContentResolver resolver = new MockContentResolver();
81 resolver.addProvider(authority, provider);
82
83 return resolver;
84 }
85}