blob: 714b77b56bb67142f49a01c52aae5b368d8b1795 [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 android.test.InstrumentationTestCase}, this provides some of the boiler plate in
13 * {@link #setUp} and {@link #tearDown}.
14 * @hide pending API council approval
15 */
16public abstract class ProviderTestCase2<T extends ContentProvider> extends AndroidTestCase {
17
18 Class<T> mProviderClass;
19 String mProviderAuthority;
20
21 private IsolatedContext mProviderContext;
22 private MockContentResolver mResolver;
23
24 public ProviderTestCase2(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 getContext(), // 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, String filenamePrefix, Class<T> providerClass, String authority,
66 String databaseName, int databaseVersion, String sql)
67 throws IllegalAccessException, InstantiationException {
68 MockContentResolver resolver = new MockContentResolver();
69 RenamingDelegatingContext targetContextWrapper = new RenamingDelegatingContext(
70 new MockContext(), // The context that most methods are delegated to
71 targetContext, // The context that file methods are delegated to
72 filenamePrefix);
73 Context context = new IsolatedContext(resolver, targetContextWrapper);
74 DatabaseUtils.createDbFromSqlStatements(context, databaseName, databaseVersion, sql);
75
76 T provider = providerClass.newInstance();
77 provider.attachInfo(context, null);
78 resolver.addProvider(authority, provider);
79
80 return resolver;
81 }
82}