1792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project/* 2792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 3792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * 4792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * you may not use this file except in compliance with the License. 6792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * You may obtain a copy of the License at 7792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * 8792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * 10792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * See the License for the specific language governing permissions and 14792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * limitations under the License. 15792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project */ 16792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 17792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectpackage com.android.music.tests.functional; 18792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 19792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.app.Activity; 20792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.content.*; 21792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.app.Instrumentation; 22792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.app.Instrumentation.ActivityMonitor; 23792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.content.Intent; 24792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.test.ActivityInstrumentationTestCase; 25792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.test.suitebuilder.annotation.LargeTest; 26792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.view.KeyEvent; 27792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.provider.MediaStore; 28792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.content.ContentResolver; 29792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport android.database.Cursor; 30792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 31792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport com.android.music.CreatePlaylist; 32792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport com.android.music.MusicUtils; 33792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport com.android.music.PlaylistBrowserActivity; 34792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport com.android.music.TrackBrowserActivity; 35792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 36792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport com.android.music.tests.MusicPlayerNames; 37792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectimport com.android.music.tests.functional.TestSongs; 38792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 39792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project/** 40792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * Junit / Instrumentation test case for the PlaylistBrowserActivity 41792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * This test case need to run in the landscape mode and opened keyboard 42792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 43792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project */ 44792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Projectpublic class TestPlaylist extends ActivityInstrumentationTestCase <PlaylistBrowserActivity>{ 45792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private static String TAG = "musicplayertests"; 46792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 47792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public TestPlaylist() { 48792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project super("com.android.music",PlaylistBrowserActivity.class); 49792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 50792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 51792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project @Override 52792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project protected void setUp() throws Exception { 53792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project super.setUp(); 54792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 55792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 56792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project @Override 57792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project protected void tearDown() throws Exception { 58792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project super.tearDown(); 59792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 60792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 61792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 62792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project private void clearSearchString(int length){ 63792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project Instrumentation inst = getInstrumentation(); 64792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project for (int j=0; j< length; j++) 65792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DEL); 66792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 67792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project /** 68792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * Remove playlist 69792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project */ 70792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public void deletePlaylist(String playlistname) throws Exception{ 71792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project Instrumentation inst = getInstrumentation(); 72792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project inst.sendStringSync(playlistname); 73792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project Thread.sleep(MusicPlayerNames.WAIT_SHORT_TIME); 74792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_DOWN); 75792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project inst.invokeContextMenuAction(getActivity(), MusicUtils.Defs.CHILD_MENU_BASE + 1, 0); 76792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project Thread.sleep(MusicPlayerNames.WAIT_SHORT_TIME); 77792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project clearSearchString(playlistname.length()); 78792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 79792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 80792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 81792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project /** 82792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * Start the trackBrowserActivity and add the new playlist 83792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project */ 84792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public void addNewPlaylist(String playListName) throws Exception{ 85792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project Instrumentation inst = getInstrumentation(); 86792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project Activity trackBrowserActivity; 87792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project ActivityMonitor trackBrowserMon = inst.addMonitor("com.android.music.TrackBrowserActivity", 88792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project null, false); 89792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project Intent intent = new Intent(); 90792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project intent.setAction(Intent.ACTION_PICK); 91792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project intent.setClassName("com.android.music", "com.android.music.TrackBrowserActivity"); 92792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project getActivity().startActivity(intent); 93792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project Thread.sleep(MusicPlayerNames.WAIT_LONG_TIME); 94792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project trackBrowserActivity = trackBrowserMon.waitForActivityWithTimeout(2000); 95792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project inst.invokeContextMenuAction(trackBrowserActivity, MusicUtils.Defs.NEW_PLAYLIST, 0); 96792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project Thread.sleep(MusicPlayerNames.WAIT_SHORT_TIME); 97792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project //Remove the default playlist name 98792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project clearSearchString(MusicPlayerNames.DEFAULT_PLAYLIST_LENGTH); 99792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project inst.sendStringSync(playListName); 100792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_DOWN); 101792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER); 102792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project Thread.sleep(MusicPlayerNames.WAIT_LONG_TIME); 103792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project trackBrowserActivity.finish(); 104792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project clearSearchString(playListName.length()); 105792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 106792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 107792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 108792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project /** 109792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * Rename playlist 110792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project */ 111792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public void renamePlaylist(String oldPlaylistName, String newPlaylistName) throws Exception{ 112792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project Instrumentation inst = getInstrumentation(); 113792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project inst.sendStringSync(oldPlaylistName); 114792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project Thread.sleep(MusicPlayerNames.WAIT_SHORT_TIME); 115792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_DOWN); 116792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project inst.invokeContextMenuAction(getActivity(), MusicUtils.Defs.CHILD_MENU_BASE + 3, 0); 117792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project Thread.sleep(MusicPlayerNames.WAIT_SHORT_TIME); 118792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project //Remove the old playlist name 119792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project clearSearchString(oldPlaylistName.length()); 120792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project inst.sendStringSync(newPlaylistName); 121792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_DOWN); 122792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER); 123792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project Thread.sleep(MusicPlayerNames.WAIT_LONG_TIME); 124792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project clearSearchString(oldPlaylistName.length()); 125792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 126792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 127792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public boolean verifyPlaylist(String playlistname) throws Exception{ 128792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project Cursor mCursor; 129792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project boolean isEmptyPlaylist = true; 130792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project String[] cols = new String[] { 131792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project MediaStore.Audio.Playlists.NAME 132792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project }; 133792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project ContentResolver resolver = getActivity().getContentResolver(); 134792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project if (resolver == null) { 135792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project System.out.println("resolver = null"); 136792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project assertNull(TAG, resolver); 137792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } else { 138792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project String whereclause = MediaStore.Audio.Playlists.NAME + " = '" + playlistname +"'"; 139792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project mCursor = resolver.query(MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI, 140792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project cols, whereclause, null, 141792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project MediaStore.Audio.Playlists.NAME); 142792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project isEmptyPlaylist = mCursor.moveToFirst(); 143792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 144792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project return isEmptyPlaylist; 145792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 146792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 147792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project /** 148792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * Test case 1: Add a playlist and delet the playlist just added. 149792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * Verification: The mediastore playlist should be empty 150792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project */ 151792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project @LargeTest 152792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public void testDeletePlaylist() throws Exception{ 153792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project boolean isEmptyPlaylist = true; 154792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project addNewPlaylist(MusicPlayerNames.DELETE_PLAYLIST_NAME); 155792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project deletePlaylist(MusicPlayerNames.DELETE_PLAYLIST_NAME); 156792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project isEmptyPlaylist = verifyPlaylist(MusicPlayerNames.DELETE_PLAYLIST_NAME); 157792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project assertFalse("testDeletePlaylist", isEmptyPlaylist); 158792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 159792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 160792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project /** 161792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * Test case 2: Add playlist and rename the playlist just added. 162792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project * Verification: The mediastore playlist should contain the updated name. 163792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project */ 164792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project @LargeTest 165792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project public void testRenamePlaylist() throws Exception{ 166792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project boolean isEmptyPlaylist = true; 167792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project addNewPlaylist(MusicPlayerNames.ORIGINAL_PLAYLIST_NAME); 168792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project renamePlaylist(MusicPlayerNames.ORIGINAL_PLAYLIST_NAME, MusicPlayerNames.RENAMED_PLAYLIST_NAME); 169792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project isEmptyPlaylist = verifyPlaylist(MusicPlayerNames.RENAMED_PLAYLIST_NAME); 170792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project deletePlaylist(MusicPlayerNames.RENAMED_PLAYLIST_NAME); 171792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project assertTrue("testDeletePlaylist", isEmptyPlaylist); 172792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project } 173792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project 174792a2206a4f05f6bd13fce902d3663892d2947afThe Android Open Source Project} 175