110362ab9d67d87c0c3217e804e64d3e7038211dfKenny Root/*
210362ab9d67d87c0c3217e804e64d3e7038211dfKenny Root * Copyright (C) 2007 The Android Open Source Project
310362ab9d67d87c0c3217e804e64d3e7038211dfKenny Root *
410362ab9d67d87c0c3217e804e64d3e7038211dfKenny Root * Licensed under the Apache License, Version 2.0 (the "License");
510362ab9d67d87c0c3217e804e64d3e7038211dfKenny Root * you may not use this file except in compliance with the License.
610362ab9d67d87c0c3217e804e64d3e7038211dfKenny Root * You may obtain a copy of the License at
710362ab9d67d87c0c3217e804e64d3e7038211dfKenny Root *
810362ab9d67d87c0c3217e804e64d3e7038211dfKenny Root *      http://www.apache.org/licenses/LICENSE-2.0
910362ab9d67d87c0c3217e804e64d3e7038211dfKenny Root *
1010362ab9d67d87c0c3217e804e64d3e7038211dfKenny Root * Unless required by applicable law or agreed to in writing, software
1110362ab9d67d87c0c3217e804e64d3e7038211dfKenny Root * distributed under the License is distributed on an "AS IS" BASIS,
1210362ab9d67d87c0c3217e804e64d3e7038211dfKenny Root * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1310362ab9d67d87c0c3217e804e64d3e7038211dfKenny Root * See the License for the specific language governing permissions and
1410362ab9d67d87c0c3217e804e64d3e7038211dfKenny Root * limitations under the License.
1510362ab9d67d87c0c3217e804e64d3e7038211dfKenny Root */
1610362ab9d67d87c0c3217e804e64d3e7038211dfKenny Root
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.test;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ContentProvider;
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ContentResolver;
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context;
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.mock.MockContext;
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.mock.MockContentResolver;
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.database.DatabaseUtils;
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If you would like to test a single content provider with an
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link InstrumentationTestCase}, this provides some of the boiler plate in {@link #setUp} and
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #tearDown}.
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @deprecated this class extends InstrumentationTestCase but should extend AndroidTestCase. Use
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ProviderTestCase2, which corrects this problem, instead.
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
344a51c20ce607c74914f90fd897f04080121ac13bDianne Hackborn@Deprecated
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic abstract class ProviderTestCase<T extends ContentProvider>
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project       extends InstrumentationTestCase {
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Class<T> mProviderClass;
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    String mProviderAuthority;
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private IsolatedContext mProviderContext;
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private MockContentResolver mResolver;
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public ProviderTestCase(Class<T> providerClass, String providerAuthority) {
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mProviderClass = providerClass;
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mProviderAuthority = providerAuthority;
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The content provider that will be set up for use in each test method.
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private T mProvider;
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public T getProvider() {
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mProvider;
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    protected void setUp() throws Exception {
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        super.setUp();
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mResolver = new MockContentResolver();
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final String filenamePrefix = "test.";
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RenamingDelegatingContext targetContextWrapper = new RenamingDelegatingContext(
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                new MockContext(), // The context that most methods are delegated to
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                getInstrumentation().getTargetContext(), // The context that file methods are delegated to
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                filenamePrefix);
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mProviderContext = new IsolatedContext(mResolver, targetContextWrapper);
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
709189c4c2f05bc3f044f8a9c78339d0bfedb3dd8bAkos Ludanyi        mProvider = ProviderTestCase2.createProviderForTest(
719189c4c2f05bc3f044f8a9c78339d0bfedb3dd8bAkos Ludanyi                mProviderContext, mProviderClass, mProviderAuthority);
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mResolver.addProvider(mProviderAuthority, getProvider());
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
750c9e14aa4aa1370e01872dc05238f822f2dd552cVasu Nori    /**
760c9e14aa4aa1370e01872dc05238f822f2dd552cVasu Nori     * Tears down the environment for the test fixture.
770c9e14aa4aa1370e01872dc05238f822f2dd552cVasu Nori     * <p>
780c9e14aa4aa1370e01872dc05238f822f2dd552cVasu Nori     * Calls {@link android.content.ContentProvider#shutdown()} on the
79b6d1437f32d92369da208f6201df7bcdb5d17763Vasu Nori     * {@link android.content.ContentProvider} represented by mProvider.
800c9e14aa4aa1370e01872dc05238f822f2dd552cVasu Nori     */
810c9e14aa4aa1370e01872dc05238f822f2dd552cVasu Nori    @Override
820c9e14aa4aa1370e01872dc05238f822f2dd552cVasu Nori    protected void tearDown() throws Exception {
830c9e14aa4aa1370e01872dc05238f822f2dd552cVasu Nori        mProvider.shutdown();
840c9e14aa4aa1370e01872dc05238f822f2dd552cVasu Nori        super.tearDown();
850c9e14aa4aa1370e01872dc05238f822f2dd552cVasu Nori    }
860c9e14aa4aa1370e01872dc05238f822f2dd552cVasu Nori
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public MockContentResolver getMockContentResolver() {
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mResolver;
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public IsolatedContext getMockContext() {
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mProviderContext;
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static <T extends ContentProvider> ContentResolver newResolverWithContentProviderFromSql(
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Context targetContext, Class<T> providerClass, String authority,
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String databaseName, int databaseVersion, String sql)
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            throws IllegalAccessException, InstantiationException {
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final String filenamePrefix = "test.";
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        MockContentResolver resolver = new MockContentResolver();
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        RenamingDelegatingContext targetContextWrapper = new RenamingDelegatingContext(
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                new MockContext(), // The context that most methods are delegated to
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                targetContext, // The context that file methods are delegated to
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                filenamePrefix);
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Context context = new IsolatedContext(
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                resolver, targetContextWrapper);
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        DatabaseUtils.createDbFromSqlStatements(context, databaseName, databaseVersion, sql);
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1099189c4c2f05bc3f044f8a9c78339d0bfedb3dd8bAkos Ludanyi        T provider = ProviderTestCase2.createProviderForTest(context, providerClass, authority);
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        resolver.addProvider(authority, provider);
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return resolver;
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
115