1105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project/* 2105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * Copyright (C) 2009 The Android Open Source Project 3105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * 4105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * you may not use this file except in compliance with the License. 6105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * You may obtain a copy of the License at 7105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * 8105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * 10105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * See the License for the specific language governing permissions and 14105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * limitations under the License. 15105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project */ 16105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 17105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Projectpackage com.android.mediaframeworktest.functional; 18105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 19105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Projectimport java.io.File; 20105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 21105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Projectimport android.content.Context; 22105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Projectimport android.content.Intent; 23105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Projectimport android.content.pm.ActivityInfo; 24105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Projectimport android.content.pm.PackageManager; 25105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Projectimport android.content.pm.ResolveInfo; 26105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Projectimport android.net.Uri; 27105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Projectimport android.test.ActivityInstrumentationTestCase2; 28105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Projectimport android.test.suitebuilder.annotation.LargeTest; 29105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Projectimport android.test.suitebuilder.annotation.MediumTest; 30105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Projectimport android.test.suitebuilder.annotation.Suppress; 31105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Projectimport android.util.Log; 32105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Projectimport com.android.mediaframeworktest.MediaFrameworkTest; 33105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 34105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project/* 35105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * System tests for the handling of mime type in the media framework. 36105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * 37105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * To run this test suite: 38105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project make frameworks/base/media/tests/MediaFrameworkTest 39105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project make mediaframeworktest 40105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 41105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project adb install -r out/target/product/dream/data/app/mediaframeworktest.apk 42105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 43105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project adb shell am instrument -e class \ 44105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project com.android.mediaframeworktest.functional.MediaMimeTest \ 45105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project -w com.android.mediaframeworktest/.MediaFrameworkTestRunner 46105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * 47105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project */ 48105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Projectpublic class MediaMimeTest extends ActivityInstrumentationTestCase2<MediaFrameworkTest> { 49105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project private final String TAG = "MediaMimeTest"; 50105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project private Context mContext; 51105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project private final String MP3_FILE = "/sdcard/media_api/music/SHORTMP3.mp3"; 52105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 53105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project public MediaMimeTest() { 54105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project super("com.android.mediaframeworktest", MediaFrameworkTest.class); 55105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 56105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 57105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project @Override 58105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project protected void setUp() throws Exception { 59105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project super.setUp(); 60105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mContext = getActivity(); 61105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project // Checks you have all the test files on your SDCARD. 62105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project assertTrue(new File(MP3_FILE).exists()); 63105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 64105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 65105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project @Override 66105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project protected void tearDown() throws Exception { 67105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project super.tearDown(); 68105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 69105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 70105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project // ---------------------------------------------------------------------- 71105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project // AUDIO mime type resolution tests. 72105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 73105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project @MediumTest 74105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project // Checks the MediaPlaybackActivity handles audio/mp3. 75105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project public void testCheckMediaPlaybackHandlesAudioMp3() throws Exception { 76105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project assertMediaPlaybackActivityHandles("audio/mp3"); 77105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 78105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 79806cdd82f0b5b1f720ee26ef3f20c8c1ec034f12Yu Shan Emily Lau @Suppress 80105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project // Checks the MediaPlaybackActivity handles audio/*. 81105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project public void testCheckMediaPlaybackHandlesAudio() throws Exception { 82105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project assertMediaPlaybackActivityHandles("audio/*"); 83105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 84105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 85c8c7ca7bd769df9288575b322e10ebf1fb22e4a5Brett Chabot // TODO: temporarily remove from medium suite because it hangs whole suite 86c8c7ca7bd769df9288575b322e10ebf1fb22e4a5Brett Chabot // @MediumTest 87105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project // Checks the MediaPlaybackActivity handles application/itunes. Some servers 88806cdd82f0b5b1f720ee26ef3f20c8c1ec034f12Yu Shan Emily Lau // set the Content-type hadb ieader to application/iTunes (with capital T, but 89105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project // the download manager downcasts it) for their MP3 podcasts. This is non 90105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project // standard but we try to support it anyway. 91105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project // See bug 1401491 92105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project public void testCheckMediaPlaybackHandlesApplicationItunes() throws Exception { 93105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project assertMediaPlaybackActivityHandles("application/itunes"); 94105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 95105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 96105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project @MediumTest 97105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project // Checks the activity resolver handling of mime types is case sensitive. 98105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project // See bug 1710534 99105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project public void testCheckActivityResolverMimeHandlingIsCaseSensitive() throws Exception { 100105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project assertNoActivityHandles("AUDIO/MP3"); // <--- look uppercase 101105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 102105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 103105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project @MediumTest 104105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project // Checks the activity resolver does not trims leading whitespaces when 105105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project // resolving mime types. Trailing whitespaces seems to be non 106105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project // significant. 107105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project // See bug 1710534 108105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project public void testCheckWhiteSpacesInMimeTypeHandling() throws Exception { 109105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project assertNoActivityHandles(" audio/mp3"); 110105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project assertNoActivityHandles(" audio/mp3 "); 111105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project assertMediaPlaybackActivityHandles("audio/mp3 "); 112105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 113105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 114105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project // @return a ResolveInfo instance for the mime type or null if the type is 115105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project // not handled by any activity. 116105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project private ResolveInfo resolveMime(String mime) { 117105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project Intent viewIntent = new Intent(Intent.ACTION_VIEW); 118105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project Uri uri = Uri.fromParts("file", MP3_FILE, null); 119105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 120105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project viewIntent.setDataAndType(uri, mime); 121105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project return mContext.getPackageManager().resolveActivity( 122105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project viewIntent, PackageManager.MATCH_DEFAULT_ONLY); 123105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 124105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 125105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project // Helper method to check the media playback activity handles the given mime type. 126105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project // @param mime type to test for 127105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project private void assertMediaPlaybackActivityHandles(String mime) throws Exception { 128105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project ResolveInfo ri = resolveMime(mime); 129105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 130105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project assertNotNull(ri); 131105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 132105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 133105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project // Helper method to check that NO activity handles the given mime type. 134105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project // @param mime type to test for 135105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project private void assertNoActivityHandles(String mime) throws Exception { 136105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project assertNull(resolveMime(mime)); 137105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 138105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project} 139