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