diff options
author | Dongwon Kang <dwkang@google.com> | 2011-10-10 19:18:45 -0700 |
---|---|---|
committer | Dongwon Kang <dwkang@google.com> | 2011-10-10 19:34:35 -0700 |
commit | 8e2ed8d512ade2ea481b3a292556782b17a74674 (patch) | |
tree | 07434a2f882aab55bdf1f0249f789a4761ec1bf2 /media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit | |
parent | 041ed0485a5fce499add436d9a117562b202254e (diff) | |
download | frameworks_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.java | 246 |
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); + } +} |