MockContentProvider.java revision 23fdaf6fb62a9b5154b2508916a21c678462c5d0
1/*
2 * Copyright (C) 2009 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package android.test.mock;
18
19import android.content.ContentProvider;
20import android.content.ContentProviderOperation;
21import android.content.ContentProviderResult;
22import android.content.ContentValues;
23import android.content.Context;
24import android.content.EntityIterator;
25import android.content.IContentProvider;
26import android.content.OperationApplicationException;
27import android.content.pm.PathPermission;
28import android.content.pm.ProviderInfo;
29import android.content.res.AssetFileDescriptor;
30import android.database.Cursor;
31import android.database.CursorWindow;
32import android.database.IBulkCursor;
33import android.database.IContentObserver;
34import android.net.Uri;
35import android.os.Bundle;
36import android.os.IBinder;
37import android.os.ParcelFileDescriptor;
38import android.os.RemoteException;
39
40import java.io.FileNotFoundException;
41import java.util.ArrayList;
42
43/**
44 * Mock implementation of ContentProvider.  All methods are non-functional and throw
45 * {@link java.lang.UnsupportedOperationException}.  Tests can extend this class to
46 * implement behavior needed for tests.
47 */
48public class MockContentProvider extends ContentProvider {
49    /*
50     * Note: if you add methods to ContentProvider, you must add similar methods to
51     *       MockContentProvider.
52     */
53
54    /**
55     * IContentProvider that directs all calls to this MockContentProvider.
56     */
57    private class InversionIContentProvider implements IContentProvider {
58        @SuppressWarnings("unused")
59        public ContentProviderResult[] applyBatch(ArrayList<ContentProviderOperation> operations)
60                throws RemoteException, OperationApplicationException {
61            return MockContentProvider.this.applyBatch(operations);
62        }
63
64        @SuppressWarnings("unused")
65        public int bulkInsert(Uri url, ContentValues[] initialValues) throws RemoteException {
66            return MockContentProvider.this.bulkInsert(url, initialValues);
67        }
68
69        @SuppressWarnings("unused")
70        public IBulkCursor bulkQuery(Uri url, String[] projection, String selection,
71                String[] selectionArgs, String sortOrder, IContentObserver observer,
72                CursorWindow window) throws RemoteException {
73            throw new UnsupportedOperationException("Must not come here");
74        }
75
76        @SuppressWarnings("unused")
77        public int delete(Uri url, String selection, String[] selectionArgs)
78                throws RemoteException {
79            return MockContentProvider.this.delete(url, selection, selectionArgs);
80        }
81
82        @SuppressWarnings("unused")
83        public String getType(Uri url) throws RemoteException {
84            return MockContentProvider.this.getType(url);
85        }
86
87        @SuppressWarnings("unused")
88        public Uri insert(Uri url, ContentValues initialValues) throws RemoteException {
89            return MockContentProvider.this.insert(url, initialValues);
90        }
91
92        @SuppressWarnings("unused")
93        public AssetFileDescriptor openAssetFile(Uri url, String mode) throws RemoteException,
94                FileNotFoundException {
95            return MockContentProvider.this.openAssetFile(url, mode);
96        }
97
98        @SuppressWarnings("unused")
99        public ParcelFileDescriptor openFile(Uri url, String mode) throws RemoteException,
100                FileNotFoundException {
101            return MockContentProvider.this.openFile(url, mode);
102        }
103
104        @SuppressWarnings("unused")
105        public Cursor query(Uri url, String[] projection, String selection, String[] selectionArgs,
106                String sortOrder) throws RemoteException {
107            return MockContentProvider.this.query(url, projection, selection,
108                    selectionArgs, sortOrder);
109        }
110
111        @SuppressWarnings("unused")
112        public int update(Uri url, ContentValues values, String selection, String[] selectionArgs)
113                throws RemoteException {
114            return MockContentProvider.this.update(url, values, selection, selectionArgs);
115        }
116
117        /**
118         * @hide
119         */
120        @SuppressWarnings("unused")
121        public Bundle call(String method, String request, Bundle args)
122                throws RemoteException {
123            return MockContentProvider.this.call(method, request, args);
124        }
125
126        public IBinder asBinder() {
127            throw new UnsupportedOperationException();
128        }
129
130        @SuppressWarnings("unused")
131        public String[] getStreamTypes(Uri url, String mimeTypeFilter) throws RemoteException {
132            return MockContentProvider.this.getStreamTypes(url, mimeTypeFilter);
133        }
134
135        @SuppressWarnings("unused")
136        public AssetFileDescriptor openTypedAssetFile(Uri url, String mimeType, Bundle opts)
137                throws RemoteException, FileNotFoundException {
138            return MockContentProvider.this.openTypedAssetFile(url, mimeType, opts);
139        }
140    }
141    private final InversionIContentProvider mIContentProvider = new InversionIContentProvider();
142
143    /**
144     * A constructor using {@link MockContext} instance as a Context in it.
145     */
146    protected MockContentProvider() {
147        super(new MockContext(), "", "", null);
148    }
149
150    /**
151     * A constructor accepting a Context instance, which is supposed to be the subclasss of
152     * {@link MockContext}.
153     */
154    public MockContentProvider(Context context) {
155        super(context, "", "", null);
156    }
157
158    /**
159     * A constructor which initialize four member variables which
160     * {@link android.content.ContentProvider} have internally.
161     *
162     * @param context A Context object which should be some mock instance (like the
163     * instance of {@link android.test.mock.MockContext}).
164     * @param readPermission The read permision you want this instance should have in the
165     * test, which is available via {@link #getReadPermission()}.
166     * @param writePermission The write permission you want this instance should have
167     * in the test, which is available via {@link #getWritePermission()}.
168     * @param pathPermissions The PathPermissions you want this instance should have
169     * in the test, which is available via {@link #getPathPermissions()}.
170     */
171    public MockContentProvider(Context context,
172            String readPermission,
173            String writePermission,
174            PathPermission[] pathPermissions) {
175        super(context, readPermission, writePermission, pathPermissions);
176    }
177
178    @Override
179    public int delete(Uri uri, String selection, String[] selectionArgs) {
180        throw new UnsupportedOperationException("unimplemented mock method");
181    }
182
183    @Override
184    public String getType(Uri uri) {
185        throw new UnsupportedOperationException("unimplemented mock method");
186    }
187
188    @Override
189    public Uri insert(Uri uri, ContentValues values) {
190        throw new UnsupportedOperationException("unimplemented mock method");
191    }
192
193    @Override
194    public boolean onCreate() {
195        throw new UnsupportedOperationException("unimplemented mock method");
196    }
197
198    @Override
199    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
200            String sortOrder) {
201        throw new UnsupportedOperationException("unimplemented mock method");
202    }
203
204    @Override
205    public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
206        throw new UnsupportedOperationException("unimplemented mock method");
207    }
208
209    /**
210     * If you're reluctant to implement this manually, please just call super.bulkInsert().
211     */
212    @Override
213    public int bulkInsert(Uri uri, ContentValues[] values) {
214        throw new UnsupportedOperationException("unimplemented mock method");
215    }
216
217    @Override
218    public void attachInfo(Context context, ProviderInfo info) {
219        throw new UnsupportedOperationException("unimplemented mock method");
220    }
221
222    @Override
223    public ContentProviderResult[] applyBatch(ArrayList<ContentProviderOperation> operations) {
224        throw new UnsupportedOperationException("unimplemented mock method");
225    }
226
227    /**
228     * @hide
229     */
230    @Override
231    public Bundle call(String method, String request, Bundle args) {
232        throw new UnsupportedOperationException("unimplemented mock method call");
233    }
234
235    public String[] getStreamTypes(Uri url, String mimeTypeFilter) {
236        throw new UnsupportedOperationException("unimplemented mock method call");
237    }
238
239    public AssetFileDescriptor openTypedAssetFile(Uri url, String mimeType, Bundle opts) {
240        throw new UnsupportedOperationException("unimplemented mock method call");
241    }
242
243    /**
244     * Returns IContentProvider which calls back same methods in this class.
245     * By overriding this class, we avoid the mechanism hidden behind ContentProvider
246     * (IPC, etc.)
247     *
248     * @hide
249     */
250    @Override
251    public final IContentProvider getIContentProvider() {
252        return mIContentProvider;
253    }
254}
255