diff options
Diffstat (limited to 'src/instrumentationTest/de/test/antennapod/service/playback/PlaybackServiceMediaPlayerTest.java')
-rw-r--r-- | src/instrumentationTest/de/test/antennapod/service/playback/PlaybackServiceMediaPlayerTest.java | 1177 |
1 files changed, 0 insertions, 1177 deletions
diff --git a/src/instrumentationTest/de/test/antennapod/service/playback/PlaybackServiceMediaPlayerTest.java b/src/instrumentationTest/de/test/antennapod/service/playback/PlaybackServiceMediaPlayerTest.java deleted file mode 100644 index 71747dae8..000000000 --- a/src/instrumentationTest/de/test/antennapod/service/playback/PlaybackServiceMediaPlayerTest.java +++ /dev/null @@ -1,1177 +0,0 @@ -package instrumentationTest.de.test.antennapod.service.playback; - -import android.content.Context; -import android.media.RemoteControlClient; -import android.test.InstrumentationTestCase; -import de.danoeh.antennapod.feed.Feed; -import de.danoeh.antennapod.feed.FeedItem; -import de.danoeh.antennapod.feed.FeedMedia; -import de.danoeh.antennapod.service.playback.PlaybackServiceMediaPlayer; -import de.danoeh.antennapod.service.playback.PlayerStatus; -import de.danoeh.antennapod.storage.PodDBAdapter; -import de.danoeh.antennapod.util.playback.Playable; -import instrumentationTest.de.test.antennapod.util.service.download.HTTPBin; -import junit.framework.AssertionFailedError; -import org.apache.commons.io.IOUtils; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.InputStream; -import java.io.OutputStream; -import java.util.ArrayList; -import java.util.Date; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; - -/** - * Test class for PlaybackServiceMediaPlayer - */ -public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase { - private static final String TAG = "PlaybackServiceMediaPlayerTest"; - - private static final String PLAYABLE_FILE_URL = "http://127.0.0.1:" + HTTPBin.PORT + "/files/0"; - private static final String PLAYABLE_DEST_URL = "psmptestfile.mp3"; - private String PLAYABLE_LOCAL_URL = null; - private static final int LATCH_TIMEOUT_SECONDS = 10; - - private HTTPBin httpServer; - - private volatile AssertionFailedError assertionError; - - @Override - protected void tearDown() throws Exception { - super.tearDown(); - PodDBAdapter.deleteDatabase(getInstrumentation().getTargetContext()); - httpServer.stop(); - } - - @Override - protected void setUp() throws Exception { - super.setUp(); - assertionError = null; - - final Context context = getInstrumentation().getTargetContext(); - context.deleteDatabase(PodDBAdapter.DATABASE_NAME); - // make sure database is created - PodDBAdapter adapter = new PodDBAdapter(context); - adapter.open(); - adapter.close(); - - httpServer = new HTTPBin(); - httpServer.start(); - - File cacheDir = context.getExternalFilesDir("testFiles"); - if (cacheDir == null) - cacheDir = context.getExternalFilesDir("testFiles"); - File dest = new File(cacheDir, PLAYABLE_DEST_URL); - - assertNotNull(cacheDir); - assertTrue(cacheDir.canWrite()); - assertTrue(cacheDir.canRead()); - if (!dest.exists()) { - InputStream i = getInstrumentation().getTargetContext().getAssets().open("testfile.mp3"); - OutputStream o = new FileOutputStream(new File(cacheDir, PLAYABLE_DEST_URL)); - IOUtils.copy(i, o); - o.flush(); - o.close(); - i.close(); - } - PLAYABLE_LOCAL_URL = "file://" + dest.getAbsolutePath(); - assertEquals(0, httpServer.serveFile(dest)); - } - - private void checkPSMPInfo(PlaybackServiceMediaPlayer.PSMPInfo info) { - try { - switch (info.playerStatus) { - case PLAYING: - case PAUSED: - case PREPARED: - case PREPARING: - case INITIALIZED: - case INITIALIZING: - case SEEKING: - assertNotNull(info.playable); - break; - case STOPPED: - assertNull(info.playable); - break; - case ERROR: - assertNull(info.playable); - } - } catch (AssertionFailedError e) { - if (assertionError == null) - assertionError = e; - } - } - - public void testInit() { - final Context c = getInstrumentation().getTargetContext(); - PlaybackServiceMediaPlayer psmp = new PlaybackServiceMediaPlayer(c, defaultCallback); - psmp.shutdown(); - } - - private Playable writeTestPlayable(String downloadUrl, String fileUrl) { - final Context c = getInstrumentation().getTargetContext(); - Feed f = new Feed(0, new Date(), "f", "l", "d", null, null, null, null, "i", null, null, "l", false); - f.setItems(new ArrayList<FeedItem>()); - FeedItem i = new FeedItem(0, "t", "i", "l", new Date(), false, f); - f.getItems().add(i); - FeedMedia media = new FeedMedia(0, i, 0, 0, 0, "audio/wav", fileUrl, downloadUrl, fileUrl != null, null, 0); - i.setMedia(media); - PodDBAdapter adapter = new PodDBAdapter(c); - adapter.open(); - adapter.setCompleteFeed(f); - assertTrue(media.getId() != 0); - adapter.close(); - return media; - } - - - public void testPlayMediaObjectStreamNoStartNoPrepare() throws InterruptedException { - final Context c = getInstrumentation().getTargetContext(); - final CountDownLatch countDownLatch = new CountDownLatch(2); - PlaybackServiceMediaPlayer.PSMPCallback callback = new PlaybackServiceMediaPlayer.PSMPCallback() { - @Override - public void statusChanged(PlaybackServiceMediaPlayer.PSMPInfo newInfo) { - try { - checkPSMPInfo(newInfo); - if (newInfo.playerStatus == PlayerStatus.ERROR) - throw new IllegalStateException("MediaPlayer error"); - if (countDownLatch.getCount() == 0) { - fail(); - } else if (countDownLatch.getCount() == 2) { - assertEquals(PlayerStatus.INITIALIZING, newInfo.playerStatus); - countDownLatch.countDown(); - } else { - assertEquals(PlayerStatus.INITIALIZED, newInfo.playerStatus); - countDownLatch.countDown(); - } - } catch (AssertionFailedError e) { - if (assertionError == null) - assertionError = e; - } - } - - @Override - public void shouldStop() { - - } - - @Override - public void playbackSpeedChanged(float s) { - - } - - @Override - public void onBufferingUpdate(int percent) { - - } - - @Override - public boolean onMediaPlayerInfo(int code) { - return false; - } - - @Override - public boolean onMediaPlayerError(Object inObj, int what, int extra) { - return false; - } - - @Override - public boolean endPlayback(boolean playNextEpisode) { - return false; - } - - @Override - public RemoteControlClient getRemoteControlClient() { - return null; - } - }; - PlaybackServiceMediaPlayer psmp = new PlaybackServiceMediaPlayer(c, callback); - Playable p = writeTestPlayable(PLAYABLE_FILE_URL, null); - psmp.playMediaObject(p, true, false, false); - boolean res = countDownLatch.await(LATCH_TIMEOUT_SECONDS, TimeUnit.SECONDS); - if (assertionError != null) - throw assertionError; - assertTrue(res); - - assertTrue(psmp.getPSMPInfo().playerStatus == PlayerStatus.INITIALIZED); - assertFalse(psmp.isStartWhenPrepared()); - psmp.shutdown(); - } - - public void testPlayMediaObjectStreamStartNoPrepare() throws InterruptedException { - final Context c = getInstrumentation().getTargetContext(); - final CountDownLatch countDownLatch = new CountDownLatch(2); - PlaybackServiceMediaPlayer.PSMPCallback callback = new PlaybackServiceMediaPlayer.PSMPCallback() { - @Override - public void statusChanged(PlaybackServiceMediaPlayer.PSMPInfo newInfo) { - try { - checkPSMPInfo(newInfo); - if (newInfo.playerStatus == PlayerStatus.ERROR) - throw new IllegalStateException("MediaPlayer error"); - if (countDownLatch.getCount() == 0) { - fail(); - } else if (countDownLatch.getCount() == 2) { - assertEquals(PlayerStatus.INITIALIZING, newInfo.playerStatus); - countDownLatch.countDown(); - } else { - assertEquals(PlayerStatus.INITIALIZED, newInfo.playerStatus); - countDownLatch.countDown(); - } - } catch (AssertionFailedError e) { - if (assertionError == null) - assertionError = e; - } - } - - @Override - public void shouldStop() { - - } - - @Override - public void playbackSpeedChanged(float s) { - - } - - @Override - public void onBufferingUpdate(int percent) { - - } - - @Override - public boolean onMediaPlayerInfo(int code) { - return false; - } - - @Override - public boolean onMediaPlayerError(Object inObj, int what, int extra) { - return false; - } - - @Override - public boolean endPlayback(boolean playNextEpisode) { - return false; - } - - @Override - public RemoteControlClient getRemoteControlClient() { - return null; - } - }; - PlaybackServiceMediaPlayer psmp = new PlaybackServiceMediaPlayer(c, callback); - Playable p = writeTestPlayable(PLAYABLE_FILE_URL, null); - psmp.playMediaObject(p, true, true, false); - - boolean res = countDownLatch.await(LATCH_TIMEOUT_SECONDS, TimeUnit.SECONDS); - if (assertionError != null) - throw assertionError; - assertTrue(res); - - assertTrue(psmp.getPSMPInfo().playerStatus == PlayerStatus.INITIALIZED); - assertTrue(psmp.isStartWhenPrepared()); - psmp.shutdown(); - } - - public void testPlayMediaObjectStreamNoStartPrepare() throws InterruptedException { - final Context c = getInstrumentation().getTargetContext(); - final CountDownLatch countDownLatch = new CountDownLatch(4); - PlaybackServiceMediaPlayer.PSMPCallback callback = new PlaybackServiceMediaPlayer.PSMPCallback() { - @Override - public void statusChanged(PlaybackServiceMediaPlayer.PSMPInfo newInfo) { - try { - checkPSMPInfo(newInfo); - if (newInfo.playerStatus == PlayerStatus.ERROR) - throw new IllegalStateException("MediaPlayer error"); - if (countDownLatch.getCount() == 0) { - fail(); - } else if (countDownLatch.getCount() == 4) { - assertEquals(PlayerStatus.INITIALIZING, newInfo.playerStatus); - } else if (countDownLatch.getCount() == 3) { - assertEquals(PlayerStatus.INITIALIZED, newInfo.playerStatus); - } else if (countDownLatch.getCount() == 2) { - assertEquals(PlayerStatus.PREPARING, newInfo.playerStatus); - } else if (countDownLatch.getCount() == 1) { - assertEquals(PlayerStatus.PREPARED, newInfo.playerStatus); - } - countDownLatch.countDown(); - } catch (AssertionFailedError e) { - if (assertionError == null) - assertionError = e; - } - } - - @Override - public void shouldStop() { - - } - - @Override - public void playbackSpeedChanged(float s) { - - } - - @Override - public void onBufferingUpdate(int percent) { - - } - - @Override - public boolean onMediaPlayerInfo(int code) { - return false; - } - - @Override - public boolean onMediaPlayerError(Object inObj, int what, int extra) { - return false; - } - - @Override - public boolean endPlayback(boolean playNextEpisode) { - return false; - } - - @Override - public RemoteControlClient getRemoteControlClient() { - return null; - } - }; - PlaybackServiceMediaPlayer psmp = new PlaybackServiceMediaPlayer(c, callback); - Playable p = writeTestPlayable(PLAYABLE_FILE_URL, null); - psmp.playMediaObject(p, true, false, true); - boolean res = countDownLatch.await(LATCH_TIMEOUT_SECONDS, TimeUnit.SECONDS); - if (assertionError != null) - throw assertionError; - assertTrue(res); - assertTrue(psmp.getPSMPInfo().playerStatus == PlayerStatus.PREPARED); - - psmp.shutdown(); - } - - public void testPlayMediaObjectStreamStartPrepare() throws InterruptedException { - final Context c = getInstrumentation().getTargetContext(); - final CountDownLatch countDownLatch = new CountDownLatch(5); - PlaybackServiceMediaPlayer.PSMPCallback callback = new PlaybackServiceMediaPlayer.PSMPCallback() { - @Override - public void statusChanged(PlaybackServiceMediaPlayer.PSMPInfo newInfo) { - try { - checkPSMPInfo(newInfo); - if (newInfo.playerStatus == PlayerStatus.ERROR) - throw new IllegalStateException("MediaPlayer error"); - if (countDownLatch.getCount() == 0) { - fail(); - - } else if (countDownLatch.getCount() == 5) { - assertEquals(PlayerStatus.INITIALIZING, newInfo.playerStatus); - } else if (countDownLatch.getCount() == 4) { - assertEquals(PlayerStatus.INITIALIZED, newInfo.playerStatus); - } else if (countDownLatch.getCount() == 3) { - assertEquals(PlayerStatus.PREPARING, newInfo.playerStatus); - } else if (countDownLatch.getCount() == 2) { - assertEquals(PlayerStatus.PREPARED, newInfo.playerStatus); - } else if (countDownLatch.getCount() == 1) { - assertEquals(PlayerStatus.PLAYING, newInfo.playerStatus); - } - countDownLatch.countDown(); - } catch (AssertionFailedError e) { - if (assertionError == null) - assertionError = e; - } - } - - @Override - public void shouldStop() { - - } - - @Override - public void playbackSpeedChanged(float s) { - - } - - @Override - public void onBufferingUpdate(int percent) { - - } - - @Override - public boolean onMediaPlayerInfo(int code) { - return false; - } - - @Override - public boolean onMediaPlayerError(Object inObj, int what, int extra) { - return false; - } - - @Override - public boolean endPlayback(boolean playNextEpisode) { - return false; - } - - @Override - public RemoteControlClient getRemoteControlClient() { - return null; - } - }; - PlaybackServiceMediaPlayer psmp = new PlaybackServiceMediaPlayer(c, callback); - Playable p = writeTestPlayable(PLAYABLE_FILE_URL, null); - psmp.playMediaObject(p, true, true, true); - boolean res = countDownLatch.await(LATCH_TIMEOUT_SECONDS, TimeUnit.SECONDS); - if (assertionError != null) - throw assertionError; - assertTrue(res); - assertTrue(psmp.getPSMPInfo().playerStatus == PlayerStatus.PLAYING); - psmp.shutdown(); - } - - public void testPlayMediaObjectLocalNoStartNoPrepare() throws InterruptedException { - final Context c = getInstrumentation().getTargetContext(); - final CountDownLatch countDownLatch = new CountDownLatch(2); - PlaybackServiceMediaPlayer.PSMPCallback callback = new PlaybackServiceMediaPlayer.PSMPCallback() { - @Override - public void statusChanged(PlaybackServiceMediaPlayer.PSMPInfo newInfo) { - try { - checkPSMPInfo(newInfo); - if (newInfo.playerStatus == PlayerStatus.ERROR) - throw new IllegalStateException("MediaPlayer error"); - if (countDownLatch.getCount() == 0) { - fail(); - } else if (countDownLatch.getCount() == 2) { - assertEquals(PlayerStatus.INITIALIZING, newInfo.playerStatus); - countDownLatch.countDown(); - } else { - assertEquals(PlayerStatus.INITIALIZED, newInfo.playerStatus); - countDownLatch.countDown(); - } - } catch (AssertionFailedError e) { - if (assertionError == null) - assertionError = e; - } - } - - @Override - public void shouldStop() { - - } - - @Override - public void playbackSpeedChanged(float s) { - - } - - @Override - public void onBufferingUpdate(int percent) { - - } - - @Override - public boolean onMediaPlayerInfo(int code) { - return false; - } - - @Override - public boolean onMediaPlayerError(Object inObj, int what, int extra) { - return false; - } - - @Override - public boolean endPlayback(boolean playNextEpisode) { - return false; - } - - @Override - public RemoteControlClient getRemoteControlClient() { - return null; - } - }; - PlaybackServiceMediaPlayer psmp = new PlaybackServiceMediaPlayer(c, callback); - Playable p = writeTestPlayable(PLAYABLE_FILE_URL, PLAYABLE_LOCAL_URL); - psmp.playMediaObject(p, false, false, false); - boolean res = countDownLatch.await(LATCH_TIMEOUT_SECONDS, TimeUnit.SECONDS); - if (assertionError != null) - throw assertionError; - assertTrue(res); - assertTrue(psmp.getPSMPInfo().playerStatus == PlayerStatus.INITIALIZED); - assertFalse(psmp.isStartWhenPrepared()); - psmp.shutdown(); - } - - public void testPlayMediaObjectLocalStartNoPrepare() throws InterruptedException { - final Context c = getInstrumentation().getTargetContext(); - final CountDownLatch countDownLatch = new CountDownLatch(2); - PlaybackServiceMediaPlayer.PSMPCallback callback = new PlaybackServiceMediaPlayer.PSMPCallback() { - @Override - public void statusChanged(PlaybackServiceMediaPlayer.PSMPInfo newInfo) { - try { - checkPSMPInfo(newInfo); - if (newInfo.playerStatus == PlayerStatus.ERROR) - throw new IllegalStateException("MediaPlayer error"); - if (countDownLatch.getCount() == 0) { - fail(); - } else if (countDownLatch.getCount() == 2) { - assertEquals(PlayerStatus.INITIALIZING, newInfo.playerStatus); - countDownLatch.countDown(); - } else { - assertEquals(PlayerStatus.INITIALIZED, newInfo.playerStatus); - countDownLatch.countDown(); - } - } catch (AssertionFailedError e) { - if (assertionError == null) - assertionError = e; - } - } - - @Override - public void shouldStop() { - - } - - @Override - public void playbackSpeedChanged(float s) { - - } - - @Override - public void onBufferingUpdate(int percent) { - - } - - @Override - public boolean onMediaPlayerInfo(int code) { - return false; - } - - @Override - public boolean onMediaPlayerError(Object inObj, int what, int extra) { - return false; - } - - @Override - public boolean endPlayback(boolean playNextEpisode) { - return false; - } - - @Override - public RemoteControlClient getRemoteControlClient() { - return null; - } - }; - PlaybackServiceMediaPlayer psmp = new PlaybackServiceMediaPlayer(c, callback); - Playable p = writeTestPlayable(PLAYABLE_FILE_URL, PLAYABLE_LOCAL_URL); - psmp.playMediaObject(p, false, true, false); - boolean res = countDownLatch.await(LATCH_TIMEOUT_SECONDS, TimeUnit.SECONDS); - if (assertionError != null) - throw assertionError; - assertTrue(res); - assertTrue(psmp.getPSMPInfo().playerStatus == PlayerStatus.INITIALIZED); - assertTrue(psmp.isStartWhenPrepared()); - psmp.shutdown(); - } - - public void testPlayMediaObjectLocalNoStartPrepare() throws InterruptedException { - final Context c = getInstrumentation().getTargetContext(); - final CountDownLatch countDownLatch = new CountDownLatch(4); - PlaybackServiceMediaPlayer.PSMPCallback callback = new PlaybackServiceMediaPlayer.PSMPCallback() { - @Override - public void statusChanged(PlaybackServiceMediaPlayer.PSMPInfo newInfo) { - try { - checkPSMPInfo(newInfo); - if (newInfo.playerStatus == PlayerStatus.ERROR) - throw new IllegalStateException("MediaPlayer error"); - if (countDownLatch.getCount() == 0) { - fail(); - } else if (countDownLatch.getCount() == 4) { - assertEquals(PlayerStatus.INITIALIZING, newInfo.playerStatus); - } else if (countDownLatch.getCount() == 3) { - assertEquals(PlayerStatus.INITIALIZED, newInfo.playerStatus); - } else if (countDownLatch.getCount() == 2) { - assertEquals(PlayerStatus.PREPARING, newInfo.playerStatus); - } else if (countDownLatch.getCount() == 1) { - assertEquals(PlayerStatus.PREPARED, newInfo.playerStatus); - } - countDownLatch.countDown(); - } catch (AssertionFailedError e) { - if (assertionError == null) - assertionError = e; - } - } - - @Override - public void shouldStop() { - - } - - @Override - public void playbackSpeedChanged(float s) { - - } - - @Override - public void onBufferingUpdate(int percent) { - - } - - @Override - public boolean onMediaPlayerInfo(int code) { - return false; - } - - @Override - public boolean onMediaPlayerError(Object inObj, int what, int extra) { - return false; - } - - @Override - public boolean endPlayback(boolean playNextEpisode) { - return false; - } - - @Override - public RemoteControlClient getRemoteControlClient() { - return null; - } - }; - PlaybackServiceMediaPlayer psmp = new PlaybackServiceMediaPlayer(c, callback); - Playable p = writeTestPlayable(PLAYABLE_FILE_URL, PLAYABLE_LOCAL_URL); - psmp.playMediaObject(p, false, false, true); - boolean res = countDownLatch.await(LATCH_TIMEOUT_SECONDS, TimeUnit.SECONDS); - if (assertionError != null) - throw assertionError; - assertTrue(res); - assertTrue(psmp.getPSMPInfo().playerStatus == PlayerStatus.PREPARED); - psmp.shutdown(); - } - - public void testPlayMediaObjectLocalStartPrepare() throws InterruptedException { - final Context c = getInstrumentation().getTargetContext(); - final CountDownLatch countDownLatch = new CountDownLatch(5); - PlaybackServiceMediaPlayer.PSMPCallback callback = new PlaybackServiceMediaPlayer.PSMPCallback() { - @Override - public void statusChanged(PlaybackServiceMediaPlayer.PSMPInfo newInfo) { - try { - checkPSMPInfo(newInfo); - if (newInfo.playerStatus == PlayerStatus.ERROR) - throw new IllegalStateException("MediaPlayer error"); - if (countDownLatch.getCount() == 0) { - fail(); - } else if (countDownLatch.getCount() == 5) { - assertEquals(PlayerStatus.INITIALIZING, newInfo.playerStatus); - } else if (countDownLatch.getCount() == 4) { - assertEquals(PlayerStatus.INITIALIZED, newInfo.playerStatus); - } else if (countDownLatch.getCount() == 3) { - assertEquals(PlayerStatus.PREPARING, newInfo.playerStatus); - } else if (countDownLatch.getCount() == 2) { - assertEquals(PlayerStatus.PREPARED, newInfo.playerStatus); - } else if (countDownLatch.getCount() == 1) { - assertEquals(PlayerStatus.PLAYING, newInfo.playerStatus); - } - - } catch (AssertionFailedError e) { - if (assertionError == null) - assertionError = e; - } finally { - countDownLatch.countDown(); - } - } - - @Override - public void shouldStop() { - - } - - @Override - public void playbackSpeedChanged(float s) { - - } - - @Override - public void onBufferingUpdate(int percent) { - - } - - @Override - public boolean onMediaPlayerInfo(int code) { - return false; - } - - @Override - public boolean onMediaPlayerError(Object inObj, int what, int extra) { - return false; - } - - @Override - public boolean endPlayback(boolean playNextEpisode) { - return false; - } - - @Override - public RemoteControlClient getRemoteControlClient() { - return null; - } - }; - PlaybackServiceMediaPlayer psmp = new PlaybackServiceMediaPlayer(c, callback); - Playable p = writeTestPlayable(PLAYABLE_FILE_URL, PLAYABLE_LOCAL_URL); - psmp.playMediaObject(p, false, true, true); - boolean res = countDownLatch.await(LATCH_TIMEOUT_SECONDS, TimeUnit.SECONDS); - if (assertionError != null) - throw assertionError; - assertTrue(res); - assertTrue(psmp.getPSMPInfo().playerStatus == PlayerStatus.PLAYING); - psmp.shutdown(); - } - - - private final PlaybackServiceMediaPlayer.PSMPCallback defaultCallback = new PlaybackServiceMediaPlayer.PSMPCallback() { - @Override - public void statusChanged(PlaybackServiceMediaPlayer.PSMPInfo newInfo) { - checkPSMPInfo(newInfo); - } - - @Override - public void shouldStop() { - - } - - @Override - public void playbackSpeedChanged(float s) { - - } - - @Override - public void onBufferingUpdate(int percent) { - - } - - @Override - public boolean onMediaPlayerInfo(int code) { - return false; - } - - @Override - public boolean onMediaPlayerError(Object inObj, int what, int extra) { - return false; - } - - @Override - public boolean endPlayback(boolean playNextEpisode) { - return false; - } - - @Override - public RemoteControlClient getRemoteControlClient() { - return null; - } - }; - - private void pauseTestSkeleton(final PlayerStatus initialState, final boolean stream, final boolean abandonAudioFocus, final boolean reinit, long timeoutSeconds) throws InterruptedException { - final Context c = getInstrumentation().getTargetContext(); - final int latchCount = (stream && reinit) ? 2 : 1; - final CountDownLatch countDownLatch = new CountDownLatch(latchCount); - - PlaybackServiceMediaPlayer.PSMPCallback callback = new PlaybackServiceMediaPlayer.PSMPCallback() { - @Override - public void statusChanged(PlaybackServiceMediaPlayer.PSMPInfo newInfo) { - checkPSMPInfo(newInfo); - if (newInfo.playerStatus == PlayerStatus.ERROR) { - if (assertionError == null) - assertionError = new UnexpectedStateChange(newInfo.playerStatus); - } else if (initialState != PlayerStatus.PLAYING) { - if (assertionError == null) - assertionError = new UnexpectedStateChange(newInfo.playerStatus); - } else { - switch (newInfo.playerStatus) { - case PAUSED: - if (latchCount == countDownLatch.getCount()) - countDownLatch.countDown(); - else { - if (assertionError == null) - assertionError = new UnexpectedStateChange(newInfo.playerStatus); - } - break; - case INITIALIZED: - if (stream && reinit && countDownLatch.getCount() < latchCount) { - countDownLatch.countDown(); - } else if (countDownLatch.getCount() < latchCount) { - if (assertionError == null) - assertionError = new UnexpectedStateChange(newInfo.playerStatus); - } - break; - } - } - - } - - @Override - public void shouldStop() { - if (assertionError == null) - assertionError = new AssertionFailedError("Unexpected call to shouldStop"); - } - - @Override - public void playbackSpeedChanged(float s) { - - } - - @Override - public void onBufferingUpdate(int percent) { - - } - - @Override - public boolean onMediaPlayerInfo(int code) { - return false; - } - - @Override - public boolean onMediaPlayerError(Object inObj, int what, int extra) { - if (assertionError == null) - assertionError = new AssertionFailedError("Unexpected call to onMediaPlayerError"); - return false; - } - - @Override - public boolean endPlayback(boolean playNextEpisode) { - return false; - } - - @Override - public RemoteControlClient getRemoteControlClient() { - return null; - } - }; - PlaybackServiceMediaPlayer psmp = new PlaybackServiceMediaPlayer(c, callback); - Playable p = writeTestPlayable(PLAYABLE_FILE_URL, PLAYABLE_LOCAL_URL); - if (initialState == PlayerStatus.PLAYING) { - psmp.playMediaObject(p, stream, true, true); - } - psmp.pause(abandonAudioFocus, reinit); - boolean res = countDownLatch.await(timeoutSeconds, TimeUnit.SECONDS); - if (assertionError != null) - throw assertionError; - assertTrue(res || initialState != PlayerStatus.PLAYING); - psmp.shutdown(); - } - - public void testPauseDefaultState() throws InterruptedException { - pauseTestSkeleton(PlayerStatus.STOPPED, false, false, false, 1); - } - - public void testPausePlayingStateNoAbandonNoReinitNoStream() throws InterruptedException { - pauseTestSkeleton(PlayerStatus.PLAYING, false, false, false, LATCH_TIMEOUT_SECONDS); - } - - public void testPausePlayingStateNoAbandonNoReinitStream() throws InterruptedException { - pauseTestSkeleton(PlayerStatus.PLAYING, true, false, false, LATCH_TIMEOUT_SECONDS); - } - - public void testPausePlayingStateAbandonNoReinitNoStream() throws InterruptedException { - pauseTestSkeleton(PlayerStatus.PLAYING, false, true, false, LATCH_TIMEOUT_SECONDS); - } - - public void testPausePlayingStateAbandonNoReinitStream() throws InterruptedException { - pauseTestSkeleton(PlayerStatus.PLAYING, true, true, false, LATCH_TIMEOUT_SECONDS); - } - - public void testPausePlayingStateNoAbandonReinitNoStream() throws InterruptedException { - pauseTestSkeleton(PlayerStatus.PLAYING, false, false, true, LATCH_TIMEOUT_SECONDS); - } - - public void testPausePlayingStateNoAbandonReinitStream() throws InterruptedException { - pauseTestSkeleton(PlayerStatus.PLAYING, true, false, true, LATCH_TIMEOUT_SECONDS); - } - - public void testPausePlayingStateAbandonReinitNoStream() throws InterruptedException { - pauseTestSkeleton(PlayerStatus.PLAYING, false, true, true, LATCH_TIMEOUT_SECONDS); - } - - public void testPausePlayingStateAbandonReinitStream() throws InterruptedException { - pauseTestSkeleton(PlayerStatus.PLAYING, true, true, true, LATCH_TIMEOUT_SECONDS); - } - - private void resumeTestSkeleton(final PlayerStatus initialState, long timeoutSeconds) throws InterruptedException { - final Context c = getInstrumentation().getTargetContext(); - final int latchCount = (initialState == PlayerStatus.PAUSED || initialState == PlayerStatus.PLAYING) ? 2 : - (initialState == PlayerStatus.PREPARED) ? 1 : 0; - final CountDownLatch countDownLatch = new CountDownLatch(latchCount); - - PlaybackServiceMediaPlayer.PSMPCallback callback = new PlaybackServiceMediaPlayer.PSMPCallback() { - @Override - public void statusChanged(PlaybackServiceMediaPlayer.PSMPInfo newInfo) { - checkPSMPInfo(newInfo); - if (newInfo.playerStatus == PlayerStatus.ERROR) { - if (assertionError == null) - assertionError = new UnexpectedStateChange(newInfo.playerStatus); - } else if (newInfo.playerStatus == PlayerStatus.PLAYING) { - if (countDownLatch.getCount() == 0) { - if (assertionError == null) - assertionError = new UnexpectedStateChange(newInfo.playerStatus); - } else { - countDownLatch.countDown(); - } - } - - } - - @Override - public void shouldStop() { - - } - - @Override - public void playbackSpeedChanged(float s) { - - } - - @Override - public void onBufferingUpdate(int percent) { - - } - - @Override - public boolean onMediaPlayerInfo(int code) { - return false; - } - - @Override - public boolean onMediaPlayerError(Object inObj, int what, int extra) { - if (assertionError == null) { - assertionError = new AssertionFailedError("Unexpected call of onMediaPlayerError"); - } - return false; - } - - @Override - public boolean endPlayback(boolean playNextEpisode) { - return false; - } - - @Override - public RemoteControlClient getRemoteControlClient() { - return null; - } - }; - PlaybackServiceMediaPlayer psmp = new PlaybackServiceMediaPlayer(c, callback); - if (initialState == PlayerStatus.PREPARED || initialState == PlayerStatus.PLAYING || initialState == PlayerStatus.PAUSED) { - boolean startWhenPrepared = (initialState != PlayerStatus.PREPARED); - psmp.playMediaObject(writeTestPlayable(PLAYABLE_FILE_URL, PLAYABLE_LOCAL_URL), false, startWhenPrepared, true); - } - if (initialState == PlayerStatus.PAUSED) { - psmp.pause(false, false); - } - psmp.resume(); - boolean res = countDownLatch.await(timeoutSeconds, TimeUnit.SECONDS); - if (assertionError != null) - throw assertionError; - assertTrue(res || (initialState != PlayerStatus.PAUSED && initialState != PlayerStatus.PREPARED)); - psmp.shutdown(); - } - - public void testResumePausedState() throws InterruptedException { - resumeTestSkeleton(PlayerStatus.PAUSED, LATCH_TIMEOUT_SECONDS); - } - - public void testResumePreparedState() throws InterruptedException { - resumeTestSkeleton(PlayerStatus.PREPARED, LATCH_TIMEOUT_SECONDS); - } - - public void testResumePlayingState() throws InterruptedException { - resumeTestSkeleton(PlayerStatus.PLAYING, 1); - } - - private void prepareTestSkeleton(final PlayerStatus initialState, long timeoutSeconds) throws InterruptedException { - final Context c = getInstrumentation().getTargetContext(); - final int latchCount = 1; - final CountDownLatch countDownLatch = new CountDownLatch(latchCount); - PlaybackServiceMediaPlayer.PSMPCallback callback = new PlaybackServiceMediaPlayer.PSMPCallback() { - @Override - public void statusChanged(PlaybackServiceMediaPlayer.PSMPInfo newInfo) { - checkPSMPInfo(newInfo); - if (newInfo.playerStatus == PlayerStatus.ERROR) { - if (assertionError == null) - assertionError = new UnexpectedStateChange(newInfo.playerStatus); - } else { - if (initialState == PlayerStatus.INITIALIZED && newInfo.playerStatus == PlayerStatus.PREPARED) { - countDownLatch.countDown(); - } else if (initialState != PlayerStatus.INITIALIZED && initialState == newInfo.playerStatus) { - countDownLatch.countDown(); - } - } - - } - - @Override - public void shouldStop() { - - } - - @Override - public void playbackSpeedChanged(float s) { - - } - - @Override - public void onBufferingUpdate(int percent) { - - } - - @Override - public boolean onMediaPlayerInfo(int code) { - return false; - } - - @Override - public boolean onMediaPlayerError(Object inObj, int what, int extra) { - if (assertionError == null) - assertionError = new AssertionFailedError("Unexpected call to onMediaPlayerError"); - return false; - } - - @Override - public boolean endPlayback(boolean playNextEpisode) { - return false; - } - - @Override - public RemoteControlClient getRemoteControlClient() { - return null; - } - }; - PlaybackServiceMediaPlayer psmp = new PlaybackServiceMediaPlayer(c, callback); - Playable p = writeTestPlayable(PLAYABLE_FILE_URL, PLAYABLE_LOCAL_URL); - if (initialState == PlayerStatus.INITIALIZED - || initialState == PlayerStatus.PLAYING - || initialState == PlayerStatus.PREPARED - || initialState == PlayerStatus.PAUSED) { - boolean prepareImmediately = (initialState != PlayerStatus.INITIALIZED); - boolean startWhenPrepared = (initialState != PlayerStatus.PREPARED); - psmp.playMediaObject(p, false, startWhenPrepared, prepareImmediately); - if (initialState == PlayerStatus.PAUSED) { - psmp.pause(false, false); - } - psmp.prepare(); - } - - boolean res = countDownLatch.await(timeoutSeconds, TimeUnit.SECONDS); - if (initialState != PlayerStatus.INITIALIZED) { - assertEquals(initialState, psmp.getPSMPInfo().playerStatus); - } - - if (assertionError != null) - throw assertionError; - assertTrue(res); - psmp.shutdown(); - } - - public void testPrepareInitializedState() throws InterruptedException { - prepareTestSkeleton(PlayerStatus.INITIALIZED, LATCH_TIMEOUT_SECONDS); - } - - public void testPreparePlayingState() throws InterruptedException { - prepareTestSkeleton(PlayerStatus.PLAYING, 1); - } - - public void testPreparePausedState() throws InterruptedException { - prepareTestSkeleton(PlayerStatus.PAUSED, 1); - } - - public void testPreparePreparedState() throws InterruptedException { - prepareTestSkeleton(PlayerStatus.PREPARED, 1); - } - - private void reinitTestSkeleton(final PlayerStatus initialState, final long timeoutSeconds) throws InterruptedException { - final Context c = getInstrumentation().getTargetContext(); - final int latchCount = 2; - final CountDownLatch countDownLatch = new CountDownLatch(latchCount); - PlaybackServiceMediaPlayer.PSMPCallback callback = new PlaybackServiceMediaPlayer.PSMPCallback() { - @Override - public void statusChanged(PlaybackServiceMediaPlayer.PSMPInfo newInfo) { - checkPSMPInfo(newInfo); - if (newInfo.playerStatus == PlayerStatus.ERROR) { - if (assertionError == null) - assertionError = new UnexpectedStateChange(newInfo.playerStatus); - } else { - if (newInfo.playerStatus == initialState) { - countDownLatch.countDown(); - } else if (countDownLatch.getCount() < latchCount && newInfo.playerStatus == PlayerStatus.INITIALIZED) { - countDownLatch.countDown(); - } - } - } - - @Override - public void shouldStop() { - - } - - @Override - public void playbackSpeedChanged(float s) { - - } - - @Override - public void onBufferingUpdate(int percent) { - - } - - @Override - public boolean onMediaPlayerInfo(int code) { - return false; - } - - @Override - public boolean onMediaPlayerError(Object inObj, int what, int extra) { - if (assertionError == null) - assertionError = new AssertionFailedError("Unexpected call to onMediaPlayerError"); - return false; - } - - @Override - public boolean endPlayback(boolean playNextEpisode) { - return false; - } - - @Override - public RemoteControlClient getRemoteControlClient() { - return null; - } - }; - PlaybackServiceMediaPlayer psmp = new PlaybackServiceMediaPlayer(c, callback); - Playable p = writeTestPlayable(PLAYABLE_FILE_URL, PLAYABLE_LOCAL_URL); - boolean prepareImmediately = initialState != PlayerStatus.INITIALIZED; - boolean startImmediately = initialState != PlayerStatus.PREPARED; - psmp.playMediaObject(p, false, startImmediately, prepareImmediately); - if (initialState == PlayerStatus.PAUSED) { - psmp.pause(false, false); - } - psmp.reinit(); - boolean res = countDownLatch.await(timeoutSeconds, TimeUnit.SECONDS); - if (assertionError != null) - throw assertionError; - assertTrue(res); - psmp.shutdown(); - } - - public void testReinitPlayingState() throws InterruptedException { - reinitTestSkeleton(PlayerStatus.PLAYING, LATCH_TIMEOUT_SECONDS); - } - - public void testReinitPausedState() throws InterruptedException { - reinitTestSkeleton(PlayerStatus.PAUSED, LATCH_TIMEOUT_SECONDS); - } - - public void testPreparedPlayingState() throws InterruptedException { - reinitTestSkeleton(PlayerStatus.PREPARED, LATCH_TIMEOUT_SECONDS); - } - - public void testReinitInitializedState() throws InterruptedException { - reinitTestSkeleton(PlayerStatus.INITIALIZED, LATCH_TIMEOUT_SECONDS); - } - - private static class UnexpectedStateChange extends AssertionFailedError { - public UnexpectedStateChange(PlayerStatus status) { - super("Unexpected state change: " + status); - } - } -} |