19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage com.android.mediaframeworktest.unit; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Log; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.media.MediaRecorder; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.AndroidTestCase; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A template class for running a method under test in all possible 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * states of a MediaRecorder object. 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see com.android.mediaframeworktest.unit.MediaRecorderStopStateUnitTest 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for an example of using this class. 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A typical concrete unit test class would implement the 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * MediaRecorderMethodUnderTest interface and have a reference to an object of 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this class. Then it calls runTestOnMethod() to actually perform the unit 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * tests. It is recommended that the toString() method of the concrete unit test 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * class be overridden to use the actual method name under test for logging 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * purpose. 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass MediaRecorderStateUnitTestTemplate extends AndroidTestCase { 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String RECORD_OUTPUT_PATH = "/sdcard/recording.3gp"; 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int OUTPUT_FORMAT= MediaRecorder.OutputFormat.THREE_GPP; 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int AUDIO_ENCODER = MediaRecorder.AudioEncoder.AMR_NB; 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int AUDIO_SOURCE = MediaRecorder.AudioSource.MIC; 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String TAG = "MediaRecorderStateUnitTest"; 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private MediaRecorderStateErrors mStateErrors = new MediaRecorderStateErrors(); 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private MediaRecorder mMediaRecorder = new MediaRecorder(); 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private MediaRecorderStateErrors.MediaRecorderState mMediaRecorderState = null; 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private MediaRecorderMethodUnderTest mMethodUnderTest = null; 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Runs the given method under test in all possible states of a MediaRecorder 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * object. 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param testMethod the method under test. 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void runTestOnMethod(MediaRecorderMethodUnderTest testMethod) { 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMethodUnderTest = testMethod; 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mMethodUnderTest != null) { // Method under test has been set? 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project checkMethodUnderTestInAllPossibleStates(); 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMethodUnderTest.checkStateErrors(mStateErrors); 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cleanUp(); 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Calls method under test in the given state of the MediaRecorder object. 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param state the MediaRecorder state in which the method under test is called. 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void callMediaRecorderMethodUnderTestInState(MediaRecorderStateErrors.MediaRecorderState state) { 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "call " + mMethodUnderTest + ": started in state " + state); 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setMediaRecorderToState(state); 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMethodUnderTest.invokeMethodUnderTest(mMediaRecorder); 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch(Exception e) { 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setStateError(mMediaRecorderState, true); 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "call " + mMethodUnderTest + ": ended in state " + state); 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The following setMediaRecorderToXXXStateXXX methods sets the MediaRecorder 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * object to the corresponding state, given the assumption that reset() 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * always resets the MediaRecorder object to Initial (after reset) state. 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void setMediaRecorderToInitialStateAfterReset() { 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMediaRecorder.reset(); 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch(Exception e) { 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fail("setMediaRecorderToInitialStateAfterReset: Exception " + e.getClass().getName() + " was thrown."); 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // FIXME: 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // In the past, stop() == reset(). 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // However, this is no longer true. The plan is to have a STOPPED state. 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // and from STOPPED state, start can be called without the need to 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // do the recording configuration again. 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void setMediaRecorderToInitialStateAfterStop() { 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMediaRecorder.reset(); 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMediaRecorder.setAudioSource(AUDIO_SOURCE); 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMediaRecorder.setOutputFormat(OUTPUT_FORMAT); 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMediaRecorder.setAudioEncoder(AUDIO_ENCODER); 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMediaRecorder.setOutputFile(RECORD_OUTPUT_PATH); 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMediaRecorder.prepare(); 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMediaRecorder.start(); 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMediaRecorder.stop(); 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project*/ 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch(Exception e) { 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fail("setMediaRecorderToInitialStateAfterReset: Exception " + e.getClass().getName() + " was thrown."); 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void setMediaRecorderToInitializedState() { 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMediaRecorder.reset(); 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mMethodUnderTest.toString() != "setAudioSource()") { 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMediaRecorder.setAudioSource(AUDIO_SOURCE); 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch(Exception e) { 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fail("setMediaRecorderToInitializedState: Exception " + e.getClass().getName() + " was thrown."); 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void setMediaRecorderToPreparedState() { 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMediaRecorder.reset(); 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMediaRecorder.setAudioSource(AUDIO_SOURCE); 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMediaRecorder.setOutputFormat(OUTPUT_FORMAT); 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMediaRecorder.setAudioEncoder(AUDIO_ENCODER); 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMediaRecorder.setOutputFile(RECORD_OUTPUT_PATH); 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMediaRecorder.prepare(); 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch(Exception e) { 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fail("setMediaRecorderToPreparedState: Exception " + e.getClass().getName() + " was thrown."); 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void setMediaRecorderToRecordingState() { 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMediaRecorder.reset(); 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMediaRecorder.setAudioSource(AUDIO_SOURCE); 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMediaRecorder.setOutputFormat(OUTPUT_FORMAT); 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMediaRecorder.setAudioEncoder(AUDIO_ENCODER); 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMediaRecorder.setOutputFile(RECORD_OUTPUT_PATH); 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMediaRecorder.prepare(); 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMediaRecorder.start(); 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch(Exception e) { 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fail("setMediaRecorderToRecordingState: Exception " + e.getClass().getName() + " was thrown."); 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void setMediaRecorderToDataSourceConfiguredState() { 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMediaRecorder.reset(); 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMediaRecorder.setAudioSource(AUDIO_SOURCE); 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMediaRecorder.setOutputFormat(OUTPUT_FORMAT); 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* Skip setAudioEncoder() and setOutputFile() calls if 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the method under test is setAudioEncoder() since this 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * method can only be called once even in the DATASOURCECONFIGURED state 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mMethodUnderTest.toString() != "setAudioEncoder()") { 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMediaRecorder.setAudioEncoder(AUDIO_ENCODER); 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mMethodUnderTest.toString() != "setOutputFile()") { 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMediaRecorder.setOutputFile(RECORD_OUTPUT_PATH); 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch(Exception e) { 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fail("setMediaRecorderToDataSourceConfiguredState: Exception " + e.getClass().getName() + " was thrown."); 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * There are a lot of ways to force the MediaRecorder object to enter 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the Error state. We arbitrary choose one here. 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void setMediaRecorderToErrorState() { 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMediaRecorder.reset(); 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* Skip setAudioSource() if the method under test is setAudioEncoder() 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Because, otherwise, it is valid to call setAudioEncoder() after 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * start() since start() will fail, and then the mMediaRecorder 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * won't be set to the Error state 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mMethodUnderTest.toString() != "setAudioEncoder()") { 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMediaRecorder.setAudioSource(AUDIO_SOURCE); 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* Skip setOutputFormat if the method under test is setOutputFile() 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Because, otherwise, it is valid to call setOutputFile() after 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * start() since start() will fail, and then the mMediaRecorder 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * won't be set to the Error state 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mMethodUnderTest.toString() != "setOutputFile()") { 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMediaRecorder.setOutputFormat(OUTPUT_FORMAT); 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMediaRecorder.start(); 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch(Exception e) { 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!(e instanceof IllegalStateException)) { 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fail("setMediaRecorderToErrorState: Exception " + e.getClass().getName() + " was thrown."); 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "setMediaRecorderToErrorState: done."); 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the state of the MediaRecorder object to the specified one. 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param state the state of the MediaRecorder object. 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void setMediaRecorderToState(MediaRecorderStateErrors.MediaRecorderState state) { 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMediaRecorderState = state; 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch(state) { 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case INITIAL: 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Does nothing. 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case INITIAL_AFTER_RESET: 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setMediaRecorderToInitialStateAfterReset(); 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case INITIAL_AFTER_STOP: 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setMediaRecorderToInitialStateAfterStop(); 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case INITIALIZED: 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setMediaRecorderToInitializedState(); 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DATASOURCECONFIGURED: 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setMediaRecorderToDataSourceConfiguredState(); 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case PREPARED: 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setMediaRecorderToPreparedState(); 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case RECORDING: 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setMediaRecorderToRecordingState(); 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case ERROR: 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setMediaRecorderToErrorState(); 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the error value of the corresponding state to the given error. 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param state the state of the MediaRecorder object. 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param error the value of the state error to be set. 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void setStateError(MediaRecorderStateErrors.MediaRecorderState state, boolean error) { 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch(state) { 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case INITIAL: 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStateErrors.errorInInitialState = error; 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case INITIAL_AFTER_RESET: 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStateErrors.errorInInitialStateAfterReset = error; 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case INITIAL_AFTER_STOP: 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStateErrors.errorInInitialStateAfterStop = error; 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case INITIALIZED: 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStateErrors.errorInInitializedState = error; 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DATASOURCECONFIGURED: 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStateErrors.errorInDataSourceConfiguredState = error; 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case PREPARED: 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStateErrors.errorInPreparedState = error; 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case RECORDING: 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStateErrors.errorInRecordingState = error; 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case ERROR: 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStateErrors.errorInErrorState = error; 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void checkInitialState() { 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project callMediaRecorderMethodUnderTestInState(MediaRecorderStateErrors.MediaRecorderState.INITIAL); 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void checkInitialStateAfterReset() { 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project callMediaRecorderMethodUnderTestInState(MediaRecorderStateErrors.MediaRecorderState.INITIAL_AFTER_RESET); 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void checkInitialStateAfterStop() { 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project callMediaRecorderMethodUnderTestInState(MediaRecorderStateErrors.MediaRecorderState.INITIAL_AFTER_STOP); 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void checkInitializedState() { 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project callMediaRecorderMethodUnderTestInState(MediaRecorderStateErrors.MediaRecorderState.INITIALIZED); 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void checkPreparedState() { 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project callMediaRecorderMethodUnderTestInState(MediaRecorderStateErrors.MediaRecorderState.PREPARED); 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void checkRecordingState() { 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project callMediaRecorderMethodUnderTestInState(MediaRecorderStateErrors.MediaRecorderState.RECORDING); 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void checkDataSourceConfiguredState() { 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project callMediaRecorderMethodUnderTestInState(MediaRecorderStateErrors.MediaRecorderState.DATASOURCECONFIGURED); 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void checkErrorState() { 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project callMediaRecorderMethodUnderTestInState(MediaRecorderStateErrors.MediaRecorderState.ERROR); 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Checks the given method under test in all possible states of the MediaRecorder object. 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void checkMethodUnderTestInAllPossibleStates() { 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Must be called first. 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project checkInitialState(); 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // The sequence of the following method calls should not 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // affect the test results. 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project checkErrorState(); 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project checkInitialStateAfterReset(); 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project checkInitialStateAfterStop(); 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project checkInitializedState(); 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project checkRecordingState(); 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project checkDataSourceConfiguredState(); 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project checkPreparedState(); 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Cleans up all the internal object references. 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void cleanUp() { 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMediaRecorder.release(); 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMediaRecorder = null; 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMediaRecorderState = null; 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStateErrors = null; 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMethodUnderTest = null; 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 341