blob: d2809c1a4beaa480df3e1750821b667f8cb8828a [file] [log] [blame]
/*
* Copyright (C) 2009 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.functional;
import java.io.File;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.net.Uri;
import android.test.ActivityInstrumentationTestCase2;
import android.test.suitebuilder.annotation.LargeTest;
import android.test.suitebuilder.annotation.MediumTest;
import android.test.suitebuilder.annotation.Suppress;
import android.util.Log;
import com.android.mediaframeworktest.MediaFrameworkTest;
/*
* System tests for the handling of mime type in the media framework.
*
* To run this test suite:
make frameworks/base/media/tests/MediaFrameworkTest
make mediaframeworktest
adb install -r out/target/product/dream/data/app/mediaframeworktest.apk
adb shell am instrument -e class \
com.android.mediaframeworktest.functional.MediaMimeTest \
-w com.android.mediaframeworktest/.MediaFrameworkTestRunner
*
*/
public class MediaMimeTest extends ActivityInstrumentationTestCase2<MediaFrameworkTest> {
private final String TAG = "MediaMimeTest";
private Context mContext;
private final String MP3_FILE = "/sdcard/media_api/music/SHORTMP3.mp3";
private final String MEDIA_PLAYBACK_NAME = "com.android.music.MediaPlaybackActivity";
public MediaMimeTest() {
super("com.android.mediaframeworktest", MediaFrameworkTest.class);
}
@Override
protected void setUp() throws Exception {
super.setUp();
mContext = getActivity();
// Checks you have all the test files on your SDCARD.
assertTrue(new File(MP3_FILE).exists());
}
@Override
protected void tearDown() throws Exception {
super.tearDown();
}
// ----------------------------------------------------------------------
// AUDIO mime type resolution tests.
@MediumTest
// Checks the MediaPlaybackActivity handles audio/mp3.
public void testCheckMediaPlaybackHandlesAudioMp3() throws Exception {
assertMediaPlaybackActivityHandles("audio/mp3");
}
@MediumTest
// Checks the MediaPlaybackActivity handles audio/*.
public void testCheckMediaPlaybackHandlesAudio() throws Exception {
assertMediaPlaybackActivityHandles("audio/*");
}
@MediumTest
// Checks the MediaPlaybackActivity handles application/itunes. Some servers
// set the Content-type header to application/iTunes (with capital T, but
// the download manager downcasts it) for their MP3 podcasts. This is non
// standard but we try to support it anyway.
// See bug 1401491
public void testCheckMediaPlaybackHandlesApplicationItunes() throws Exception {
assertMediaPlaybackActivityHandles("application/itunes");
}
@MediumTest
// Checks the activity resolver handling of mime types is case sensitive.
// See bug 1710534
public void testCheckActivityResolverMimeHandlingIsCaseSensitive() throws Exception {
assertNoActivityHandles("AUDIO/MP3"); // <--- look uppercase
}
@MediumTest
// Checks the activity resolver does not trims leading whitespaces when
// resolving mime types. Trailing whitespaces seems to be non
// significant.
// See bug 1710534
public void testCheckWhiteSpacesInMimeTypeHandling() throws Exception {
assertNoActivityHandles(" audio/mp3");
assertNoActivityHandles(" audio/mp3 ");
assertMediaPlaybackActivityHandles("audio/mp3 ");
}
// @return a ResolveInfo instance for the mime type or null if the type is
// not handled by any activity.
private ResolveInfo resolveMime(String mime) {
Intent viewIntent = new Intent(Intent.ACTION_VIEW);
Uri uri = Uri.fromParts("file", MP3_FILE, null);
viewIntent.setDataAndType(uri, mime);
return mContext.getPackageManager().resolveActivity(
viewIntent, PackageManager.MATCH_DEFAULT_ONLY);
}
// Helper method to check the media playback activity handles the given mime type.
// @param mime type to test for
private void assertMediaPlaybackActivityHandles(String mime) throws Exception {
ResolveInfo ri = resolveMime(mime);
assertNotNull(ri);
assertEquals(MEDIA_PLAYBACK_NAME, ri.activityInfo.name.toString());
}
// Helper method to check that NO activity handles the given mime type.
// @param mime type to test for
private void assertNoActivityHandles(String mime) throws Exception {
assertNull(resolveMime(mime));
}
}