summaryrefslogtreecommitdiffstats
path: root/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit
diff options
context:
space:
mode:
authorDongwon Kang <dwkang@google.com>2011-10-10 19:18:45 -0700
committerDongwon Kang <dwkang@google.com>2011-10-10 19:34:35 -0700
commit8e2ed8d512ade2ea481b3a292556782b17a74674 (patch)
tree07434a2f882aab55bdf1f0249f789a4761ec1bf2 /media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit
parent041ed0485a5fce499add436d9a117562b202254e (diff)
downloadframeworks_base-8e2ed8d512ade2ea481b3a292556782b17a74674.zip
frameworks_base-8e2ed8d512ade2ea481b3a292556782b17a74674.tar.gz
frameworks_base-8e2ed8d512ade2ea481b3a292556782b17a74674.tar.bz2
Refactor FileInserter in MediaScanner and adding unit tests for the newly added class.
Change-Id: Ia0e8c95239916fd4c21cb5bf10ac94201e6eb6f1
Diffstat (limited to 'media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit')
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaInserterTest.java246
1 files changed, 246 insertions, 0 deletions
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaInserterTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaInserterTest.java
new file mode 100644
index 0000000..ad3c342
--- /dev/null
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaInserterTest.java
@@ -0,0 +1,246 @@
+/*
+ * Copyright (C) 2011 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.mediaframeworktest.unit;
+
+import android.content.ContentValues;
+import android.content.IContentProvider;
+import android.media.MediaInserter;
+import android.net.Uri;
+import android.provider.MediaStore.Audio;
+import android.provider.MediaStore.Files;
+import android.provider.MediaStore.Images;
+import android.provider.MediaStore.Video;
+import android.test.InstrumentationTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import dalvik.annotation.TestTargetClass;
+
+import org.easymock.EasyMock;
+import org.easymock.IArgumentMatcher;
+
+@TestTargetClass(MediaInserter.class)
+public class MediaInserterTest extends InstrumentationTestCase {
+
+ private MediaInserter mMediaInserter;
+ private static final int TEST_BUFFER_SIZE = 10;
+ private IContentProvider mMockProvider;
+
+ private int mFilesCounter;
+ private int mAudioCounter;
+ private int mVideoCounter;
+ private int mImagesCounter;
+
+ private static final String sVolumeName = "external";
+ private static final Uri sAudioUri = Audio.Media.getContentUri(sVolumeName);
+ private static final Uri sVideoUri = Video.Media.getContentUri(sVolumeName);
+ private static final Uri sImagesUri = Images.Media.getContentUri(sVolumeName);
+ private static final Uri sFilesUri = Files.getContentUri(sVolumeName);
+
+ private static class MediaUriMatcher implements IArgumentMatcher {
+ private Uri mUri;
+
+ private MediaUriMatcher(Uri uri) {
+ mUri = uri;
+ }
+
+ @Override
+ public boolean matches(Object argument) {
+ if (!(argument instanceof Uri)) {
+ return false;
+ }
+
+ Uri actualUri = (Uri) argument;
+ if (actualUri == mUri) return true;
+ return false;
+ }
+
+ @Override
+ public void appendTo(StringBuffer buffer) {
+ buffer.append("expected a TableUri '").append(mUri).append("'");
+ }
+
+ private static Uri expectMediaUri(Uri in) {
+ EasyMock.reportMatcher(new MediaUriMatcher(in));
+ return null;
+ }
+ }
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ mMockProvider = EasyMock.createMock(IContentProvider.class);
+ mMediaInserter = new MediaInserter(mMockProvider, TEST_BUFFER_SIZE);
+ mFilesCounter = 0;
+ mAudioCounter = 0;
+ mVideoCounter = 0;
+ mImagesCounter = 0;
+ }
+
+ private ContentValues createFileContent() {
+ ContentValues values = new ContentValues();
+ values.put("_data", "/mnt/sdcard/file" + ++mFilesCounter);
+ return values;
+ }
+
+ private ContentValues createAudioContent() {
+ ContentValues values = new ContentValues();
+ values.put("_data", "/mnt/sdcard/audio" + ++mAudioCounter);
+ return values;
+ }
+
+ private ContentValues createVideoContent() {
+ ContentValues values = new ContentValues();
+ values.put("_data", "/mnt/sdcard/video" + ++mVideoCounter);
+ return values;
+ }
+
+ private ContentValues createImageContent() {
+ ContentValues values = new ContentValues();
+ values.put("_data", "/mnt/sdcard/image" + ++mImagesCounter);
+ return values;
+ }
+
+ private ContentValues createContent(Uri uri) {
+ if (uri == sFilesUri) return createFileContent();
+ else if (uri == sAudioUri) return createAudioContent();
+ else if (uri == sVideoUri) return createVideoContent();
+ else if (uri == sImagesUri) return createImageContent();
+ else throw new IllegalArgumentException("Unknown URL: " + uri.toString());
+ }
+
+ private void fillBuffer(Uri uri, int numberOfFiles) throws Exception {
+ ContentValues values;
+ for (int i = 0; i < numberOfFiles; ++i) {
+ values = createContent(uri);
+ mMediaInserter.insert(uri, values);
+ }
+ }
+
+ @SmallTest
+ public void testInsertContentsLessThanBufferSize() throws Exception {
+ EasyMock.replay(mMockProvider);
+
+ fillBuffer(sFilesUri, TEST_BUFFER_SIZE - 4);
+ fillBuffer(sAudioUri, TEST_BUFFER_SIZE - 3);
+ fillBuffer(sVideoUri, TEST_BUFFER_SIZE - 2);
+ fillBuffer(sImagesUri, TEST_BUFFER_SIZE - 1);
+
+ EasyMock.verify(mMockProvider);
+ }
+
+ @SmallTest
+ public void testInsertContentsEqualToBufferSize() throws Exception {
+ EasyMock.expect(mMockProvider.bulkInsert(
+ (Uri) EasyMock.anyObject(), (ContentValues[]) EasyMock.anyObject())).andReturn(1);
+ EasyMock.expectLastCall().times(4);
+ EasyMock.replay(mMockProvider);
+
+ fillBuffer(sFilesUri, TEST_BUFFER_SIZE);
+ fillBuffer(sAudioUri, TEST_BUFFER_SIZE);
+ fillBuffer(sVideoUri, TEST_BUFFER_SIZE);
+ fillBuffer(sImagesUri, TEST_BUFFER_SIZE);
+
+ EasyMock.verify(mMockProvider);
+ }
+
+ @SmallTest
+ public void testInsertContentsMoreThanBufferSize() throws Exception {
+ EasyMock.expect(mMockProvider.bulkInsert(
+ (Uri) EasyMock.anyObject(), (ContentValues[]) EasyMock.anyObject())).andReturn(1);
+ EasyMock.expectLastCall().times(4);
+ EasyMock.replay(mMockProvider);
+
+ fillBuffer(sFilesUri, TEST_BUFFER_SIZE + 1);
+ fillBuffer(sAudioUri, TEST_BUFFER_SIZE + 2);
+ fillBuffer(sVideoUri, TEST_BUFFER_SIZE + 3);
+ fillBuffer(sImagesUri, TEST_BUFFER_SIZE + 4);
+
+ EasyMock.verify(mMockProvider);
+ }
+
+ @SmallTest
+ public void testFlushAllWithEmptyContents() throws Exception {
+ EasyMock.replay(mMockProvider);
+
+ mMediaInserter.flushAll();
+
+ EasyMock.verify(mMockProvider);
+ }
+
+ @SmallTest
+ public void testFlushAllWithSomeContents() throws Exception {
+ EasyMock.expect(mMockProvider.bulkInsert(
+ (Uri) EasyMock.anyObject(), (ContentValues[]) EasyMock.anyObject())).andReturn(1);
+ EasyMock.expectLastCall().times(4);
+ EasyMock.replay(mMockProvider);
+
+ fillBuffer(sFilesUri, TEST_BUFFER_SIZE - 4);
+ fillBuffer(sAudioUri, TEST_BUFFER_SIZE - 3);
+ fillBuffer(sVideoUri, TEST_BUFFER_SIZE - 2);
+ fillBuffer(sImagesUri, TEST_BUFFER_SIZE - 1);
+ mMediaInserter.flushAll();
+
+ EasyMock.verify(mMockProvider);
+ }
+
+ @SmallTest
+ public void testInsertContentsAfterFlushAll() throws Exception {
+ EasyMock.expect(mMockProvider.bulkInsert(
+ (Uri) EasyMock.anyObject(), (ContentValues[]) EasyMock.anyObject())).andReturn(1);
+ EasyMock.expectLastCall().times(8);
+ EasyMock.replay(mMockProvider);
+
+ fillBuffer(sFilesUri, TEST_BUFFER_SIZE - 4);
+ fillBuffer(sAudioUri, TEST_BUFFER_SIZE - 3);
+ fillBuffer(sVideoUri, TEST_BUFFER_SIZE - 2);
+ fillBuffer(sImagesUri, TEST_BUFFER_SIZE - 1);
+ mMediaInserter.flushAll();
+
+ fillBuffer(sFilesUri, TEST_BUFFER_SIZE + 1);
+ fillBuffer(sAudioUri, TEST_BUFFER_SIZE + 2);
+ fillBuffer(sVideoUri, TEST_BUFFER_SIZE + 3);
+ fillBuffer(sImagesUri, TEST_BUFFER_SIZE + 4);
+
+ EasyMock.verify(mMockProvider);
+ }
+
+ @SmallTest
+ public void testInsertContentsWithDifferentSizePerContentType() throws Exception {
+ EasyMock.expect(mMockProvider.bulkInsert(MediaUriMatcher.expectMediaUri(sFilesUri),
+ (ContentValues[]) EasyMock.anyObject())).andReturn(1);
+ EasyMock.expectLastCall().times(1);
+ EasyMock.expect(mMockProvider.bulkInsert(MediaUriMatcher.expectMediaUri(sAudioUri),
+ (ContentValues[]) EasyMock.anyObject())).andReturn(1);
+ EasyMock.expectLastCall().times(2);
+ EasyMock.expect(mMockProvider.bulkInsert(MediaUriMatcher.expectMediaUri(sVideoUri),
+ (ContentValues[]) EasyMock.anyObject())).andReturn(1);
+ EasyMock.expectLastCall().times(3);
+ EasyMock.expect(mMockProvider.bulkInsert(MediaUriMatcher.expectMediaUri(sImagesUri),
+ (ContentValues[]) EasyMock.anyObject())).andReturn(1);
+ EasyMock.expectLastCall().times(4);
+ EasyMock.replay(mMockProvider);
+
+ for (int i = 0; i < TEST_BUFFER_SIZE; ++i) {
+ fillBuffer(sFilesUri, 1);
+ fillBuffer(sAudioUri, 2);
+ fillBuffer(sVideoUri, 3);
+ fillBuffer(sImagesUri, 4);
+ }
+
+ EasyMock.verify(mMockProvider);
+ }
+}