Home | History | Annotate | Download | only in functional
      1 /*
      2  * Copyright (C) 2009 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.mediaframeworktest.functional;
     18 
     19 import java.io.File;
     20 
     21 import android.content.Context;
     22 import android.content.Intent;
     23 import android.content.pm.ActivityInfo;
     24 import android.content.pm.PackageManager;
     25 import android.content.pm.ResolveInfo;
     26 import android.net.Uri;
     27 import android.test.ActivityInstrumentationTestCase2;
     28 import android.test.suitebuilder.annotation.LargeTest;
     29 import android.test.suitebuilder.annotation.MediumTest;
     30 import android.test.suitebuilder.annotation.Suppress;
     31 import android.util.Log;
     32 import com.android.mediaframeworktest.MediaFrameworkTest;
     33 
     34 /*
     35  * System tests for the handling of mime type in the media framework.
     36  *
     37  * To run this test suite:
     38      make frameworks/base/media/tests/MediaFrameworkTest
     39      make mediaframeworktest
     40 
     41      adb install -r out/target/product/dream/data/app/mediaframeworktest.apk
     42 
     43      adb shell am instrument -e class \
     44      com.android.mediaframeworktest.functional.MediaMimeTest \
     45      -w com.android.mediaframeworktest/.MediaFrameworkTestRunner
     46  *
     47  */
     48 public class MediaMimeTest extends ActivityInstrumentationTestCase2<MediaFrameworkTest> {
     49     private final String TAG = "MediaMimeTest";
     50     private Context mContext;
     51     private final String MP3_FILE = "/sdcard/media_api/music/SHORTMP3.mp3";
     52 
     53     public MediaMimeTest() {
     54         super("com.android.mediaframeworktest", MediaFrameworkTest.class);
     55     }
     56 
     57     @Override
     58     protected void setUp() throws Exception {
     59       super.setUp();
     60       mContext = getActivity();
     61       // Checks you have all the test files on your SDCARD.
     62       assertTrue(new File(MP3_FILE).exists());
     63     }
     64 
     65     @Override
     66     protected void tearDown() throws Exception {
     67         super.tearDown();
     68     }
     69 
     70     // ----------------------------------------------------------------------
     71     // AUDIO mime type resolution tests.
     72 
     73     @MediumTest
     74     // Checks the MediaPlaybackActivity handles audio/mp3.
     75     public void testCheckMediaPlaybackHandlesAudioMp3() throws Exception {
     76         assertMediaPlaybackActivityHandles("audio/mp3");
     77     }
     78 
     79     @Suppress
     80     // Checks the MediaPlaybackActivity handles audio/*.
     81     public void testCheckMediaPlaybackHandlesAudio() throws Exception {
     82         assertMediaPlaybackActivityHandles("audio/*");
     83     }
     84 
     85     // TODO: temporarily remove from medium suite because it hangs whole suite
     86     // @MediumTest
     87     // Checks the MediaPlaybackActivity handles application/itunes. Some servers
     88     // set the Content-type hadb ieader to application/iTunes (with capital T, but
     89     // the download manager downcasts it) for their MP3 podcasts. This is non
     90     // standard but we try to support it anyway.
     91     // See bug 1401491
     92     public void testCheckMediaPlaybackHandlesApplicationItunes() throws Exception {
     93         assertMediaPlaybackActivityHandles("application/itunes");
     94     }
     95 
     96     @MediumTest
     97     // Checks the activity resolver handling of mime types is case sensitive.
     98     // See bug 1710534
     99     public void testCheckActivityResolverMimeHandlingIsCaseSensitive() throws Exception {
    100         assertNoActivityHandles("AUDIO/MP3");   // <--- look uppercase
    101     }
    102 
    103     @MediumTest
    104     // Checks the activity resolver does not trims leading whitespaces when
    105     // resolving mime types. Trailing whitespaces seems to be non
    106     // significant.
    107     // See bug 1710534
    108     public void testCheckWhiteSpacesInMimeTypeHandling() throws Exception {
    109         assertNoActivityHandles(" audio/mp3");
    110         assertNoActivityHandles(" audio/mp3 ");
    111         assertMediaPlaybackActivityHandles("audio/mp3 ");
    112     }
    113 
    114     // @return a ResolveInfo instance for the mime type or null if the type is
    115     // not handled by any activity.
    116     private ResolveInfo resolveMime(String mime) {
    117         Intent viewIntent = new Intent(Intent.ACTION_VIEW);
    118         Uri uri = Uri.fromParts("file", MP3_FILE, null);
    119 
    120         viewIntent.setDataAndType(uri, mime);
    121         return mContext.getPackageManager().resolveActivity(
    122                 viewIntent, PackageManager.MATCH_DEFAULT_ONLY);
    123     }
    124 
    125     // Helper method to check the media playback activity handles the given mime type.
    126     // @param mime type to test for
    127     private void assertMediaPlaybackActivityHandles(String mime) throws Exception {
    128         ResolveInfo ri = resolveMime(mime);
    129 
    130         assertNotNull(ri);
    131     }
    132 
    133     // Helper method to check that NO activity handles the given mime type.
    134     // @param mime type to test for
    135     private void assertNoActivityHandles(String mime) throws Exception {
    136         assertNull(resolveMime(mime));
    137     }
    138 }
    139