package org.robolectric.shadows;
import android.hardware.Camera;
import android.media.MediaRecorder;
import android.view.Surface;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.Shadows;
import org.robolectric.TestRunners;
import org.robolectric.shadow.api.Shadow;
import static org.assertj.core.api.Assertions.assertThat;
@RunWith(TestRunners.MultiApiSelfTest.class)
public class ShadowMediaRecorderTest {
private MediaRecorder mediaRecorder;
private ShadowMediaRecorder shadowMediaRecorder;
@Before
public void setUp() throws Exception {
mediaRecorder = new MediaRecorder();
shadowMediaRecorder = Shadows.shadowOf(mediaRecorder);
}
@Test
public void testAudioChannels() throws Exception {
assertThat(shadowMediaRecorder.getAudioChannels()).isNotEqualTo(2);
mediaRecorder.setAudioChannels(2);
assertThat(shadowMediaRecorder.getAudioChannels()).isEqualTo(2);
}
@Test
public void testAudioEncoder() throws Exception {
assertThat(shadowMediaRecorder.getAudioEncoder()).isNotEqualTo(MediaRecorder.AudioEncoder.AMR_NB);
assertThat(shadowMediaRecorder.getState()).isNotEqualTo(ShadowMediaRecorder.STATE_DATA_SOURCE_CONFIGURED);
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
assertThat(shadowMediaRecorder.getAudioEncoder()).isEqualTo(MediaRecorder.AudioEncoder.AMR_NB);
assertThat(shadowMediaRecorder.getState()).isEqualTo(ShadowMediaRecorder.STATE_DATA_SOURCE_CONFIGURED);
}
@Test
public void testAudioEncodingBitRate() throws Exception {
assertThat(shadowMediaRecorder.getAudioEncodingBitRate()).isNotEqualTo(128000);
mediaRecorder.setAudioEncodingBitRate(128000);
assertThat(shadowMediaRecorder.getAudioEncodingBitRate()).isEqualTo(128000);
}
@Test
public void testAudioSamplingRate() throws Exception {
assertThat(shadowMediaRecorder.getAudioSamplingRate()).isNotEqualTo(22050);
mediaRecorder.setAudioSamplingRate(22050);
assertThat(shadowMediaRecorder.getAudioSamplingRate()).isEqualTo(22050);
}
@Test
public void testAudioSource() throws Exception {
assertThat(shadowMediaRecorder.getAudioSource()).isNotEqualTo(MediaRecorder.AudioSource.CAMCORDER);
assertThat(shadowMediaRecorder.getState()).isNotEqualTo(ShadowMediaRecorder.STATE_INITIALIZED);
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
assertThat(shadowMediaRecorder.getAudioSource()).isEqualTo(MediaRecorder.AudioSource.CAMCORDER);
assertThat(shadowMediaRecorder.getState()).isEqualTo(ShadowMediaRecorder.STATE_INITIALIZED);
}
@Test
public void testCamera() throws Exception {
assertThat(shadowMediaRecorder.getCamera()).isNull();
Camera c = Shadow.newInstanceOf(Camera.class);
mediaRecorder.setCamera(c);
assertThat(shadowMediaRecorder.getCamera()).isNotNull();
assertThat(shadowMediaRecorder.getCamera()).isSameAs(c);
}
@Test
public void testMaxDuration() throws Exception {
assertThat(shadowMediaRecorder.getMaxDuration()).isNotEqualTo(30000);
mediaRecorder.setMaxDuration(30000);
assertThat(shadowMediaRecorder.getMaxDuration()).isEqualTo(30000);
}
@Test
public void testMaxFileSize() throws Exception {
assertThat(shadowMediaRecorder.getMaxFileSize()).isNotEqualTo(512000L);
mediaRecorder.setMaxFileSize(512000);
assertThat(shadowMediaRecorder.getMaxFileSize()).isEqualTo(512000L);
}
@Test
public void testOnErrorListener() throws Exception {
assertThat(shadowMediaRecorder.getErrorListener()).isNull();
TestErrorListener listener = new TestErrorListener();
mediaRecorder.setOnErrorListener(listener);
assertThat(shadowMediaRecorder.getErrorListener()).isNotNull();
assertThat(shadowMediaRecorder.getErrorListener()).isSameAs((MediaRecorder.OnErrorListener) listener);
}
@Test
public void testOnInfoListener() throws Exception {
assertThat(shadowMediaRecorder.getInfoListener()).isNull();
TestInfoListener listener = new TestInfoListener();
mediaRecorder.setOnInfoListener(listener);
assertThat(shadowMediaRecorder.getInfoListener()).isNotNull();
assertThat(shadowMediaRecorder.getInfoListener()).isSameAs((MediaRecorder.OnInfoListener) listener);
}
@Test
public void testOutputFile() throws Exception {
assertThat(shadowMediaRecorder.getState()).isNotEqualTo(ShadowMediaRecorder.STATE_DATA_SOURCE_CONFIGURED);
assertThat(shadowMediaRecorder.getOutputPath()).isNull();
mediaRecorder.setOutputFile("/dev/null");
assertThat(shadowMediaRecorder.getOutputPath()).isEqualTo("/dev/null");
assertThat(shadowMediaRecorder.getState()).isEqualTo(ShadowMediaRecorder.STATE_DATA_SOURCE_CONFIGURED);
}
@Test
public void testOutputFormat() throws Exception {
assertThat(shadowMediaRecorder.getState()).isNotEqualTo(ShadowMediaRecorder.STATE_DATA_SOURCE_CONFIGURED);
assertThat(shadowMediaRecorder.getOutputFormat()).isNotEqualTo(MediaRecorder.OutputFormat.MPEG_4);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
assertThat(shadowMediaRecorder.getOutputFormat()).isEqualTo(MediaRecorder.OutputFormat.MPEG_4);
assertThat(shadowMediaRecorder.getState()).isEqualTo(ShadowMediaRecorder.STATE_DATA_SOURCE_CONFIGURED);
}
@Test
public void testPreviewDisplay() throws Exception {
assertThat(shadowMediaRecorder.getState()).isNotEqualTo(ShadowMediaRecorder.STATE_DATA_SOURCE_CONFIGURED);
assertThat(shadowMediaRecorder.getPreviewDisplay()).isNull();
Surface surface = Shadow.newInstanceOf(Surface.class);
mediaRecorder.setPreviewDisplay(surface);
assertThat(shadowMediaRecorder.getPreviewDisplay()).isNotNull();
assertThat(shadowMediaRecorder.getPreviewDisplay()).isSameAs(surface);
assertThat(shadowMediaRecorder.getState()).isEqualTo(ShadowMediaRecorder.STATE_DATA_SOURCE_CONFIGURED);
}
@Test
public void testVideoEncoder() throws Exception {
assertThat(shadowMediaRecorder.getState()).isNotEqualTo(ShadowMediaRecorder.STATE_DATA_SOURCE_CONFIGURED);
assertThat(shadowMediaRecorder.getVideoEncoder()).isNotEqualTo(MediaRecorder.VideoEncoder.H264);
mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
assertThat(shadowMediaRecorder.getVideoEncoder()).isEqualTo(MediaRecorder.VideoEncoder.H264);
assertThat(shadowMediaRecorder.getState()).isEqualTo(ShadowMediaRecorder.STATE_DATA_SOURCE_CONFIGURED);
}
@Test
public void testVideoEncodingBitRate() throws Exception {
assertThat(shadowMediaRecorder.getVideoEncodingBitRate()).isNotEqualTo(320000);
mediaRecorder.setVideoEncodingBitRate(320000);
assertThat(shadowMediaRecorder.getVideoEncodingBitRate()).isEqualTo(320000);
}
@Test
public void testVideoFrameRate() throws Exception {
assertThat(shadowMediaRecorder.getState()).isNotEqualTo(ShadowMediaRecorder.STATE_DATA_SOURCE_CONFIGURED);
assertThat(shadowMediaRecorder.getVideoFrameRate()).isNotEqualTo(30);
mediaRecorder.setVideoFrameRate(30);
assertThat(shadowMediaRecorder.getVideoFrameRate()).isEqualTo(30);
assertThat(shadowMediaRecorder.getState()).isEqualTo(ShadowMediaRecorder.STATE_DATA_SOURCE_CONFIGURED);
}
@Test
public void testVideoSize() throws Exception {
assertThat(shadowMediaRecorder.getState()).isNotEqualTo(ShadowMediaRecorder.STATE_DATA_SOURCE_CONFIGURED);
assertThat(shadowMediaRecorder.getVideoWidth()).isNotEqualTo(640);
assertThat(shadowMediaRecorder.getVideoHeight()).isNotEqualTo(480);
mediaRecorder.setVideoSize(640, 480);
assertThat(shadowMediaRecorder.getVideoWidth()).isEqualTo(640);
assertThat(shadowMediaRecorder.getVideoHeight()).isEqualTo(480);
assertThat(shadowMediaRecorder.getState()).isEqualTo(ShadowMediaRecorder.STATE_DATA_SOURCE_CONFIGURED);
}
@Test
public void testVideoSource() throws Exception {
assertThat(shadowMediaRecorder.getVideoSource()).isNotEqualTo(MediaRecorder.VideoSource.CAMERA);
assertThat(shadowMediaRecorder.getState()).isNotEqualTo(ShadowMediaRecorder.STATE_INITIALIZED);
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
assertThat(shadowMediaRecorder.getVideoSource()).isEqualTo(MediaRecorder.VideoSource.CAMERA);
assertThat(shadowMediaRecorder.getState()).isEqualTo(ShadowMediaRecorder.STATE_INITIALIZED);
}
@Test
public void testPrepare() throws Exception {
assertThat(shadowMediaRecorder.getState()).isNotEqualTo(ShadowMediaRecorder.STATE_PREPARED);
mediaRecorder.prepare();
assertThat(shadowMediaRecorder.getState()).isEqualTo(ShadowMediaRecorder.STATE_PREPARED);
}
@Test
public void testStart() throws Exception {
mediaRecorder.prepare();
assertThat(shadowMediaRecorder.getState()).isNotEqualTo(ShadowMediaRecorder.STATE_RECORDING);
mediaRecorder.start();
assertThat(shadowMediaRecorder.getState()).isEqualTo(ShadowMediaRecorder.STATE_RECORDING);
}
@Test
public void testStop() throws Exception {
mediaRecorder.start();
assertThat(shadowMediaRecorder.getState()).isEqualTo(ShadowMediaRecorder.STATE_RECORDING);
mediaRecorder.stop();
assertThat(shadowMediaRecorder.getState()).isEqualTo(ShadowMediaRecorder.STATE_INITIAL);
}
@Test
public void testReset() throws Exception {
mediaRecorder.start();
assertThat(shadowMediaRecorder.getState()).isEqualTo(ShadowMediaRecorder.STATE_RECORDING);
mediaRecorder.reset();
assertThat(shadowMediaRecorder.getState()).isEqualTo(ShadowMediaRecorder.STATE_INITIAL);
}
@Test
public void testRelease() throws Exception {
mediaRecorder.start();
mediaRecorder.reset();
assertThat(shadowMediaRecorder.getState()).isEqualTo(ShadowMediaRecorder.STATE_INITIAL);
mediaRecorder.release();
assertThat(shadowMediaRecorder.getState()).isEqualTo(ShadowMediaRecorder.STATE_RELEASED);
}
private class TestErrorListener implements MediaRecorder.OnErrorListener {
@Override
public void onError(MediaRecorder arg0, int arg1, int arg2) {
}
}
private class TestInfoListener implements MediaRecorder.OnInfoListener {
@Override
public void onInfo(MediaRecorder mr, int what, int extra) {
}
}
}