VideoViewTest.java revision 77f65e6034fcfcf9f736356cf081f261327520fe
1package com.xtremelabs.robolectric.shadows;
2
3import static org.hamcrest.CoreMatchers.equalTo;
4import static org.hamcrest.CoreMatchers.sameInstance;
5import static org.hamcrest.CoreMatchers.nullValue;
6import static org.hamcrest.MatcherAssert.assertThat;
7
8import org.junit.Before;
9import org.junit.Test;
10import org.junit.runner.RunWith;
11
12import android.media.MediaPlayer;
13import android.net.Uri;
14import android.widget.VideoView;
15
16import com.xtremelabs.robolectric.Robolectric;
17import com.xtremelabs.robolectric.WithTestDefaultsRunner;
18
19@RunWith(WithTestDefaultsRunner.class)
20public class VideoViewTest {
21
22    private VideoView view;
23
24    @Before public void setUp() throws Exception {
25        view = new VideoView(null);
26    }
27
28    @Test
29    public void shouldSetOnPreparedListener() throws Exception {
30    	TestPreparedListener l = new TestPreparedListener();
31    	view.setOnPreparedListener(l);
32    	ShadowVideoView shadowVideoView = Robolectric.shadowOf(view);
33    	assertThat((TestPreparedListener)(shadowVideoView.getOnPreparedListener()), sameInstance(l));
34    }
35
36    @Test
37    public void shouldSetOnErrorListener() throws Exception {
38    	TestErrorListener l = new TestErrorListener();
39    	view.setOnErrorListener(l);
40    	ShadowVideoView shadowVideoView = Robolectric.shadowOf(view);
41    	assertThat((TestErrorListener)(shadowVideoView.getOnErrorListener()), sameInstance(l));
42    }
43
44    @Test
45    public void shouldSetOnCompletionListener() throws Exception {
46    	TestCompletionListener l = new TestCompletionListener();
47    	view.setOnCompletionListener(l);
48    	ShadowVideoView shadowVideoView = Robolectric.shadowOf(view);
49    	assertThat((TestCompletionListener)(shadowVideoView.getOnCompletionListener()), sameInstance(l));
50    }
51
52    @Test
53    public void shouldSetVideoPath() throws Exception {
54    	view.setVideoPath("video.mp4");
55    	ShadowVideoView shadowVideoView = Robolectric.shadowOf(view);
56    	assertThat(shadowVideoView.getVideoPath(), equalTo("video.mp4"));
57    	view.setVideoPath(null);
58    	assertThat(shadowVideoView.getVideoPath(), nullValue());
59    }
60
61    @Test
62    public void shouldSetVideoURI() throws Exception {
63    	view.setVideoURI(Uri.parse("video.mp4"));
64    	ShadowVideoView shadowVideoView = Robolectric.shadowOf(view);
65    	assertThat(shadowVideoView.getVideoURIString(), equalTo("video.mp4"));
66    	view.setVideoURI(null);
67    	assertThat(shadowVideoView.getVideoURIString(), nullValue());
68    }
69
70    @Test
71    public void shoulDetermineIsPlaying() throws Exception {
72    	assertThat(view.isPlaying(), equalTo(false));
73    	view.start();
74    	assertThat(view.isPlaying(), equalTo(true));
75    	view.stopPlayback();
76    	assertThat(view.isPlaying(), equalTo(false));
77    }
78
79    @Test
80    public void shouldStartPlaying() throws Exception {
81    	view.start();
82    	ShadowVideoView shadowVideoView = Robolectric.shadowOf(view);
83    	assertThat(shadowVideoView.getCurrentVideoState(), equalTo(ShadowVideoView.START));
84    }
85
86    @Test
87    public void shouldStopPlayback() throws Exception {
88    	view.stopPlayback();
89    	ShadowVideoView shadowVideoView = Robolectric.shadowOf(view);
90    	assertThat(shadowVideoView.getCurrentVideoState(), equalTo(ShadowVideoView.STOP));
91    }
92
93    @Test
94    public void shouldSuspendPlaying() throws Exception {
95    	view.start();
96    	view.suspend();
97    	ShadowVideoView shadowVideoView = Robolectric.shadowOf(view);
98    	assertThat(shadowVideoView.getPrevVideoState(), equalTo(ShadowVideoView.START));
99    	assertThat(shadowVideoView.getCurrentVideoState(), equalTo(ShadowVideoView.SUSPEND));
100    }
101
102    @Test
103    public void shouldResumePlaying() throws Exception {
104    	view.start();
105    	view.suspend();
106    	view.resume();
107    	ShadowVideoView shadowVideoView = Robolectric.shadowOf(view);
108    	assertThat(shadowVideoView.getPrevVideoState(), equalTo(ShadowVideoView.SUSPEND));
109    	assertThat(shadowVideoView.getCurrentVideoState(), equalTo(ShadowVideoView.RESUME));
110    }
111
112
113    @Test
114    public void shouldPausePlaying() throws Exception {
115    	view.start();
116    	view.pause();
117    	ShadowVideoView shadowVideoView = Robolectric.shadowOf(view);
118    	assertThat(shadowVideoView.getPrevVideoState(), equalTo(ShadowVideoView.START));
119    	assertThat(shadowVideoView.getCurrentVideoState(), equalTo(ShadowVideoView.PAUSE));
120    }
121
122    @Test
123    public void shouldDetermineIfPausable() throws Exception {
124    	view.start();
125    	assertThat(view.canPause(), equalTo(true));
126
127    	view.pause();
128    	assertThat(view.canPause(), equalTo(false));
129
130    	view.resume();
131    	assertThat(view.canPause(), equalTo(true));
132
133    	view.suspend();
134    	assertThat(view.canPause(), equalTo(false));
135    }
136
137    /**
138     * Helper classes
139     */
140
141	private class TestPreparedListener implements MediaPlayer.OnPreparedListener {
142		@Override
143		public void onPrepared(MediaPlayer mp) {}
144	}
145
146	private class TestErrorListener implements MediaPlayer.OnErrorListener  {
147		@Override
148		public boolean onError(MediaPlayer mp, int what, int extra) {
149			return false;
150		}
151	}
152
153	private class TestCompletionListener implements MediaPlayer.OnCompletionListener {
154		@Override
155		public void onCompletion(MediaPlayer mp) {}
156	}
157}
158