12afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Linpackage com.xtremelabs.robolectric.shadows; 22afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin 32afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Linimport static org.hamcrest.CoreMatchers.equalTo; 42afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Linimport static org.hamcrest.CoreMatchers.sameInstance; 577f65e6034fcfcf9f736356cf081f261327520feMichael Portuesiimport static org.hamcrest.CoreMatchers.nullValue; 62afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Linimport static org.hamcrest.MatcherAssert.assertThat; 72afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin 82afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Linimport org.junit.Before; 92afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Linimport org.junit.Test; 102afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Linimport org.junit.runner.RunWith; 112afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin 122afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Linimport android.media.MediaPlayer; 132afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Linimport android.net.Uri; 142afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Linimport android.widget.VideoView; 152afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin 162afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Linimport com.xtremelabs.robolectric.Robolectric; 172afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Linimport com.xtremelabs.robolectric.WithTestDefaultsRunner; 182afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin 192afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin@RunWith(WithTestDefaultsRunner.class) 202afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Linpublic class VideoViewTest { 212afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin 222afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin private VideoView view; 232afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin 242afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin @Before public void setUp() throws Exception { 252afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin view = new VideoView(null); 262afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin } 272afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin 282afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin @Test 292afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin public void shouldSetOnPreparedListener() throws Exception { 304e7760479e52bdac9095f4f3ec62ee77357eeb88Michael Portuesi TestPreparedListener l = new TestPreparedListener(); 312afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin view.setOnPreparedListener(l); 322afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin ShadowVideoView shadowVideoView = Robolectric.shadowOf(view); 334e7760479e52bdac9095f4f3ec62ee77357eeb88Michael Portuesi assertThat((TestPreparedListener)(shadowVideoView.getOnPreparedListener()), sameInstance(l)); 342afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin } 352afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin 362afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin @Test 372afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin public void shouldSetOnErrorListener() throws Exception { 384e7760479e52bdac9095f4f3ec62ee77357eeb88Michael Portuesi TestErrorListener l = new TestErrorListener(); 392afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin view.setOnErrorListener(l); 402afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin ShadowVideoView shadowVideoView = Robolectric.shadowOf(view); 414e7760479e52bdac9095f4f3ec62ee77357eeb88Michael Portuesi assertThat((TestErrorListener)(shadowVideoView.getOnErrorListener()), sameInstance(l)); 422afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin } 432afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin 442afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin @Test 452afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin public void shouldSetOnCompletionListener() throws Exception { 464e7760479e52bdac9095f4f3ec62ee77357eeb88Michael Portuesi TestCompletionListener l = new TestCompletionListener(); 472afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin view.setOnCompletionListener(l); 482afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin ShadowVideoView shadowVideoView = Robolectric.shadowOf(view); 494e7760479e52bdac9095f4f3ec62ee77357eeb88Michael Portuesi assertThat((TestCompletionListener)(shadowVideoView.getOnCompletionListener()), sameInstance(l)); 502afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin } 512afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin 522afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin @Test 5377f65e6034fcfcf9f736356cf081f261327520feMichael Portuesi public void shouldSetVideoPath() throws Exception { 5477f65e6034fcfcf9f736356cf081f261327520feMichael Portuesi view.setVideoPath("video.mp4"); 5577f65e6034fcfcf9f736356cf081f261327520feMichael Portuesi ShadowVideoView shadowVideoView = Robolectric.shadowOf(view); 5677f65e6034fcfcf9f736356cf081f261327520feMichael Portuesi assertThat(shadowVideoView.getVideoPath(), equalTo("video.mp4")); 5777f65e6034fcfcf9f736356cf081f261327520feMichael Portuesi view.setVideoPath(null); 5877f65e6034fcfcf9f736356cf081f261327520feMichael Portuesi assertThat(shadowVideoView.getVideoPath(), nullValue()); 5977f65e6034fcfcf9f736356cf081f261327520feMichael Portuesi } 6077f65e6034fcfcf9f736356cf081f261327520feMichael Portuesi 6177f65e6034fcfcf9f736356cf081f261327520feMichael Portuesi @Test 622afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin public void shouldSetVideoURI() throws Exception { 632afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin view.setVideoURI(Uri.parse("video.mp4")); 642afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin ShadowVideoView shadowVideoView = Robolectric.shadowOf(view); 652afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin assertThat(shadowVideoView.getVideoURIString(), equalTo("video.mp4")); 6677f65e6034fcfcf9f736356cf081f261327520feMichael Portuesi view.setVideoURI(null); 6777f65e6034fcfcf9f736356cf081f261327520feMichael Portuesi assertThat(shadowVideoView.getVideoURIString(), nullValue()); 682afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin } 692afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin 702afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin @Test 712afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin public void shoulDetermineIsPlaying() throws Exception { 722afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin assertThat(view.isPlaying(), equalTo(false)); 732afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin view.start(); 742afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin assertThat(view.isPlaying(), equalTo(true)); 752afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin view.stopPlayback(); 762afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin assertThat(view.isPlaying(), equalTo(false)); 772afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin } 782afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin 792afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin @Test 802afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin public void shouldStartPlaying() throws Exception { 812afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin view.start(); 822afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin ShadowVideoView shadowVideoView = Robolectric.shadowOf(view); 832afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin assertThat(shadowVideoView.getCurrentVideoState(), equalTo(ShadowVideoView.START)); 842afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin } 852afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin 862afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin @Test 872afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin public void shouldStopPlayback() throws Exception { 882afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin view.stopPlayback(); 892afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin ShadowVideoView shadowVideoView = Robolectric.shadowOf(view); 902afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin assertThat(shadowVideoView.getCurrentVideoState(), equalTo(ShadowVideoView.STOP)); 912afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin } 922afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin 932afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin @Test 942afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin public void shouldSuspendPlaying() throws Exception { 952afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin view.start(); 962afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin view.suspend(); 972afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin ShadowVideoView shadowVideoView = Robolectric.shadowOf(view); 982afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin assertThat(shadowVideoView.getPrevVideoState(), equalTo(ShadowVideoView.START)); 992afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin assertThat(shadowVideoView.getCurrentVideoState(), equalTo(ShadowVideoView.SUSPEND)); 1002afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin } 1012afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin 1022afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin @Test 1032afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin public void shouldResumePlaying() throws Exception { 1042afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin view.start(); 1052afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin view.suspend(); 1062afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin view.resume(); 1072afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin ShadowVideoView shadowVideoView = Robolectric.shadowOf(view); 1082afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin assertThat(shadowVideoView.getPrevVideoState(), equalTo(ShadowVideoView.SUSPEND)); 1092afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin assertThat(shadowVideoView.getCurrentVideoState(), equalTo(ShadowVideoView.RESUME)); 1102afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin } 1112afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin 1122afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin 1132afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin @Test 1142afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin public void shouldPausePlaying() throws Exception { 1152afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin view.start(); 1162afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin view.pause(); 1172afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin ShadowVideoView shadowVideoView = Robolectric.shadowOf(view); 1182afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin assertThat(shadowVideoView.getPrevVideoState(), equalTo(ShadowVideoView.START)); 1192afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin assertThat(shadowVideoView.getCurrentVideoState(), equalTo(ShadowVideoView.PAUSE)); 1202afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin } 121781a29512b5ed5e75a439d5bdb71fd8d7912e4b5Kathy Lin 122781a29512b5ed5e75a439d5bdb71fd8d7912e4b5Kathy Lin @Test 1237598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz public void shouldDetermineIfPausable() throws Exception { 124781a29512b5ed5e75a439d5bdb71fd8d7912e4b5Kathy Lin view.start(); 125781a29512b5ed5e75a439d5bdb71fd8d7912e4b5Kathy Lin assertThat(view.canPause(), equalTo(true)); 126781a29512b5ed5e75a439d5bdb71fd8d7912e4b5Kathy Lin 127781a29512b5ed5e75a439d5bdb71fd8d7912e4b5Kathy Lin view.pause(); 128781a29512b5ed5e75a439d5bdb71fd8d7912e4b5Kathy Lin assertThat(view.canPause(), equalTo(false)); 129781a29512b5ed5e75a439d5bdb71fd8d7912e4b5Kathy Lin 130781a29512b5ed5e75a439d5bdb71fd8d7912e4b5Kathy Lin view.resume(); 131781a29512b5ed5e75a439d5bdb71fd8d7912e4b5Kathy Lin assertThat(view.canPause(), equalTo(true)); 132781a29512b5ed5e75a439d5bdb71fd8d7912e4b5Kathy Lin 133781a29512b5ed5e75a439d5bdb71fd8d7912e4b5Kathy Lin view.suspend(); 134781a29512b5ed5e75a439d5bdb71fd8d7912e4b5Kathy Lin assertThat(view.canPause(), equalTo(false)); 135781a29512b5ed5e75a439d5bdb71fd8d7912e4b5Kathy Lin } 1364e7760479e52bdac9095f4f3ec62ee77357eeb88Michael Portuesi 1372afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin /** 1384e7760479e52bdac9095f4f3ec62ee77357eeb88Michael Portuesi * Helper classes 1392afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin */ 1402afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin 1414e7760479e52bdac9095f4f3ec62ee77357eeb88Michael Portuesi private class TestPreparedListener implements MediaPlayer.OnPreparedListener { 1422afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin @Override 1432afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin public void onPrepared(MediaPlayer mp) {} 1442afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin } 1452afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin 1464e7760479e52bdac9095f4f3ec62ee77357eeb88Michael Portuesi private class TestErrorListener implements MediaPlayer.OnErrorListener { 1472afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin @Override 1482afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin public boolean onError(MediaPlayer mp, int what, int extra) { 1492afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin return false; 1502afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin } 1512afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin } 1522afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin 1534e7760479e52bdac9095f4f3ec62ee77357eeb88Michael Portuesi private class TestCompletionListener implements MediaPlayer.OnCompletionListener { 1542afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin @Override 1552afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin public void onCompletion(MediaPlayer mp) {} 1562afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin } 1572afd69b7f52c3c4c1fbe17f46e84d0cb178d3adeKathy Lin} 158