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