blob: ac17ebf47923b87c921e860b7ed1e54b5ca966f0 [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/**
Dianne Hackborn935ae462009-04-13 16:11:55 -070011 * This TestCase class provides a framework for isolated testing of a single
12 * ContentProvider. It uses a {@link android.test.mock.MockContentResolver} to
13 * access the provider, restricts the provider to an isolated area of the
14 * filesystem (for safely creating & modifying databases & files), and injects
15 * {@link android.test.IsolatedContext} to isolate the ContentProvider from the
16 * rest of the running system.
17 *
18 * <p>This environment is created automatically by {@link #setUp} and {@link
19 * #tearDown}.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080020 */
21public abstract class ProviderTestCase2<T extends ContentProvider> extends AndroidTestCase {
22
23 Class<T> mProviderClass;
24 String mProviderAuthority;
25
26 private IsolatedContext mProviderContext;
27 private MockContentResolver mResolver;
28
29 public ProviderTestCase2(Class<T> providerClass, String providerAuthority) {
30 mProviderClass = providerClass;
31 mProviderAuthority = providerAuthority;
32 }
33
34 /**
35 * The content provider that will be set up for use in each test method.
36 */
37 private T mProvider;
38
39 public T getProvider() {
40 return mProvider;
41 }
42
43 @Override
44 protected void setUp() throws Exception {
45 super.setUp();
46
47 mResolver = new MockContentResolver();
48 final String filenamePrefix = "test.";
49 RenamingDelegatingContext targetContextWrapper = new RenamingDelegatingContext(
50 new MockContext(), // The context that most methods are delegated to
51 getContext(), // The context that file methods are delegated to
52 filenamePrefix);
53 mProviderContext = new IsolatedContext(mResolver, targetContextWrapper);
54
55 mProvider = mProviderClass.newInstance();
56 mProvider.attachInfo(mProviderContext, null);
57 assertNotNull(mProvider);
58 mResolver.addProvider(mProviderAuthority, getProvider());
59 }
60
61 public MockContentResolver getMockContentResolver() {
62 return mResolver;
63 }
64
65 public IsolatedContext getMockContext() {
66 return mProviderContext;
67 }
68
69 public static <T extends ContentProvider> ContentResolver newResolverWithContentProviderFromSql(
70 Context targetContext, String filenamePrefix, Class<T> providerClass, String authority,
71 String databaseName, int databaseVersion, String sql)
72 throws IllegalAccessException, InstantiationException {
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(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 }
Dianne Hackborn935ae462009-04-13 16:11:55 -070087}