@@ -940,7 +940,47 @@ void main() {
940
940
});
941
941
942
942
test (
943
- 'onStreamedFrameAvaiable returns stream that responds expectedly to being listened to' ,
943
+ 'onStreamedFrameAvailable emits CameraImageData when listened to after cancelation' ,
944
+ () async {
945
+ final FakeAndroidCameraCameraX camera =
946
+ FakeAndroidCameraCameraX (shouldCreateDetachedObjectForTesting: true );
947
+ final MockProcessCameraProvider mockProcessCameraProvider =
948
+ MockProcessCameraProvider ();
949
+ final MockCamera mockCamera = MockCamera ();
950
+ const int cameraId = 22 ;
951
+
952
+ camera.processCameraProvider = mockProcessCameraProvider;
953
+ camera.cameraSelector = MockCameraSelector ();
954
+
955
+ when (mockProcessCameraProvider.bindToLifecycle (any, any))
956
+ .thenAnswer ((_) => Future <Camera >.value (mockCamera));
957
+ when (mockCamera.getCameraInfo ())
958
+ .thenAnswer ((_) => Future <CameraInfo >.value (MockCameraInfo ()));
959
+
960
+ final CameraImageData mockCameraImageData = MockCameraImageData ();
961
+ final Stream <CameraImageData > imageStream =
962
+ camera.onStreamedFrameAvailable (cameraId);
963
+
964
+ // Listen to image stream.
965
+ final StreamSubscription <CameraImageData > imageStreamSubscription =
966
+ imageStream.listen ((CameraImageData data) {});
967
+
968
+ // Cancel subscription to image stream.
969
+ await imageStreamSubscription.cancel ();
970
+ final Stream <CameraImageData > imageStream2 =
971
+ camera.onStreamedFrameAvailable (cameraId);
972
+
973
+ // Listen to image stream again.
974
+ final StreamQueue <CameraImageData > streamQueue =
975
+ StreamQueue <CameraImageData >(imageStream2);
976
+ camera.cameraImageDataStreamController! .add (mockCameraImageData);
977
+
978
+ expect (await streamQueue.next, equals (mockCameraImageData));
979
+ await streamQueue.cancel ();
980
+ });
981
+
982
+ test (
983
+ 'onStreamedFrameAvailable returns stream that responds expectedly to being listened to' ,
944
984
() async {
945
985
final FakeAndroidCameraCameraX camera =
946
986
FakeAndroidCameraCameraX (shouldCreateDetachedObjectForTesting: true );
@@ -963,6 +1003,8 @@ void main() {
963
1003
camera.processCameraProvider = mockProcessCameraProvider;
964
1004
camera.cameraSelector = mockCameraSelector;
965
1005
1006
+ when (mockProcessCameraProvider.isBound (camera.mockImageAnalysis))
1007
+ .thenAnswer ((_) async => Future <bool >.value (false ));
966
1008
when (mockProcessCameraProvider.bindToLifecycle (
967
1009
mockCameraSelector, < UseCase > [camera.mockImageAnalysis]))
968
1010
.thenAnswer ((_) async => mockCamera);
@@ -989,7 +1031,9 @@ void main() {
989
1031
final Analyzer capturedAnalyzer =
990
1032
verify (camera.mockImageAnalysis.setAnalyzer (captureAny)).captured.single
991
1033
as Analyzer ;
992
- verify (mockProcessCameraProvider.bindToLifecycle (
1034
+ await untilCalled (
1035
+ mockProcessCameraProvider.isBound (camera.mockImageAnalysis));
1036
+ await untilCalled (mockProcessCameraProvider.bindToLifecycle (
993
1037
mockCameraSelector, < UseCase > [camera.mockImageAnalysis]));
994
1038
995
1039
await capturedAnalyzer.analyze (mockImageProxy);
@@ -1011,7 +1055,7 @@ void main() {
1011
1055
});
1012
1056
1013
1057
test (
1014
- 'onStreamedFrameAvaiable returns stream that responds expectedly to being canceled' ,
1058
+ 'onStreamedFrameAvailable returns stream that responds expectedly to being canceled' ,
1015
1059
() async {
1016
1060
final FakeAndroidCameraCameraX camera =
1017
1061
FakeAndroidCameraCameraX (shouldCreateDetachedObjectForTesting: true );
0 commit comments