/cts/tests/tests/content/src/android/content/cts/ContentProviderTest.java

https://gitlab.com/brian0218/rk3288_r-box_android4.4.2_sdk · Java · 349 lines · 257 code · 65 blank · 27 comment · 1 complexity · d854fa81dadae769388e6d550d0da563 MD5 · raw file

  1. /*
  2. * Copyright (C) 2008 The Android Open Source Project
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  5. * use this file except in compliance with the License. You may obtain a copy of
  6. * 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, WITHOUT
  12. * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
  13. * License for the specific language governing permissions and limitations under
  14. * the License.
  15. */
  16. package android.content.cts;
  17. import android.content.ContentProvider;
  18. import android.content.ContentResolver;
  19. import android.content.ContentValues;
  20. import android.content.Context;
  21. import android.content.pm.ProviderInfo;
  22. import android.database.Cursor;
  23. import android.database.sqlite.SQLiteDatabase;
  24. import android.net.Uri;
  25. import android.os.ParcelFileDescriptor;
  26. import android.test.AndroidTestCase;
  27. import com.android.cts.stub.R;
  28. import java.io.File;
  29. import java.io.FileNotFoundException;
  30. import java.io.IOException;
  31. /**
  32. * Test {@link ContentProvider}.
  33. */
  34. public class ContentProviderTest extends AndroidTestCase {
  35. private static final String TEST_PACKAGE_NAME = "com.android.cts.stub";
  36. private static final String TEST_FILE_NAME = "testFile.tmp";
  37. private static final String TEST_DB_NAME = "test.db";
  38. @Override
  39. protected void tearDown() throws Exception {
  40. mContext.deleteDatabase(TEST_DB_NAME);
  41. mContext.deleteFile(TEST_FILE_NAME);
  42. super.tearDown();
  43. }
  44. public void testOpenAssetFile() throws IOException {
  45. MockContentProvider mockContentProvider = new MockContentProvider();
  46. Uri uri = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE +
  47. "://" + TEST_PACKAGE_NAME + "/" + R.raw.testimage);
  48. try {
  49. mockContentProvider.openAssetFile(uri, "r");
  50. fail("Should always throw out FileNotFoundException!");
  51. } catch (FileNotFoundException e) {
  52. }
  53. try {
  54. mockContentProvider.openFile(null, null);
  55. fail("Should always throw out FileNotFoundException!");
  56. } catch (FileNotFoundException e) {
  57. }
  58. }
  59. public void testAttachInfo() {
  60. MockContentProvider mockContentProvider = new MockContentProvider();
  61. ProviderInfo info1 = new ProviderInfo();
  62. info1.readPermission = "android.permission.READ_SMS";
  63. info1.writePermission = "android.permission.WRITE_SMS";
  64. mockContentProvider.attachInfo(getContext(), info1);
  65. assertSame(getContext(), mockContentProvider.getContext());
  66. assertEquals(info1.readPermission, mockContentProvider.getReadPermission());
  67. assertEquals(info1.writePermission, mockContentProvider.getWritePermission());
  68. ProviderInfo info2 = new ProviderInfo();
  69. info2.readPermission = "android.permission.READ_CONTACTS";
  70. info2.writePermission = "android.permission.WRITE_CONTACTS";
  71. mockContentProvider.attachInfo(null, info2);
  72. assertSame(getContext(), mockContentProvider.getContext());
  73. assertEquals(info1.readPermission, mockContentProvider.getReadPermission());
  74. assertEquals(info1.writePermission, mockContentProvider.getWritePermission());
  75. mockContentProvider = new MockContentProvider();
  76. mockContentProvider.attachInfo(null, null);
  77. assertNull(mockContentProvider.getContext());
  78. assertNull(mockContentProvider.getReadPermission());
  79. assertNull(mockContentProvider.getWritePermission());
  80. mockContentProvider.attachInfo(null, info2);
  81. assertNull(mockContentProvider.getContext());
  82. assertEquals(info2.readPermission, mockContentProvider.getReadPermission());
  83. assertEquals(info2.writePermission, mockContentProvider.getWritePermission());
  84. mockContentProvider.attachInfo(getContext(), info1);
  85. assertSame(getContext(), mockContentProvider.getContext());
  86. assertEquals(info1.readPermission, mockContentProvider.getReadPermission());
  87. assertEquals(info1.writePermission, mockContentProvider.getWritePermission());
  88. }
  89. public void testBulkInsert() {
  90. MockContentProvider mockContentProvider = new MockContentProvider();
  91. int count = 2;
  92. ContentValues[] values = new ContentValues[count];
  93. for (int i = 0; i < count; i++) {
  94. values[i] = new ContentValues();
  95. }
  96. Uri uri = Uri.parse("content://browser/bookmarks");
  97. assertEquals(count, mockContentProvider.bulkInsert(uri, values));
  98. assertEquals(count, mockContentProvider.getInsertCount());
  99. mockContentProvider = new MockContentProvider();
  100. try {
  101. assertEquals(count, mockContentProvider.bulkInsert(null, values));
  102. } finally {
  103. assertEquals(count, mockContentProvider.getInsertCount());
  104. }
  105. }
  106. public void testGetContext() {
  107. MockContentProvider mockContentProvider = new MockContentProvider();
  108. assertNull(mockContentProvider.getContext());
  109. mockContentProvider.attachInfo(getContext(), null);
  110. assertSame(getContext(), mockContentProvider.getContext());
  111. mockContentProvider.attachInfo(null, null);
  112. assertSame(getContext(), mockContentProvider.getContext());
  113. }
  114. public void testAccessReadPermission() {
  115. MockContentProvider mockContentProvider = new MockContentProvider();
  116. assertNull(mockContentProvider.getReadPermission());
  117. String expected = "android.permission.READ_CONTACTS";
  118. mockContentProvider.setReadPermissionWrapper(expected);
  119. assertEquals(expected, mockContentProvider.getReadPermission());
  120. expected = "android.permission.READ_SMS";
  121. mockContentProvider.setReadPermissionWrapper(expected);
  122. assertEquals(expected, mockContentProvider.getReadPermission());
  123. mockContentProvider.setReadPermissionWrapper(null);
  124. assertNull(mockContentProvider.getReadPermission());
  125. }
  126. public void testAccessWritePermission() {
  127. MockContentProvider mockContentProvider = new MockContentProvider();
  128. assertNull(mockContentProvider.getWritePermission());
  129. String expected = "android.permission.WRITE_CONTACTS";
  130. mockContentProvider.setWritePermissionWrapper(expected);
  131. assertEquals(expected, mockContentProvider.getWritePermission());
  132. expected = "android.permission.WRITE_SMS";
  133. mockContentProvider.setWritePermissionWrapper(expected);
  134. assertEquals(expected, mockContentProvider.getWritePermission());
  135. mockContentProvider.setWritePermissionWrapper(null);
  136. assertNull(mockContentProvider.getWritePermission());
  137. }
  138. public void testIsTemporary() {
  139. MockContentProvider mockContentProvider = new MockContentProvider();
  140. assertFalse(mockContentProvider.isTemporary());
  141. }
  142. public void testOpenFile() {
  143. MockContentProvider mockContentProvider = new MockContentProvider();
  144. try {
  145. Uri uri = Uri.parse("content://test");
  146. mockContentProvider.openFile(uri, "r");
  147. fail("Should always throw out FileNotFoundException!");
  148. } catch (FileNotFoundException e) {
  149. }
  150. try {
  151. mockContentProvider.openFile(null, null);
  152. fail("Should always throw out FileNotFoundException!");
  153. } catch (FileNotFoundException e) {
  154. }
  155. }
  156. public void testOpenFileHelper() throws IOException {
  157. // create a temporary File
  158. mContext.openFileOutput(TEST_FILE_NAME, Context.MODE_PRIVATE).close();
  159. File file = mContext.getFileStreamPath(TEST_FILE_NAME);
  160. assertTrue(file.exists());
  161. ContentProvider cp = new OpenFileContentProvider(file.getAbsolutePath(), TEST_DB_NAME);
  162. Uri uri = Uri.parse("content://test");
  163. assertNotNull(cp.openFile(uri, "r"));
  164. try {
  165. uri = Uri.parse("content://test");
  166. cp.openFile(uri, "wrong");
  167. fail("Should throw IllegalArgumentException for bad mode!");
  168. } catch (IllegalArgumentException e) {
  169. }
  170. // delete the temporary file
  171. file.delete();
  172. try {
  173. uri = Uri.parse("content://test");
  174. cp.openFile(uri, "r");
  175. fail("Should throw FileNotFoundException!");
  176. } catch (FileNotFoundException e) {
  177. }
  178. try {
  179. cp.openFile((Uri) null, "r");
  180. fail("Should always throw FileNotFoundException!");
  181. } catch (FileNotFoundException e) {
  182. }
  183. }
  184. public void testOnConfigurationChanged() {
  185. // cannot trigger this callback reliably
  186. }
  187. public void testOnLowMemory() {
  188. // cannot trigger this callback reliably
  189. }
  190. public void testGetIContentProvider() {
  191. MockContentProvider mockContentProvider = new MockContentProvider();
  192. assertNotNull(mockContentProvider.getIContentProvider());
  193. }
  194. private class MockContentProvider extends ContentProvider {
  195. private int mInsertCount = 0;
  196. @Override
  197. public int delete(Uri uri, String selection, String[] selectionArgs) {
  198. return 0;
  199. }
  200. @Override
  201. public String getType(Uri uri) {
  202. return null;
  203. }
  204. @Override
  205. public Uri insert(Uri uri, ContentValues values) {
  206. mInsertCount++;
  207. return null;
  208. }
  209. public int getInsertCount() {
  210. return mInsertCount;
  211. }
  212. @Override
  213. public Cursor query(Uri uri, String[] projection, String selection,
  214. String[] selectionArgs, String sortOrder) {
  215. return null;
  216. }
  217. @Override
  218. public int update(Uri uri, ContentValues values, String selection,
  219. String[] selectionArgs) {
  220. return 0;
  221. }
  222. @Override
  223. public boolean onCreate() {
  224. return false;
  225. }
  226. // wrapper or override for the protected methods
  227. public void setReadPermissionWrapper(String permission) {
  228. super.setReadPermission(permission);
  229. }
  230. public void setWritePermissionWrapper(String permission) {
  231. super.setWritePermission(permission);
  232. }
  233. @Override
  234. protected boolean isTemporary() {
  235. return super.isTemporary();
  236. }
  237. public ParcelFileDescriptor openFileHelperWrapper(Uri uri, String mode)
  238. throws FileNotFoundException {
  239. return super.openFileHelper(uri, mode);
  240. }
  241. }
  242. /**
  243. * This provider implements openFile() using ContentProvider.openFileHelper().
  244. */
  245. private class OpenFileContentProvider extends ContentProvider {
  246. private SQLiteDatabase mDb;
  247. OpenFileContentProvider(String fileName, String dbName) {
  248. // delete the database if it already exists
  249. mContext.deleteDatabase(dbName);
  250. mDb = mContext.openOrCreateDatabase(dbName, Context.MODE_PRIVATE, null);
  251. mDb.execSQL("CREATE TABLE files ( _data TEXT );");
  252. mDb.execSQL("INSERT INTO files VALUES ( \"" + fileName + "\");");
  253. }
  254. @Override
  255. public int delete(Uri uri, String selection, String[] selectionArgs) {
  256. throw new RuntimeException("not implemented");
  257. }
  258. @Override
  259. public String getType(Uri uri) {
  260. throw new RuntimeException("not implemented");
  261. }
  262. @Override
  263. public Uri insert(Uri uri, ContentValues values) {
  264. throw new RuntimeException("not implemented");
  265. }
  266. @Override
  267. public boolean onCreate() {
  268. return true;
  269. }
  270. @Override
  271. public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
  272. String sortOrder) {
  273. return mDb.query("files", projection, selection, selectionArgs, null, null, null);
  274. }
  275. @Override
  276. public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
  277. throw new RuntimeException("not implemented");
  278. }
  279. @Override
  280. public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {
  281. return openFileHelper(uri, mode);
  282. }
  283. }
  284. }