ProviderTestCase.java revision 4a51c20ce607c74914f90fd897f04080121ac13b
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.test;
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ContentProvider;
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ContentResolver;
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context;
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.mock.MockContext;
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.mock.MockContentResolver;
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.database.DatabaseUtils;
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If you would like to test a single content provider with an
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link InstrumentationTestCase}, this provides some of the boiler plate in {@link #setUp} and
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #tearDown}.
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @deprecated this class extends InstrumentationTestCase but should extend AndroidTestCase. Use
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ProviderTestCase2, which corrects this problem, instead.
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
184a51c20ce607c74914f90fd897f04080121ac13bDianne Hackborn@Deprecated
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic abstract class ProviderTestCase<T extends ContentProvider>
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project       extends InstrumentationTestCase {
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Class<T> mProviderClass;
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    String mProviderAuthority;
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private IsolatedContext mProviderContext;
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private MockContentResolver mResolver;
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public ProviderTestCase(Class<T> providerClass, String providerAuthority) {
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mProviderClass = providerClass;
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mProviderAuthority = providerAuthority;
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The content provider that will be set up for use in each test method.
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private T mProvider;
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public T getProvider() {
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mProvider;
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    protected void setUp() throws Exception {
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        super.setUp();
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mResolver = new MockContentResolver();
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final String filenamePrefix = "test.";
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RenamingDelegatingContext targetContextWrapper = new RenamingDelegatingContext(
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                new MockContext(), // The context that most methods are delegated to
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                getInstrumentation().getTargetContext(), // The context that file methods are delegated to
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                filenamePrefix);
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mProviderContext = new IsolatedContext(mResolver, targetContextWrapper);
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mProvider = mProviderClass.newInstance();
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mProvider.attachInfo(mProviderContext, null);
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertNotNull(mProvider);
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mResolver.addProvider(mProviderAuthority, getProvider());
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public MockContentResolver getMockContentResolver() {
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mResolver;
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public IsolatedContext getMockContext() {
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mProviderContext;
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static <T extends ContentProvider> ContentResolver newResolverWithContentProviderFromSql(
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Context targetContext, Class<T> providerClass, String authority,
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String databaseName, int databaseVersion, String sql)
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            throws IllegalAccessException, InstantiationException {
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final String filenamePrefix = "test.";
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        MockContentResolver resolver = new MockContentResolver();
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RenamingDelegatingContext targetContextWrapper = new RenamingDelegatingContext(
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                new MockContext(), // The context that most methods are delegated to
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                targetContext, // The context that file methods are delegated to
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                filenamePrefix);
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Context context = new IsolatedContext(
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                resolver, targetContextWrapper);
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        DatabaseUtils.createDbFromSqlStatements(context, databaseName, databaseVersion, sql);
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        T provider = providerClass.newInstance();
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        provider.attachInfo(context, null);
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        resolver.addProvider(authority, provider);
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return resolver;
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
89