2
2
// Use of this source code is governed by a BSD-style license that can be
3
3
// found in the LICENSE file.
4
4
5
+ import 'dart:async' ;
6
+
5
7
import 'package:camera/camera.dart' ;
6
8
import 'package:camera_platform_interface/camera_platform_interface.dart' ;
7
9
import 'package:flutter_test/flutter_test.dart' ;
8
10
9
11
import 'camera_test.dart' ;
10
- import 'utils/method_channel_mock.dart' ;
11
12
12
13
void main () {
13
14
TestWidgetsFlutterBinding .ensureInitialized ();
15
+ late MockStreamingCameraPlatform mockPlatform;
14
16
15
17
setUp (() {
16
- CameraPlatform .instance = MockCameraPlatform ();
18
+ mockPlatform = MockStreamingCameraPlatform ();
19
+ CameraPlatform .instance = mockPlatform;
17
20
});
18
21
19
22
test ('startImageStream() throws $CameraException when uninitialized' , () {
@@ -87,13 +90,6 @@ void main() {
87
90
});
88
91
89
92
test ('startImageStream() calls CameraPlatform' , () async {
90
- final MethodChannelMock cameraChannelMock = MethodChannelMock (
91
- channelName: 'plugins.flutter.io/camera' ,
92
- methods: < String , dynamic > {'startImageStream' : < String , dynamic > {}});
93
- final MethodChannelMock streamChannelMock = MethodChannelMock (
94
- channelName: 'plugins.flutter.io/camera/imageStream' ,
95
- methods: < String , dynamic > {'listen' : < String , dynamic > {}});
96
-
97
93
final CameraController cameraController = CameraController (
98
94
const CameraDescription (
99
95
name: 'cam' ,
@@ -104,10 +100,8 @@ void main() {
104
100
105
101
await cameraController.startImageStream ((CameraImage image) => null );
106
102
107
- expect (cameraChannelMock.log,
108
- < Matcher > [isMethodCall ('startImageStream' , arguments: null )]);
109
- expect (streamChannelMock.log,
110
- < Matcher > [isMethodCall ('listen' , arguments: null )]);
103
+ expect (mockPlatform.streamCallLog,
104
+ < String > ['onStreamedFrameAvailable' , 'listen' ]);
111
105
});
112
106
113
107
test ('stopImageStream() throws $CameraException when uninitialized' , () {
@@ -178,19 +172,6 @@ void main() {
178
172
});
179
173
180
174
test ('stopImageStream() intended behaviour' , () async {
181
- final MethodChannelMock cameraChannelMock = MethodChannelMock (
182
- channelName: 'plugins.flutter.io/camera' ,
183
- methods: < String , dynamic > {
184
- 'startImageStream' : < String , dynamic > {},
185
- 'stopImageStream' : < String , dynamic > {}
186
- });
187
- final MethodChannelMock streamChannelMock = MethodChannelMock (
188
- channelName: 'plugins.flutter.io/camera/imageStream' ,
189
- methods: < String , dynamic > {
190
- 'listen' : < String , dynamic > {},
191
- 'cancel' : < String , dynamic > {}
192
- });
193
-
194
175
final CameraController cameraController = CameraController (
195
176
const CameraDescription (
196
177
name: 'cam' ,
@@ -201,14 +182,33 @@ void main() {
201
182
await cameraController.startImageStream ((CameraImage image) => null );
202
183
await cameraController.stopImageStream ();
203
184
204
- expect (cameraChannelMock.log, < Matcher > [
205
- isMethodCall ('startImageStream' , arguments: null ),
206
- isMethodCall ('stopImageStream' , arguments: null )
207
- ]);
208
-
209
- expect (streamChannelMock.log, < Matcher > [
210
- isMethodCall ('listen' , arguments: null ),
211
- isMethodCall ('cancel' , arguments: null )
212
- ]);
185
+ expect (mockPlatform.streamCallLog,
186
+ < String > ['onStreamedFrameAvailable' , 'listen' , 'cancel' ]);
213
187
});
214
188
}
189
+
190
+ class MockStreamingCameraPlatform extends MockCameraPlatform {
191
+ List <String > streamCallLog = < String > [];
192
+
193
+ StreamController <CameraImageData >? _streamController;
194
+
195
+ @override
196
+ Stream <CameraImageData > onStreamedFrameAvailable (int cameraId,
197
+ {CameraImageStreamOptions ? options}) {
198
+ streamCallLog.add ('onStreamedFrameAvailable' );
199
+ _streamController = StreamController <CameraImageData >(
200
+ onListen: _onFrameStreamListen,
201
+ onCancel: _onFrameStreamCancel,
202
+ );
203
+ return _streamController! .stream;
204
+ }
205
+
206
+ void _onFrameStreamListen () {
207
+ streamCallLog.add ('listen' );
208
+ }
209
+
210
+ FutureOr <void > _onFrameStreamCancel () async {
211
+ streamCallLog.add ('cancel' );
212
+ _streamController = null ;
213
+ }
214
+ }
0 commit comments