@@ -785,9 +785,9 @@ void main() {
785785
786786 group ('video recording' , () {
787787 test (
788- 'startVideoRecording binds video capture use case and starts the recording' ,
788+ 'startVideoCapturing binds video capture use case and starts the recording' ,
789789 () async {
790- //Set up mocks and constants.
790+ // Set up mocks and constants.
791791 final FakeAndroidCameraCameraX camera = FakeAndroidCameraCameraX ();
792792 camera.processCameraProvider = MockProcessCameraProvider ();
793793 camera.cameraSelector = MockCameraSelector ();
@@ -815,7 +815,7 @@ void main() {
815815 camera.cameraSelector! , < UseCase > [camera.videoCapture! ]))
816816 .thenAnswer ((_) async => camera.camera! );
817817
818- await camera.startVideoRecording ( cameraId);
818+ await camera.startVideoCapturing ( const VideoCaptureOptions ( cameraId) );
819819
820820 verify (camera.processCameraProvider! .bindToLifecycle (
821821 camera.cameraSelector! , < UseCase > [camera.videoCapture! ]));
@@ -824,9 +824,9 @@ void main() {
824824 });
825825
826826 test (
827- 'startVideoRecording binds video capture use case and starts the recording'
827+ 'startVideoCapturing binds video capture use case and starts the recording'
828828 ' on first call, and does nothing on second call' , () async {
829- //Set up mocks and constants.
829+ // Set up mocks and constants.
830830 final FakeAndroidCameraCameraX camera = FakeAndroidCameraCameraX ();
831831 camera.processCameraProvider = MockProcessCameraProvider ();
832832 camera.cameraSelector = MockCameraSelector ();
@@ -854,14 +854,14 @@ void main() {
854854 camera.cameraSelector! , < UseCase > [camera.videoCapture! ]))
855855 .thenAnswer ((_) async => camera.camera! );
856856
857- await camera.startVideoRecording ( cameraId);
857+ await camera.startVideoCapturing ( const VideoCaptureOptions ( cameraId) );
858858
859859 verify (camera.processCameraProvider! .bindToLifecycle (
860860 camera.cameraSelector! , < UseCase > [camera.videoCapture! ]));
861861 expect (camera.pendingRecording, equals (mockPendingRecording));
862862 expect (camera.recording, mockRecording);
863863
864- await camera.startVideoRecording ( cameraId);
864+ await camera.startVideoCapturing ( const VideoCaptureOptions ( cameraId) );
865865 // Verify that each of these calls happened only once.
866866 verify (mockSystemServicesApi.getTempFilePath (camera.videoPrefix, '.temp' ))
867867 .called (1 );
@@ -872,6 +872,55 @@ void main() {
872872 verifyNoMoreInteractions (mockPendingRecording);
873873 });
874874
875+ test (
876+ 'startVideoCapturing called with stream options starts image streaming' ,
877+ () async {
878+ // Set up mocks and constants.
879+ final FakeAndroidCameraCameraX camera =
880+ FakeAndroidCameraCameraX (shouldCreateDetachedObjectForTesting: true );
881+ final MockProcessCameraProvider mockProcessCameraProvider =
882+ MockProcessCameraProvider ();
883+ camera.processCameraProvider = mockProcessCameraProvider;
884+ camera.cameraSelector = MockCameraSelector ();
885+ camera.recorder = camera.testRecorder;
886+ camera.videoCapture = camera.testVideoCapture;
887+ camera.imageAnalysis = camera.testImageAnalysis;
888+ camera.camera = MockCamera ();
889+ final MockPendingRecording mockPendingRecording = MockPendingRecording ();
890+ final TestSystemServicesHostApi mockSystemServicesApi =
891+ MockTestSystemServicesHostApi ();
892+ TestSystemServicesHostApi .setup (mockSystemServicesApi);
893+
894+ const int cameraId = 17 ;
895+ const String outputPath = '/temp/MOV123.temp' ;
896+ final Completer <CameraImageData > imageDataCompleter =
897+ Completer <CameraImageData >();
898+ final VideoCaptureOptions videoCaptureOptions = VideoCaptureOptions (
899+ cameraId,
900+ streamCallback: (CameraImageData imageData) =>
901+ imageDataCompleter.complete (imageData));
902+
903+ // Mock method calls.
904+ when (camera.processCameraProvider! .isBound (camera.videoCapture! ))
905+ .thenAnswer ((_) async => true );
906+ when (mockSystemServicesApi.getTempFilePath (camera.videoPrefix, '.temp' ))
907+ .thenReturn (outputPath);
908+ when (camera.testRecorder.prepareRecording (outputPath))
909+ .thenAnswer ((_) async => mockPendingRecording);
910+ when (mockProcessCameraProvider.bindToLifecycle (any, any))
911+ .thenAnswer ((_) => Future <Camera >.value (camera.camera));
912+ when (camera.camera! .getCameraInfo ())
913+ .thenAnswer ((_) => Future <CameraInfo >.value (MockCameraInfo ()));
914+
915+ await camera.startVideoCapturing (videoCaptureOptions);
916+
917+ final CameraImageData mockCameraImageData = MockCameraImageData ();
918+ camera.cameraImageDataStreamController! .add (mockCameraImageData);
919+
920+ expect (imageDataCompleter.future, isNotNull);
921+ await camera.cameraImageDataStreamController! .close ();
922+ });
923+
875924 test ('pauseVideoRecording pauses the recording' , () async {
876925 final AndroidCameraCameraX camera = AndroidCameraCameraX ();
877926 final MockRecording recording = MockRecording ();
0 commit comments