summaryrefslogtreecommitdiffstats
path: root/tests/src/com/android/gallery3d/data/LocalDataTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'tests/src/com/android/gallery3d/data/LocalDataTest.java')
-rw-r--r--tests/src/com/android/gallery3d/data/LocalDataTest.java461
1 files changed, 0 insertions, 461 deletions
diff --git a/tests/src/com/android/gallery3d/data/LocalDataTest.java b/tests/src/com/android/gallery3d/data/LocalDataTest.java
deleted file mode 100644
index 8f6a46b8e..000000000
--- a/tests/src/com/android/gallery3d/data/LocalDataTest.java
+++ /dev/null
@@ -1,461 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.gallery3d.data;
-
-import android.content.ContentProvider;
-import android.content.ContentResolver;
-import android.database.Cursor;
-import android.database.sqlite.SQLiteDatabase;
-import android.database.sqlite.SQLiteQueryBuilder;
-import android.net.Uri;
-import android.os.Looper;
-import android.test.AndroidTestCase;
-import android.test.mock.MockContentProvider;
-import android.test.mock.MockContentResolver;
-import android.test.suitebuilder.annotation.MediumTest;
-import android.util.Log;
-
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-
-public class LocalDataTest extends AndroidTestCase {
- @SuppressWarnings("unused")
- private static final String TAG = "LocalDataTest";
- private static final long DEFAULT_TIMEOUT = 1000; // one second
-
- @MediumTest
- public void testLocalAlbum() throws Exception {
- new TestZeroImage().run();
- new TestOneImage().run();
- new TestMoreImages().run();
- new TestZeroVideo().run();
- new TestOneVideo().run();
- new TestMoreVideos().run();
- new TestDeleteOneImage().run();
- new TestDeleteOneAlbum().run();
- }
-
- abstract class TestLocalAlbumBase {
- private boolean mIsImage;
- protected GalleryAppStub mApp;
- protected LocalAlbumSet mAlbumSet;
-
- TestLocalAlbumBase(boolean isImage) {
- mIsImage = isImage;
- }
-
- public void run() throws Exception {
- SQLiteDatabase db = SQLiteDatabase.create(null);
- prepareData(db);
- mApp = newGalleryContext(db, Looper.getMainLooper());
- Path.clearAll();
- Path path = Path.fromString(
- mIsImage ? "/local/image" : "/local/video");
- mAlbumSet = new LocalAlbumSet(path, mApp);
- mAlbumSet.reload();
- verifyResult();
- }
-
- abstract void prepareData(SQLiteDatabase db);
- abstract void verifyResult() throws Exception;
- }
-
- abstract class TestLocalImageAlbum extends TestLocalAlbumBase {
- TestLocalImageAlbum() {
- super(true);
- }
- }
-
- abstract class TestLocalVideoAlbum extends TestLocalAlbumBase {
- TestLocalVideoAlbum() {
- super(false);
- }
- }
-
- class TestZeroImage extends TestLocalImageAlbum {
- @Override
- public void prepareData(SQLiteDatabase db) {
- createImageTable(db);
- }
-
- @Override
- public void verifyResult() {
- assertEquals(0, mAlbumSet.getMediaItemCount());
- assertEquals(0, mAlbumSet.getSubMediaSetCount());
- assertEquals(0, mAlbumSet.getTotalMediaItemCount());
- }
- }
-
- class TestOneImage extends TestLocalImageAlbum {
- @Override
- public void prepareData(SQLiteDatabase db) {
- createImageTable(db);
- insertImageData(db);
- }
-
- @Override
- public void verifyResult() {
- assertEquals(0, mAlbumSet.getMediaItemCount());
- assertEquals(1, mAlbumSet.getSubMediaSetCount());
- assertEquals(1, mAlbumSet.getTotalMediaItemCount());
- MediaSet sub = mAlbumSet.getSubMediaSet(0);
- assertEquals(1, sub.getMediaItemCount());
- assertEquals(0, sub.getSubMediaSetCount());
- LocalMediaItem item = (LocalMediaItem) sub.getMediaItem(0, 1).get(0);
- assertEquals(1, item.id);
- assertEquals("IMG_0072", item.caption);
- assertEquals("image/jpeg", item.mimeType);
- assertEquals(12.0, item.latitude);
- assertEquals(34.0, item.longitude);
- assertEquals(0xD000, item.dateTakenInMs);
- assertEquals(1280395646L, item.dateAddedInSec);
- assertEquals(1275934796L, item.dateModifiedInSec);
- assertEquals("/mnt/sdcard/DCIM/100CANON/IMG_0072.JPG", item.filePath);
- }
- }
-
- class TestMoreImages extends TestLocalImageAlbum {
- @Override
- public void prepareData(SQLiteDatabase db) {
- // Albums are sorted by names, and items are sorted by
- // dateTimeTaken (descending)
- createImageTable(db);
- // bucket 0xB000
- insertImageData(db, 1000, 0xB000, "second"); // id 1
- insertImageData(db, 2000, 0xB000, "second"); // id 2
- // bucket 0xB001
- insertImageData(db, 3000, 0xB001, "first"); // id 3
- }
-
- @Override
- public void verifyResult() {
- assertEquals(0, mAlbumSet.getMediaItemCount());
- assertEquals(2, mAlbumSet.getSubMediaSetCount());
- assertEquals(3, mAlbumSet.getTotalMediaItemCount());
-
- MediaSet first = mAlbumSet.getSubMediaSet(0);
- assertEquals(1, first.getMediaItemCount());
- LocalMediaItem item = (LocalMediaItem) first.getMediaItem(0, 1).get(0);
- assertEquals(3, item.id);
- assertEquals(3000L, item.dateTakenInMs);
-
- MediaSet second = mAlbumSet.getSubMediaSet(1);
- assertEquals(2, second.getMediaItemCount());
- item = (LocalMediaItem) second.getMediaItem(0, 1).get(0);
- assertEquals(2, item.id);
- assertEquals(2000L, item.dateTakenInMs);
- item = (LocalMediaItem) second.getMediaItem(1, 1).get(0);
- assertEquals(1, item.id);
- assertEquals(1000L, item.dateTakenInMs);
- }
- }
-
- class OnContentDirtyLatch implements ContentListener {
- private CountDownLatch mLatch = new CountDownLatch(1);
-
- public void onContentDirty() {
- mLatch.countDown();
- }
-
- public boolean isOnContentDirtyBeCalled(long timeout)
- throws InterruptedException {
- return mLatch.await(timeout, TimeUnit.MILLISECONDS);
- }
- }
-
- class TestDeleteOneAlbum extends TestLocalImageAlbum {
- @Override
- public void prepareData(SQLiteDatabase db) {
- // Albums are sorted by names, and items are sorted by
- // dateTimeTaken (descending)
- createImageTable(db);
- // bucket 0xB000
- insertImageData(db, 1000, 0xB000, "second"); // id 1
- insertImageData(db, 2000, 0xB000, "second"); // id 2
- // bucket 0xB001
- insertImageData(db, 3000, 0xB001, "first"); // id 3
- }
-
- @Override
- public void verifyResult() throws Exception {
- MediaSet sub = mAlbumSet.getSubMediaSet(1); // "second"
- assertEquals(2, mAlbumSet.getSubMediaSetCount());
- OnContentDirtyLatch latch = new OnContentDirtyLatch();
- sub.addContentListener(latch);
- assertTrue((sub.getSupportedOperations() & MediaSet.SUPPORT_DELETE) != 0);
- sub.delete();
- mAlbumSet.fakeChange();
- latch.isOnContentDirtyBeCalled(DEFAULT_TIMEOUT);
- mAlbumSet.reload();
- assertEquals(1, mAlbumSet.getSubMediaSetCount());
- }
- }
-
- class TestDeleteOneImage extends TestLocalImageAlbum {
-
- @Override
- public void prepareData(SQLiteDatabase db) {
- createImageTable(db);
- insertImageData(db);
- }
-
- @Override
- public void verifyResult() {
- MediaSet sub = mAlbumSet.getSubMediaSet(0);
- LocalMediaItem item = (LocalMediaItem) sub.getMediaItem(0, 1).get(0);
- assertEquals(1, sub.getMediaItemCount());
- assertTrue((sub.getSupportedOperations() & MediaSet.SUPPORT_DELETE) != 0);
- sub.delete();
- sub.reload();
- assertEquals(0, sub.getMediaItemCount());
- }
- }
-
- static void createImageTable(SQLiteDatabase db) {
- // This is copied from MediaProvider
- db.execSQL("CREATE TABLE IF NOT EXISTS images (" +
- "_id INTEGER PRIMARY KEY," +
- "_data TEXT," +
- "_size INTEGER," +
- "_display_name TEXT," +
- "mime_type TEXT," +
- "title TEXT," +
- "date_added INTEGER," +
- "date_modified INTEGER," +
- "description TEXT," +
- "picasa_id TEXT," +
- "isprivate INTEGER," +
- "latitude DOUBLE," +
- "longitude DOUBLE," +
- "datetaken INTEGER," +
- "orientation INTEGER," +
- "mini_thumb_magic INTEGER," +
- "bucket_id TEXT," +
- "bucket_display_name TEXT" +
- ");");
- }
-
- static void insertImageData(SQLiteDatabase db) {
- insertImageData(db, 0xD000, 0xB000, "name");
- }
-
- static void insertImageData(SQLiteDatabase db, long dateTaken,
- int bucketId, String bucketName) {
- db.execSQL("INSERT INTO images (title, mime_type, latitude, longitude, "
- + "datetaken, date_added, date_modified, bucket_id, "
- + "bucket_display_name, _data, orientation) "
- + "VALUES ('IMG_0072', 'image/jpeg', 12, 34, "
- + dateTaken + ", 1280395646, 1275934796, '" + bucketId + "', "
- + "'" + bucketName + "', "
- + "'/mnt/sdcard/DCIM/100CANON/IMG_0072.JPG', 0)");
- }
-
- class TestZeroVideo extends TestLocalVideoAlbum {
- @Override
- public void prepareData(SQLiteDatabase db) {
- createVideoTable(db);
- }
-
- @Override
- public void verifyResult() {
- assertEquals(0, mAlbumSet.getMediaItemCount());
- assertEquals(0, mAlbumSet.getSubMediaSetCount());
- assertEquals(0, mAlbumSet.getTotalMediaItemCount());
- }
- }
-
- class TestOneVideo extends TestLocalVideoAlbum {
- @Override
- public void prepareData(SQLiteDatabase db) {
- createVideoTable(db);
- insertVideoData(db);
- }
-
- @Override
- public void verifyResult() {
- assertEquals(0, mAlbumSet.getMediaItemCount());
- assertEquals(1, mAlbumSet.getSubMediaSetCount());
- assertEquals(1, mAlbumSet.getTotalMediaItemCount());
- MediaSet sub = mAlbumSet.getSubMediaSet(0);
- assertEquals(1, sub.getMediaItemCount());
- assertEquals(0, sub.getSubMediaSetCount());
- LocalMediaItem item = (LocalMediaItem) sub.getMediaItem(0, 1).get(0);
- assertEquals(1, item.id);
- assertEquals("VID_20100811_051413", item.caption);
- assertEquals("video/mp4", item.mimeType);
- assertEquals(11.0, item.latitude);
- assertEquals(22.0, item.longitude);
- assertEquals(0xD000, item.dateTakenInMs);
- assertEquals(1281503663L, item.dateAddedInSec);
- assertEquals(1281503662L, item.dateModifiedInSec);
- assertEquals("/mnt/sdcard/DCIM/Camera/VID_20100811_051413.3gp",
- item.filePath);
- }
- }
-
- class TestMoreVideos extends TestLocalVideoAlbum {
- @Override
- public void prepareData(SQLiteDatabase db) {
- // Albums are sorted by names, and items are sorted by
- // dateTimeTaken (descending)
- createVideoTable(db);
- // bucket 0xB002
- insertVideoData(db, 1000, 0xB000, "second"); // id 1
- insertVideoData(db, 2000, 0xB000, "second"); // id 2
- // bucket 0xB001
- insertVideoData(db, 3000, 0xB001, "first"); // id 3
- }
-
- @Override
- public void verifyResult() {
- assertEquals(0, mAlbumSet.getMediaItemCount());
- assertEquals(2, mAlbumSet.getSubMediaSetCount());
- assertEquals(3, mAlbumSet.getTotalMediaItemCount());
-
- MediaSet first = mAlbumSet.getSubMediaSet(0);
- assertEquals(1, first.getMediaItemCount());
- LocalMediaItem item = (LocalMediaItem) first.getMediaItem(0, 1).get(0);
- assertEquals(3, item.id);
- assertEquals(3000L, item.dateTakenInMs);
-
- MediaSet second = mAlbumSet.getSubMediaSet(1);
- assertEquals(2, second.getMediaItemCount());
- item = (LocalMediaItem) second.getMediaItem(0, 1).get(0);
- assertEquals(2, item.id);
- assertEquals(2000L, item.dateTakenInMs);
- item = (LocalMediaItem) second.getMediaItem(1, 1).get(0);
- assertEquals(1, item.id);
- assertEquals(1000L, item.dateTakenInMs);
- }
- }
-
- static void createVideoTable(SQLiteDatabase db) {
- db.execSQL("CREATE TABLE IF NOT EXISTS video (" +
- "_id INTEGER PRIMARY KEY," +
- "_data TEXT NOT NULL," +
- "_display_name TEXT," +
- "_size INTEGER," +
- "mime_type TEXT," +
- "date_added INTEGER," +
- "date_modified INTEGER," +
- "title TEXT," +
- "duration INTEGER," +
- "artist TEXT," +
- "album TEXT," +
- "resolution TEXT," +
- "description TEXT," +
- "isprivate INTEGER," + // for YouTube videos
- "tags TEXT," + // for YouTube videos
- "category TEXT," + // for YouTube videos
- "language TEXT," + // for YouTube videos
- "mini_thumb_data TEXT," +
- "latitude DOUBLE," +
- "longitude DOUBLE," +
- "datetaken INTEGER," +
- "mini_thumb_magic INTEGER" +
- ");");
- db.execSQL("ALTER TABLE video ADD COLUMN bucket_id TEXT;");
- db.execSQL("ALTER TABLE video ADD COLUMN bucket_display_name TEXT");
- }
-
- static void insertVideoData(SQLiteDatabase db) {
- insertVideoData(db, 0xD000, 0xB000, "name");
- }
-
- static void insertVideoData(SQLiteDatabase db, long dateTaken,
- int bucketId, String bucketName) {
- db.execSQL("INSERT INTO video (title, mime_type, latitude, longitude, "
- + "datetaken, date_added, date_modified, bucket_id, "
- + "bucket_display_name, _data, duration) "
- + "VALUES ('VID_20100811_051413', 'video/mp4', 11, 22, "
- + dateTaken + ", 1281503663, 1281503662, '" + bucketId + "', "
- + "'" + bucketName + "', "
- + "'/mnt/sdcard/DCIM/Camera/VID_20100811_051413.3gp', 2964)");
- }
-
- static GalleryAppStub newGalleryContext(SQLiteDatabase db, Looper mainLooper) {
- MockContentResolver cr = new MockContentResolver();
- ContentProvider cp = new DbContentProvider(db, cr);
- cr.addProvider("media", cp);
- return new GalleryAppMock(null, cr, mainLooper);
- }
-}
-
-class DbContentProvider extends MockContentProvider {
- private static final String TAG = "DbContentProvider";
- private SQLiteDatabase mDatabase;
- private ContentResolver mContentResolver;
-
- DbContentProvider(SQLiteDatabase db, ContentResolver cr) {
- mDatabase = db;
- mContentResolver = cr;
- }
-
- @Override
- public Cursor query(Uri uri, String[] projection,
- String selection, String[] selectionArgs, String sortOrder) {
- // This is a simplified version extracted from MediaProvider.
-
- String tableName = getTableName(uri);
- if (tableName == null) return null;
-
- SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
- qb.setTables(tableName);
-
- String groupBy = null;
- String limit = uri.getQueryParameter("limit");
-
- if (uri.getQueryParameter("distinct") != null) {
- qb.setDistinct(true);
- }
-
- Log.v(TAG, "query = " + qb.buildQuery(projection, selection,
- selectionArgs, groupBy, null, sortOrder, limit));
-
- if (selectionArgs != null) {
- for (String s : selectionArgs) {
- Log.v(TAG, " selectionArgs = " + s);
- }
- }
-
- Cursor c = qb.query(mDatabase, projection, selection,
- selectionArgs, groupBy, null, sortOrder, limit);
-
- return c;
- }
-
- @Override
- public int delete(Uri uri, String whereClause, String[] whereArgs) {
- Log.v(TAG, "delete " + uri + "," + whereClause + "," + whereArgs[0]);
- String tableName = getTableName(uri);
- if (tableName == null) return 0;
- int count = mDatabase.delete(tableName, whereClause, whereArgs);
- mContentResolver.notifyChange(uri, null);
- return count;
- }
-
- private String getTableName(Uri uri) {
- String uriString = uri.toString();
- if (uriString.startsWith("content://media/external/images/media")) {
- return "images";
- } else if (uriString.startsWith("content://media/external/video/media")) {
- return "video";
- } else {
- return null;
- }
- }
-}