diff --git a/packages/camera/camera_web/example/build.yaml b/packages/camera/camera_web/example/build.yaml new file mode 100644 index 00000000000..88fb0778cc0 --- /dev/null +++ b/packages/camera/camera_web/example/build.yaml @@ -0,0 +1,10 @@ +targets: + $default: + sources: + - integration_test/** + - lib/$lib$ + - $package$ + builders: + mockito|mockBuilder: + generate_for: + - integration_test/** diff --git a/packages/camera/camera_web/example/integration_test/camera_bitrate_test.dart b/packages/camera/camera_web/example/integration_test/camera_bitrate_test.dart index 3e2c9bd40c9..fab60f12405 100644 --- a/packages/camera/camera_web/example/integration_test/camera_bitrate_test.dart +++ b/packages/camera/camera_web/example/integration_test/camera_bitrate_test.dart @@ -12,7 +12,7 @@ import 'package:camera_web/src/camera.dart'; import 'package:camera_web/src/types/types.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:integration_test/integration_test.dart'; -import 'package:mocktail/mocktail.dart'; +import 'package:mockito/mockito.dart'; import 'package:web/web.dart'; import 'helpers/helpers.dart'; @@ -45,10 +45,6 @@ void main() { } } - setUpAll(() { - registerFallbackValue(MockCameraOptions()); - }); - testWidgets('Camera allows to control video bitrate', (WidgetTester tester) async { //const String supportedVideoType = 'video/webm'; @@ -97,14 +93,11 @@ void main() { final int cameraId = videoBitrate; when( - () { - return cameraService.getMediaStreamForOptions( - options, - cameraId: cameraId, - ); - }, - ).thenAnswer( - (_) => Future.value(canvasElement.captureStream())); + cameraService.getMediaStreamForOptions( + options, + cameraId: cameraId, + ), + ).thenAnswer((_) async => canvasElement.captureStream()); final Camera camera = Camera( textureId: cameraId, diff --git a/packages/camera/camera_web/example/integration_test/camera_service_test.dart b/packages/camera/camera_web/example/integration_test/camera_service_test.dart index 2ed0c54e633..b755bb249ae 100644 --- a/packages/camera/camera_web/example/integration_test/camera_service_test.dart +++ b/packages/camera/camera_web/example/integration_test/camera_service_test.dart @@ -9,14 +9,12 @@ import 'dart:js_interop_unsafe'; import 'package:camera_platform_interface/camera_platform_interface.dart'; // ignore_for_file: implementation_imports -import 'package:camera_web/src/camera.dart'; import 'package:camera_web/src/camera_service.dart'; -import 'package:camera_web/src/shims/dart_js_util.dart'; import 'package:camera_web/src/types/types.dart'; import 'package:flutter/services.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:integration_test/integration_test.dart'; -import 'package:mocktail/mocktail.dart'; +import 'package:mockito/mockito.dart'; import 'package:web/web.dart' as web; import 'helpers/helpers.dart'; @@ -35,7 +33,7 @@ void main() { late web.Navigator navigator; late web.MediaDevices mediaDevices; - late JsUtil jsUtil; + late MockJsUtil jsUtil; late CameraService cameraService; @@ -54,10 +52,8 @@ void main() { jsUtil = MockJsUtil(); - registerFallbackValue(createJSInteropWrapper(MockWindow())); - // Mock JsUtil to return the real getProperty from dart:js_util. - when(() => jsUtil.getProperty(any(), any())).thenAnswer( + when(jsUtil.getProperty(any, any)).thenAnswer( (Invocation invocation) => (invocation.positionalArguments[0] as JSObject) .getProperty(invocation.positionalArguments[1] as JSAny), @@ -427,7 +423,7 @@ void main() { }); group('getZoomLevelCapabilityForCamera', () { - late Camera camera; + late MockCamera camera; late MockMediaStreamTrack mockVideoTrack; late List videoTracks; @@ -440,8 +436,8 @@ void main() { as web.MediaStreamTrack, ]; - when(() => camera.textureId).thenReturn(0); - when(() => camera.stream).thenReturn( + when(camera.textureId).thenReturn(0); + when(camera.stream).thenReturn( createJSInteropWrapper(FakeMediaStream(videoTracks)) as web.MediaStream, ); @@ -512,7 +508,7 @@ void main() { }.toJS; // Create a camera stream with no video tracks. - when(() => camera.stream).thenReturn( + when(camera.stream).thenReturn( createJSInteropWrapper(FakeMediaStream([])) as web.MediaStream, ); @@ -566,7 +562,7 @@ void main() { videoTrack = createJSInteropWrapper(mockVideoTrack) as web.MediaStreamTrack; - when(() => jsUtil.hasProperty(videoTrack, 'getCapabilities'.toJS)) + when(jsUtil.hasProperty(videoTrack, 'getCapabilities'.toJS)) .thenReturn(true); mockMediaDevices.getSupportedConstraints = () { @@ -601,7 +597,7 @@ void main() { ); }.toJS; - when(() => jsUtil.hasProperty(videoTrack, 'getCapabilities'.toJS)) + when(jsUtil.hasProperty(videoTrack, 'getCapabilities'.toJS)) .thenReturn(true); final String? facingMode = @@ -636,7 +632,7 @@ void main() { return web.MediaTrackSettings(facingMode: ''); }.toJS; - when(() => jsUtil.hasProperty(videoTrack, 'getCapabilities'.toJS)) + when(jsUtil.hasProperty(videoTrack, 'getCapabilities'.toJS)) .thenReturn(false); final String? facingMode = diff --git a/packages/camera/camera_web/example/integration_test/camera_test.dart b/packages/camera/camera_web/example/integration_test/camera_test.dart index e953a06b0e8..520da0e87a8 100644 --- a/packages/camera/camera_web/example/integration_test/camera_test.dart +++ b/packages/camera/camera_web/example/integration_test/camera_test.dart @@ -11,11 +11,10 @@ import 'package:async/async.dart'; import 'package:camera_platform_interface/camera_platform_interface.dart'; // ignore_for_file: implementation_imports import 'package:camera_web/src/camera.dart'; -import 'package:camera_web/src/camera_service.dart'; import 'package:camera_web/src/types/types.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:integration_test/integration_test.dart'; -import 'package:mocktail/mocktail.dart'; +import 'package:mockito/mockito.dart'; import 'package:web/web.dart'; import 'helpers/helpers.dart'; @@ -35,7 +34,7 @@ void main() { late MediaDevices mediaDevices; late MediaStream mediaStream; - late CameraService cameraService; + late MockCameraService cameraService; setUp(() { mockWindow = MockWindow(); @@ -56,17 +55,13 @@ void main() { mediaStream = videoElement.captureStream(); when( - () => cameraService.getMediaStreamForOptions( - any(), - cameraId: any(named: 'cameraId'), + cameraService.getMediaStreamForOptions( + any, + cameraId: anyNamed('cameraId'), ), ).thenAnswer((_) => Future.value(mediaStream)); }); - setUpAll(() { - registerFallbackValue(MockCameraOptions()); - }); - group('initialize', () { testWidgets( 'calls CameraService.getMediaStreamForOptions ' @@ -87,7 +82,7 @@ void main() { await camera.initialize(); verify( - () => cameraService.getMediaStreamForOptions( + cameraService.getMediaStreamForOptions( options, cameraId: textureId, ), @@ -189,8 +184,12 @@ void main() { final Exception exception = Exception('A media stream exception occured.'); - when(() => cameraService.getMediaStreamForOptions(any(), - cameraId: any(named: 'cameraId'))).thenThrow(exception); + when( + cameraService.getMediaStreamForOptions( + any, + cameraId: anyNamed('cameraId'), + ), + ).thenThrow(exception); final Camera camera = Camera( textureId: textureId, @@ -253,7 +252,7 @@ void main() { // Should be called twice: for initialize and play. verify( - () => cameraService.getMediaStreamForOptions( + cameraService.getMediaStreamForOptions( options, cameraId: textureId, ), @@ -697,12 +696,12 @@ void main() { as MediaStreamTrack, ); - when(() => cameraService.getZoomLevelCapabilityForCamera(camera)) + when(cameraService.getZoomLevelCapabilityForCamera(camera)) .thenReturn(zoomLevelCapability); final double maximumZoomLevel = camera.getMaxZoomLevel(); - verify(() => cameraService.getZoomLevelCapabilityForCamera(camera)) + verify(cameraService.getZoomLevelCapabilityForCamera(camera)) .called(1); expect( @@ -729,12 +728,12 @@ void main() { as MediaStreamTrack, ); - when(() => cameraService.getZoomLevelCapabilityForCamera(camera)) + when(cameraService.getZoomLevelCapabilityForCamera(camera)) .thenReturn(zoomLevelCapability); final double minimumZoomLevel = camera.getMinZoomLevel(); - verify(() => cameraService.getZoomLevelCapabilityForCamera(camera)) + verify(cameraService.getZoomLevelCapabilityForCamera(camera)) .called(1); expect( @@ -775,7 +774,7 @@ void main() { return Future.value().toJS; }.toJS; - when(() => cameraService.getZoomLevelCapabilityForCamera(camera)) + when(cameraService.getZoomLevelCapabilityForCamera(camera)) .thenReturn(zoomLevelCapability); const double zoom = 75.0; @@ -803,7 +802,7 @@ void main() { as MediaStreamTrack, ); - when(() => cameraService.getZoomLevelCapabilityForCamera(camera)) + when(cameraService.getZoomLevelCapabilityForCamera(camera)) .thenReturn(zoomLevelCapability); expect( @@ -839,7 +838,7 @@ void main() { as MediaStreamTrack, ); - when(() => cameraService.getZoomLevelCapabilityForCamera(camera)) + when(cameraService.getZoomLevelCapabilityForCamera(camera)) .thenReturn(zoomLevelCapability); expect( @@ -893,7 +892,7 @@ void main() { return MediaTrackSettings(facingMode: 'environment'); }.toJS; - when(() => cameraService.mapFacingModeToLensDirection('environment')) + when(cameraService.mapFacingModeToLensDirection('environment')) .thenReturn(CameraLensDirection.external); expect( @@ -1439,7 +1438,7 @@ void main() { ..isVideoTypeSupported = isVideoTypeSupported ..mediaRecorderOnErrorProvider = provider; - when(() => provider.forTarget(mediaRecorder)) + when(provider.forTarget(mediaRecorder)) .thenAnswer((_) => onErrorStreamController.stream); await camera.initialize(); @@ -1681,7 +1680,7 @@ void main() { ..mediaRecorder = mediaRecorder ..mediaRecorderOnErrorProvider = provider; - when(() => provider.forTarget(mediaRecorder)) + when(provider.forTarget(mediaRecorder)) .thenAnswer((_) => errorController.stream); final StreamQueue streamQueue = diff --git a/packages/camera/camera_web/example/integration_test/camera_web_test.dart b/packages/camera/camera_web/example/integration_test/camera_web_test.dart index ac31979eb17..248b129a5f8 100644 --- a/packages/camera/camera_web/example/integration_test/camera_web_test.dart +++ b/packages/camera/camera_web/example/integration_test/camera_web_test.dart @@ -13,13 +13,12 @@ import 'package:camera_platform_interface/camera_platform_interface.dart'; import 'package:camera_web/camera_web.dart'; // ignore_for_file: implementation_imports import 'package:camera_web/src/camera.dart'; -import 'package:camera_web/src/camera_service.dart'; import 'package:camera_web/src/types/types.dart'; import 'package:flutter/services.dart'; import 'package:flutter/widgets.dart' as widgets; import 'package:flutter_test/flutter_test.dart'; import 'package:integration_test/integration_test.dart'; -import 'package:mocktail/mocktail.dart'; +import 'package:mockito/mockito.dart'; import 'package:web/web.dart' hide MediaDeviceKind, OrientationType; import 'helpers/helpers.dart'; @@ -52,7 +51,7 @@ void main() { late Document document; late Element documentElement; - late CameraService cameraService; + late MockCameraService cameraService; setUp(() async { mockWindow = MockWindow(); @@ -89,12 +88,10 @@ void main() { cameraService = MockCameraService(); - registerFallbackValue(createJSInteropWrapper(MockWindow())); - when( - () => cameraService.getMediaStreamForOptions( - any(), - cameraId: any(named: 'cameraId'), + cameraService.getMediaStreamForOptions( + any, + cameraId: anyNamed('cameraId'), ), ).thenAnswer( (_) async => videoElement.captureStream(), @@ -105,12 +102,6 @@ void main() { )..window = window; }); - setUpAll(() { - registerFallbackValue(MockMediaStreamTrack()); - registerFallbackValue(MockCameraOptions()); - registerFallbackValue(FlashMode.off); - }); - testWidgets('CameraPlugin is the live instance', (WidgetTester tester) async { expect(CameraPlatform.instance, isA()); @@ -118,11 +109,7 @@ void main() { group('availableCameras', () { setUp(() { - when( - () => cameraService.getFacingModeForVideoTrack( - any(), - ), - ).thenReturn(null); + when(cameraService.getFacingModeForVideoTrack(any)).thenReturn(null); mockMediaDevices.enumerateDevices = () { return Future>.value( @@ -136,7 +123,7 @@ void main() { await CameraPlatform.instance.availableCameras(); verify( - () => cameraService.getMediaStreamForOptions(const CameraOptions()), + cameraService.getMediaStreamForOptions(const CameraOptions()), ).called(1); }); @@ -153,7 +140,7 @@ void main() { }.toJS; when( - () => cameraService.getMediaStreamForOptions(const CameraOptions()), + cameraService.getMediaStreamForOptions(const CameraOptions()), ).thenAnswer( (_) => Future.value( createJSInteropWrapper( @@ -189,7 +176,7 @@ void main() { await CameraPlatform.instance.availableCameras(); verify( - () => cameraService.getMediaStreamForOptions( + cameraService.getMediaStreamForOptions( CameraOptions( video: VideoConstraints( deviceId: videoDevice.deviceId, @@ -221,7 +208,7 @@ void main() { await CameraPlatform.instance.availableCameras(); verifyNever( - () => cameraService.getMediaStreamForOptions( + cameraService.getMediaStreamForOptions( CameraOptions( video: VideoConstraints( deviceId: videoDevice.deviceId, @@ -255,12 +242,12 @@ void main() { ) as MediaStream; when( - () => cameraService.getMediaStreamForOptions( + cameraService.getMediaStreamForOptions( CameraOptions( video: VideoConstraints(deviceId: videoDevice.deviceId), ), ), - ).thenAnswer((Invocation _) => Future.value(videoStream)); + ).thenAnswer((_) => Future.value(videoStream)); mockMediaDevices.enumerateDevices = () { return Future>.value( @@ -272,7 +259,7 @@ void main() { await CameraPlatform.instance.availableCameras(); verify( - () => cameraService.getFacingModeForVideoTrack( + cameraService.getFacingModeForVideoTrack( videoStream.getVideoTracks().toDart.first, ), ).called(1); @@ -348,45 +335,43 @@ void main() { // Mock camera service to return the first video stream // for the first video device. when( - () => cameraService.getMediaStreamForOptions( + cameraService.getMediaStreamForOptions( CameraOptions( video: VideoConstraints(deviceId: firstVideoDevice.deviceId), ), ), - ).thenAnswer( - (Invocation _) => Future.value(firstVideoStream)); + ).thenAnswer((_) => Future.value(firstVideoStream)); // Mock camera service to return the second video stream // for the second video device. when( - () => cameraService.getMediaStreamForOptions( + cameraService.getMediaStreamForOptions( CameraOptions( video: VideoConstraints(deviceId: secondVideoDevice.deviceId), ), ), - ).thenAnswer( - (Invocation _) => Future.value(secondVideoStream)); + ).thenAnswer((_) => Future.value(secondVideoStream)); // Mock camera service to return a user facing mode // for the first video stream. when( - () => cameraService.getFacingModeForVideoTrack( + cameraService.getFacingModeForVideoTrack( firstVideoStream.getVideoTracks().toDart.first, ), ).thenReturn('user'); - when(() => cameraService.mapFacingModeToLensDirection('user')) + when(cameraService.mapFacingModeToLensDirection('user')) .thenReturn(CameraLensDirection.front); // Mock camera service to return an environment facing mode // for the second video stream. when( - () => cameraService.getFacingModeForVideoTrack( + cameraService.getFacingModeForVideoTrack( secondVideoStream.getVideoTracks().toDart.first, ), ).thenReturn('environment'); - when(() => cameraService.mapFacingModeToLensDirection('environment')) + when(cameraService.mapFacingModeToLensDirection('environment')) .thenReturn(CameraLensDirection.back); final List cameras = @@ -439,20 +424,20 @@ void main() { }.toJS; when( - () => cameraService.getMediaStreamForOptions( + cameraService.getMediaStreamForOptions( CameraOptions( video: VideoConstraints(deviceId: videoDevice.deviceId), ), ), - ).thenAnswer((Invocation _) => Future.value(videoStream)); + ).thenAnswer((_) => Future.value(videoStream)); when( - () => cameraService.getFacingModeForVideoTrack( + cameraService.getFacingModeForVideoTrack( videoStream.getVideoTracks().toDart.first, ), ).thenReturn('left'); - when(() => cameraService.mapFacingModeToLensDirection('left')) + when(cameraService.mapFacingModeToLensDirection('left')) .thenReturn(CameraLensDirection.external); final CameraDescription camera = @@ -500,12 +485,12 @@ void main() { }.toJS; when( - () => cameraService.getMediaStreamForOptions( + cameraService.getMediaStreamForOptions( CameraOptions( video: VideoConstraints(deviceId: videoDevice.deviceId), ), ), - ).thenAnswer((Invocation _) => Future.value(videoStream)); + ).thenAnswer((_) => Future.value(videoStream)); final List _ = await CameraPlatform.instance.availableCameras(); @@ -547,11 +532,11 @@ void main() { 'description', ); - when(() => cameraService.getMediaStreamForOptions(any())) + when(cameraService.getMediaStreamForOptions(any)) .thenThrow(exception); expect( - () => CameraPlatform.instance.availableCameras(), + CameraPlatform.instance.availableCameras(), throwsA( isA().having( (CameraException e) => e.code, @@ -570,7 +555,7 @@ void main() { message: 'message', ); - when(() => cameraService.getMediaStreamForOptions(any())) + when(cameraService.getMediaStreamForOptions(any)) .thenThrow(exception); expect( @@ -609,14 +594,13 @@ void main() { .camerasMetadata[cameraDescription] = cameraMetadata; when( - () => cameraService.mapFacingModeToCameraType('user'), + cameraService.mapFacingModeToCameraType('user'), ).thenReturn(CameraType.user); }); testWidgets('with appropriate options', (WidgetTester tester) async { when( - () => cameraService - .mapResolutionPresetToSize(ResolutionPreset.ultraHigh), + cameraService.mapResolutionPresetToSize(ResolutionPreset.ultraHigh), ).thenReturn(ultraHighResolutionSize); final int cameraId = await CameraPlatform.instance.createCamera( @@ -643,8 +627,7 @@ void main() { testWidgets('with appropriate createCameraWithSettings options', (WidgetTester tester) async { when( - () => cameraService - .mapResolutionPresetToSize(ResolutionPreset.ultraHigh), + cameraService.mapResolutionPresetToSize(ResolutionPreset.ultraHigh), ).thenReturn(ultraHighResolutionSize); final int cameraId = @@ -678,7 +661,7 @@ void main() { 'and enabled audio set to false ' 'when no options are specified', (WidgetTester tester) async { when( - () => cameraService.mapResolutionPresetToSize(ResolutionPreset.max), + cameraService.mapResolutionPresetToSize(ResolutionPreset.max), ).thenReturn(maxResolutionSize); final int cameraId = await CameraPlatform.instance.createCamera( @@ -707,7 +690,7 @@ void main() { 'when no options are specified ' 'using createCameraWithSettings', (WidgetTester tester) async { when( - () => cameraService.mapResolutionPresetToSize(ResolutionPreset.max), + cameraService.mapResolutionPresetToSize(ResolutionPreset.max), ).thenReturn(maxResolutionSize); final int cameraId = @@ -807,12 +790,11 @@ void main() { abortStreamController = StreamController(); endedStreamController = StreamController(); - when(camera.getVideoSize).thenReturn(const Size(10, 10)); - when(camera.initialize) - .thenAnswer((Invocation _) => Future.value()); - when(camera.play).thenAnswer((Invocation _) => Future.value()); + when(camera.getVideoSize()).thenReturn(const Size(10, 10)); + when(camera.initialize()).thenAnswer((_) => Future.value()); + when(camera.play()).thenAnswer((_) => Future.value()); - when(() => camera.videoElement).thenReturn(videoElement); + when(camera.videoElement).thenReturn(videoElement); final MockEventStreamProvider errorProvider = MockEventStreamProvider(); @@ -824,15 +806,14 @@ void main() { (CameraPlatform.instance as CameraPlugin).videoElementOnAbortProvider = abortProvider; - when(() => errorProvider.forElement(videoElement)).thenAnswer( + when(errorProvider.forElement(videoElement)).thenAnswer( (_) => FakeElementStream(errorStreamController.stream), ); - when(() => abortProvider.forElement(videoElement)).thenAnswer( + when(abortProvider.forElement(videoElement)).thenAnswer( (_) => FakeElementStream(abortStreamController.stream), ); - when(() => camera.onEnded) - .thenAnswer((Invocation _) => endedStreamController.stream); + when(camera.onEnded).thenAnswer((_) => endedStreamController.stream); }); testWidgets('initializes and plays the camera', @@ -842,8 +823,8 @@ void main() { await CameraPlatform.instance.initializeCamera(cameraId); - verify(camera.initialize).called(1); - verify(camera.play).called(1); + verify(camera.initialize()).called(1); + verify(camera.play()).called(1); }); testWidgets('starts listening to the camera video error and abort events', @@ -896,7 +877,7 @@ void main() { 'description', ); - when(camera.initialize).thenThrow(exception); + when(camera.initialize()).thenThrow(exception); // Save the camera in the camera plugin. (CameraPlatform.instance as CameraPlugin).cameras[cameraId] = camera; @@ -917,9 +898,8 @@ void main() { (WidgetTester tester) async { final DOMException exception = DOMException('NotAllowedError'); - when(camera.initialize) - .thenAnswer((Invocation _) => Future.value()); - when(camera.play).thenThrow(exception); + when(camera.initialize()).thenAnswer((_) => Future.value()); + when(camera.play()).thenThrow(exception); // Save the camera in the camera plugin. (CameraPlatform.instance as CameraPlugin).cameras[cameraId] = camera; @@ -940,9 +920,8 @@ void main() { group('lockCaptureOrientation', () { setUp(() { - registerFallbackValue(DeviceOrientation.portraitUp); when( - () => cameraService.mapDeviceOrientationToOrientationType(any()), + cameraService.mapDeviceOrientationToOrientationType(any), ).thenReturn(OrientationType.portraitPrimary); }); @@ -967,7 +946,7 @@ void main() { 'locks the capture orientation ' 'based on the given device orientation', (WidgetTester tester) async { when( - () => cameraService.mapDeviceOrientationToOrientationType( + cameraService.mapDeviceOrientationToOrientationType( DeviceOrientation.landscapeRight, ), ).thenReturn(OrientationType.landscapeSecondary); @@ -984,7 +963,7 @@ void main() { ); verify( - () => cameraService.mapDeviceOrientationToOrientationType( + cameraService.mapDeviceOrientationToOrientationType( DeviceOrientation.landscapeRight, ), ).called(1); @@ -1047,7 +1026,7 @@ void main() { group('unlockCaptureOrientation', () { setUp(() { when( - () => cameraService.mapDeviceOrientationToOrientationType(any()), + cameraService.mapDeviceOrientationToOrientationType(any), ).thenReturn(OrientationType.portraitPrimary); }); @@ -1119,8 +1098,7 @@ void main() { final MockCamera camera = MockCamera(); final XFile capturedPicture = XFile('/bogus/test'); - when(camera.takePicture) - .thenAnswer((Invocation _) async => capturedPicture); + when(camera.takePicture()).thenAnswer((_) async => capturedPicture); // Save the camera in the camera plugin. (CameraPlatform.instance as CameraPlugin).cameras[cameraId] = camera; @@ -1128,7 +1106,7 @@ void main() { final XFile picture = await CameraPlatform.instance.takePicture(cameraId); - verify(camera.takePicture).called(1); + verify(camera.takePicture()).called(1); expect(picture, equals(capturedPicture)); }); @@ -1154,7 +1132,7 @@ void main() { final MockCamera camera = MockCamera(); final DOMException exception = DOMException('NotSupportedError'); - when(camera.takePicture).thenThrow(exception); + when(camera.takePicture()).thenThrow(exception); // Save the camera in the camera plugin. (CameraPlatform.instance as CameraPlugin).cameras[cameraId] = camera; @@ -1180,7 +1158,7 @@ void main() { 'description', ); - when(camera.takePicture).thenThrow(exception); + when(camera.takePicture()).thenThrow(exception); // Save the camera in the camera plugin. (CameraPlatform.instance as CameraPlugin).cameras[cameraId] = camera; @@ -1205,10 +1183,10 @@ void main() { setUp(() { camera = MockCamera(); - when(camera.startVideoRecording).thenAnswer((Invocation _) async {}); + when(camera.startVideoRecording()).thenAnswer((_) async {}); - when(() => camera.onVideoRecordingError) - .thenAnswer((Invocation _) => const Stream.empty()); + when(camera.onVideoRecordingError) + .thenAnswer((_) => const Stream.empty()); }); testWidgets('starts a video recording', (WidgetTester tester) async { @@ -1217,7 +1195,7 @@ void main() { await CameraPlatform.instance.startVideoRecording(cameraId); - verify(camera.startVideoRecording).called(1); + verify(camera.startVideoRecording()).called(1); }); testWidgets('listens to the onVideoRecordingError stream', @@ -1225,8 +1203,8 @@ void main() { final StreamController videoRecordingErrorController = StreamController(); - when(() => camera.onVideoRecordingError) - .thenAnswer((Invocation _) => videoRecordingErrorController.stream); + when(camera.onVideoRecordingError) + .thenAnswer((_) => videoRecordingErrorController.stream); // Save the camera in the camera plugin. (CameraPlatform.instance as CameraPlugin).cameras[cameraId] = camera; @@ -1259,7 +1237,7 @@ void main() { (WidgetTester tester) async { final DOMException exception = DOMException('InvalidStateError'); - when(camera.startVideoRecording).thenThrow(exception); + when(camera.startVideoRecording()).thenThrow(exception); // Save the camera in the camera plugin. (CameraPlatform.instance as CameraPlugin).cameras[cameraId] = camera; @@ -1284,7 +1262,7 @@ void main() { 'description', ); - when(camera.startVideoRecording).thenThrow(exception); + when(camera.startVideoRecording()).thenThrow(exception); // Save the camera in the camera plugin. (CameraPlatform.instance as CameraPlugin).cameras[cameraId] = camera; @@ -1309,10 +1287,10 @@ void main() { setUp(() { camera = MockCamera(); - when(camera.startVideoRecording).thenAnswer((Invocation _) async {}); + when(camera.startVideoRecording()).thenAnswer((_) async {}); - when(() => camera.onVideoRecordingError) - .thenAnswer((Invocation _) => const Stream.empty()); + when(camera.onVideoRecordingError) + .thenAnswer((_) => const Stream.empty()); }); testWidgets('fails if trying to stream', (WidgetTester tester) async { @@ -1335,8 +1313,8 @@ void main() { final MockCamera camera = MockCamera(); final XFile capturedVideo = XFile('/bogus/test'); - when(camera.stopVideoRecording) - .thenAnswer((Invocation _) async => capturedVideo); + when(camera.stopVideoRecording()) + .thenAnswer((_) async => capturedVideo); // Save the camera in the camera plugin. (CameraPlatform.instance as CameraPlugin).cameras[cameraId] = camera; @@ -1344,7 +1322,7 @@ void main() { final XFile video = await CameraPlatform.instance.stopVideoRecording(cameraId); - verify(camera.stopVideoRecording).called(1); + verify(camera.stopVideoRecording()).called(1); expect(video, capturedVideo); }); @@ -1356,13 +1334,13 @@ void main() { StreamController(); final XFile capturedVideo = XFile('/bogus/test'); - when(camera.startVideoRecording).thenAnswer((Invocation _) async {}); + when(camera.startVideoRecording()).thenAnswer((_) async {}); - when(camera.stopVideoRecording) - .thenAnswer((Invocation _) async => capturedVideo); + when(camera.stopVideoRecording()) + .thenAnswer((_) async => capturedVideo); - when(() => camera.onVideoRecordingError) - .thenAnswer((Invocation _) => videoRecordingErrorController.stream); + when(camera.onVideoRecordingError) + .thenAnswer((_) => videoRecordingErrorController.stream); // Save the camera in the camera plugin. (CameraPlatform.instance as CameraPlugin).cameras[cameraId] = camera; @@ -1398,7 +1376,7 @@ void main() { final MockCamera camera = MockCamera(); final DOMException exception = DOMException('InvalidStateError'); - when(camera.stopVideoRecording).thenThrow(exception); + when(camera.stopVideoRecording()).thenThrow(exception); // Save the camera in the camera plugin. (CameraPlatform.instance as CameraPlugin).cameras[cameraId] = camera; @@ -1424,7 +1402,7 @@ void main() { 'description', ); - when(camera.stopVideoRecording).thenThrow(exception); + when(camera.stopVideoRecording()).thenThrow(exception); // Save the camera in the camera plugin. (CameraPlatform.instance as CameraPlugin).cameras[cameraId] = camera; @@ -1447,14 +1425,14 @@ void main() { testWidgets('pauses a video recording', (WidgetTester tester) async { final MockCamera camera = MockCamera(); - when(camera.pauseVideoRecording).thenAnswer((Invocation _) async {}); + when(camera.pauseVideoRecording()).thenAnswer((_) async {}); // Save the camera in the camera plugin. (CameraPlatform.instance as CameraPlugin).cameras[cameraId] = camera; await CameraPlatform.instance.pauseVideoRecording(cameraId); - verify(camera.pauseVideoRecording).called(1); + verify(camera.pauseVideoRecording()).called(1); }); group('throws PlatformException', () { @@ -1478,7 +1456,7 @@ void main() { final MockCamera camera = MockCamera(); final DOMException exception = DOMException('InvalidStateError'); - when(camera.pauseVideoRecording).thenThrow(exception); + when(camera.pauseVideoRecording()).thenThrow(exception); // Save the camera in the camera plugin. (CameraPlatform.instance as CameraPlugin).cameras[cameraId] = camera; @@ -1504,7 +1482,7 @@ void main() { 'description', ); - when(camera.pauseVideoRecording).thenThrow(exception); + when(camera.pauseVideoRecording()).thenThrow(exception); // Save the camera in the camera plugin. (CameraPlatform.instance as CameraPlugin).cameras[cameraId] = camera; @@ -1527,14 +1505,14 @@ void main() { testWidgets('resumes a video recording', (WidgetTester tester) async { final MockCamera camera = MockCamera(); - when(camera.resumeVideoRecording).thenAnswer((Invocation _) async {}); + when(camera.resumeVideoRecording()).thenAnswer((_) async {}); // Save the camera in the camera plugin. (CameraPlatform.instance as CameraPlugin).cameras[cameraId] = camera; await CameraPlatform.instance.resumeVideoRecording(cameraId); - verify(camera.resumeVideoRecording).called(1); + verify(camera.resumeVideoRecording()).called(1); }); group('throws PlatformException', () { @@ -1558,7 +1536,7 @@ void main() { final MockCamera camera = MockCamera(); final DOMException exception = DOMException('InvalidStateError'); - when(camera.resumeVideoRecording).thenThrow(exception); + when(camera.resumeVideoRecording()).thenThrow(exception); // Save the camera in the camera plugin. (CameraPlatform.instance as CameraPlugin).cameras[cameraId] = camera; @@ -1584,7 +1562,7 @@ void main() { 'description', ); - when(camera.resumeVideoRecording).thenThrow(exception); + when(camera.resumeVideoRecording()).thenThrow(exception); // Save the camera in the camera plugin. (CameraPlatform.instance as CameraPlugin).cameras[cameraId] = camera; @@ -1617,7 +1595,7 @@ void main() { flashMode, ); - verify(() => camera.setFlashMode(flashMode)).called(1); + verify(camera.setFlashMode(flashMode)).called(1); }); group('throws PlatformException', () { @@ -1644,7 +1622,7 @@ void main() { final MockCamera camera = MockCamera(); final DOMException exception = DOMException('NotSupportedError'); - when(() => camera.setFlashMode(any())).thenThrow(exception); + when(camera.setFlashMode(any)).thenThrow(exception); // Save the camera in the camera plugin. (CameraPlatform.instance as CameraPlugin).cameras[cameraId] = camera; @@ -1673,7 +1651,7 @@ void main() { 'description', ); - when(() => camera.setFlashMode(any())).thenThrow(exception); + when(camera.setFlashMode(any)).thenThrow(exception); // Save the camera in the camera plugin. (CameraPlatform.instance as CameraPlugin).cameras[cameraId] = camera; @@ -1780,7 +1758,7 @@ void main() { final MockCamera camera = MockCamera(); const double maximumZoomLevel = 100.0; - when(camera.getMaxZoomLevel).thenReturn(maximumZoomLevel); + when(camera.getMaxZoomLevel()).thenReturn(maximumZoomLevel); // Save the camera in the camera plugin. (CameraPlatform.instance as CameraPlugin).cameras[cameraId] = camera; @@ -1792,7 +1770,7 @@ void main() { equals(maximumZoomLevel), ); - verify(camera.getMaxZoomLevel).called(1); + verify(camera.getMaxZoomLevel()).called(1); }); group('throws PlatformException', () { @@ -1818,7 +1796,7 @@ void main() { final MockCamera camera = MockCamera(); final DOMException exception = DOMException('NotSupportedError'); - when(camera.getMaxZoomLevel).thenThrow(exception); + when(camera.getMaxZoomLevel()).thenThrow(exception); // Save the camera in the camera plugin. (CameraPlatform.instance as CameraPlugin).cameras[cameraId] = camera; @@ -1846,7 +1824,7 @@ void main() { 'description', ); - when(camera.getMaxZoomLevel).thenThrow(exception); + when(camera.getMaxZoomLevel()).thenThrow(exception); // Save the camera in the camera plugin. (CameraPlatform.instance as CameraPlugin).cameras[cameraId] = camera; @@ -1873,7 +1851,7 @@ void main() { final MockCamera camera = MockCamera(); const double minimumZoomLevel = 100.0; - when(camera.getMinZoomLevel).thenReturn(minimumZoomLevel); + when(camera.getMinZoomLevel()).thenReturn(minimumZoomLevel); // Save the camera in the camera plugin. (CameraPlatform.instance as CameraPlugin).cameras[cameraId] = camera; @@ -1885,7 +1863,7 @@ void main() { equals(minimumZoomLevel), ); - verify(camera.getMinZoomLevel).called(1); + verify(camera.getMinZoomLevel()).called(1); }); group('throws PlatformException', () { @@ -1911,7 +1889,7 @@ void main() { final MockCamera camera = MockCamera(); final DOMException exception = DOMException('NotSupportedError'); - when(camera.getMinZoomLevel).thenThrow(exception); + when(camera.getMinZoomLevel()).thenThrow(exception); // Save the camera in the camera plugin. (CameraPlatform.instance as CameraPlugin).cameras[cameraId] = camera; @@ -1939,7 +1917,7 @@ void main() { 'description', ); - when(camera.getMinZoomLevel).thenThrow(exception); + when(camera.getMinZoomLevel()).thenThrow(exception); // Save the camera in the camera plugin. (CameraPlatform.instance as CameraPlugin).cameras[cameraId] = camera; @@ -1972,7 +1950,7 @@ void main() { await CameraPlatform.instance.setZoomLevel(cameraId, zoom); - verify(() => camera.setZoomLevel(zoom)).called(1); + verify(camera.setZoomLevel(zoom)).called(1); }); group('throws CameraException', () { @@ -1999,7 +1977,7 @@ void main() { final MockCamera camera = MockCamera(); final DOMException exception = DOMException('NotSupportedError'); - when(() => camera.setZoomLevel(any())).thenThrow(exception); + when(camera.setZoomLevel(any)).thenThrow(exception); // Save the camera in the camera plugin. (CameraPlatform.instance as CameraPlugin).cameras[cameraId] = camera; @@ -2027,7 +2005,7 @@ void main() { message: 'message', ); - when(() => camera.setZoomLevel(any())).thenThrow(exception); + when(camera.setZoomLevel(any)).thenThrow(exception); // Save the camera in the camera plugin. (CameraPlatform.instance as CameraPlugin).cameras[cameraId] = camera; @@ -2056,7 +2034,7 @@ void main() { 'description', ); - when(() => camera.setZoomLevel(any())).thenThrow(exception); + when(camera.setZoomLevel(any)).thenThrow(exception); // Save the camera in the camera plugin. (CameraPlatform.instance as CameraPlugin).cameras[cameraId] = camera; @@ -2087,7 +2065,7 @@ void main() { await CameraPlatform.instance.pausePreview(cameraId); - verify(camera.pause).called(1); + verify(camera.pause()).called(1); }); group('throws PlatformException', () { @@ -2111,7 +2089,7 @@ void main() { final MockCamera camera = MockCamera(); final DOMException exception = DOMException('NotSupportedError'); - when(camera.pause).thenThrow(exception); + when(camera.pause()).thenThrow(exception); // Save the camera in the camera plugin. (CameraPlatform.instance as CameraPlugin).cameras[cameraId] = camera; @@ -2134,14 +2112,14 @@ void main() { testWidgets('calls play on the camera', (WidgetTester tester) async { final MockCamera camera = MockCamera(); - when(camera.play).thenAnswer((Invocation _) async {}); + when(camera.play()).thenAnswer((_) async {}); // Save the camera in the camera plugin. (CameraPlatform.instance as CameraPlugin).cameras[cameraId] = camera; await CameraPlatform.instance.resumePreview(cameraId); - verify(camera.play).called(1); + verify(camera.play()).called(1); }); group('throws PlatformException', () { @@ -2165,7 +2143,7 @@ void main() { final MockCamera camera = MockCamera(); final DOMException exception = DOMException('NotSupportedError'); - when(camera.play).thenThrow(exception); + when(camera.play()).thenThrow(exception); // Save the camera in the camera plugin. (CameraPlatform.instance as CameraPlugin).cameras[cameraId] = camera; @@ -2191,7 +2169,7 @@ void main() { 'description', ); - when(camera.play).thenThrow(exception); + when(camera.play()).thenThrow(exception); // Save the camera in the camera plugin. (CameraPlatform.instance as CameraPlugin).cameras[cameraId] = camera; @@ -2251,13 +2229,12 @@ void main() { endedStreamController = StreamController(); videoRecordingErrorController = StreamController(); - when(camera.getVideoSize).thenReturn(const Size(10, 10)); - when(camera.initialize) - .thenAnswer((Invocation _) => Future.value()); - when(camera.play).thenAnswer((Invocation _) => Future.value()); - when(camera.dispose).thenAnswer((Invocation _) => Future.value()); + when(camera.getVideoSize()).thenReturn(const Size(10, 10)); + when(camera.initialize()).thenAnswer((_) => Future.value()); + when(camera.play()).thenAnswer((_) => Future.value()); + when(camera.dispose()).thenAnswer((_) => Future.value()); - when(() => camera.videoElement).thenReturn(videoElement); + when(camera.videoElement).thenReturn(videoElement); final MockEventStreamProvider errorProvider = MockEventStreamProvider(); @@ -2269,20 +2246,19 @@ void main() { (CameraPlatform.instance as CameraPlugin).videoElementOnAbortProvider = abortProvider; - when(() => errorProvider.forElement(videoElement)).thenAnswer( + when(errorProvider.forElement(videoElement)).thenAnswer( (_) => FakeElementStream(errorStreamController.stream), ); - when(() => abortProvider.forElement(videoElement)).thenAnswer( + when(abortProvider.forElement(videoElement)).thenAnswer( (_) => FakeElementStream(abortStreamController.stream), ); - when(() => camera.onEnded) - .thenAnswer((Invocation _) => endedStreamController.stream); + when(camera.onEnded).thenAnswer((_) => endedStreamController.stream); - when(() => camera.onVideoRecordingError) - .thenAnswer((Invocation _) => videoRecordingErrorController.stream); + when(camera.onVideoRecordingError) + .thenAnswer((_) => videoRecordingErrorController.stream); - when(camera.startVideoRecording).thenAnswer((Invocation _) async {}); + when(camera.startVideoRecording()).thenAnswer((_) async {}); }); testWidgets('disposes the correct camera', (WidgetTester tester) async { @@ -2292,10 +2268,8 @@ void main() { final MockCamera firstCamera = MockCamera(); final MockCamera secondCamera = MockCamera(); - when(firstCamera.dispose) - .thenAnswer((Invocation _) => Future.value()); - when(secondCamera.dispose) - .thenAnswer((Invocation _) => Future.value()); + when(firstCamera.dispose()).thenAnswer((_) => Future.value()); + when(secondCamera.dispose()).thenAnswer((_) => Future.value()); // Save cameras in the camera plugin. (CameraPlatform.instance as CameraPlugin).cameras.addAll({ @@ -2307,8 +2281,8 @@ void main() { await CameraPlatform.instance.dispose(firstCameraId); // The first camera should be disposed. - verify(firstCamera.dispose).called(1); - verifyNever(secondCamera.dispose); + verify(firstCamera.dispose()).called(1); + verifyNever(secondCamera.dispose()); // The first camera should be removed from the camera plugin. expect( @@ -2375,7 +2349,7 @@ void main() { final MockCamera camera = MockCamera(); final DOMException exception = DOMException('InvalidAccessError'); - when(camera.dispose).thenThrow(exception); + when(camera.dispose()).thenThrow(exception); // Save the camera in the camera plugin. (CameraPlatform.instance as CameraPlugin).cameras[cameraId] = camera; @@ -2428,7 +2402,7 @@ void main() { }); group('events', () { - late Camera camera; + late MockCamera camera; late MockVideoElement mockVideoElement; late HTMLVideoElement videoElement; @@ -2447,12 +2421,11 @@ void main() { endedStreamController = StreamController(); videoRecordingErrorController = StreamController(); - when(camera.getVideoSize).thenReturn(const Size(10, 10)); - when(camera.initialize) - .thenAnswer((Invocation _) => Future.value()); - when(camera.play).thenAnswer((Invocation _) => Future.value()); + when(camera.getVideoSize()).thenReturn(const Size(10, 10)); + when(camera.initialize()).thenAnswer((_) => Future.value()); + when(camera.play()).thenAnswer((_) => Future.value()); - when(() => camera.videoElement).thenReturn(videoElement); + when(camera.videoElement).thenReturn(videoElement); final MockEventStreamProvider errorProvider = MockEventStreamProvider(); @@ -2464,20 +2437,19 @@ void main() { (CameraPlatform.instance as CameraPlugin).videoElementOnAbortProvider = abortProvider; - when(() => errorProvider.forElement(any())).thenAnswer( + when(errorProvider.forElement(any)).thenAnswer( (_) => FakeElementStream(errorStreamController.stream), ); - when(() => abortProvider.forElement(any())).thenAnswer( + when(abortProvider.forElement(any)).thenAnswer( (_) => FakeElementStream(abortStreamController.stream), ); - when(() => camera.onEnded) - .thenAnswer((Invocation _) => endedStreamController.stream); + when(camera.onEnded).thenAnswer((_) => endedStreamController.stream); - when(() => camera.onVideoRecordingError) - .thenAnswer((Invocation _) => videoRecordingErrorController.stream); + when(camera.onVideoRecordingError) + .thenAnswer((_) => videoRecordingErrorController.stream); - when(camera.startVideoRecording).thenAnswer((Invocation _) async {}); + when(camera.startVideoRecording()).thenAnswer((_) async {}); }); testWidgets( @@ -2489,11 +2461,11 @@ void main() { videoElement = getVideoElementWithBlankStream(videoSize); when( - () => cameraService.getMediaStreamForOptions( - any(), + cameraService.getMediaStreamForOptions( + any, cameraId: cameraId, ), - ).thenAnswer((Invocation _) async => videoElement.captureStream()); + ).thenAnswer((_) async => videoElement.captureStream()); final Camera camera = Camera( textureId: cameraId, @@ -2677,7 +2649,7 @@ void main() { 'description', ); - when(camera.takePicture).thenThrow(exception); + when(camera.takePicture()).thenThrow(exception); final Stream eventStream = CameraPlatform.instance.onCameraError(cameraId); @@ -2714,7 +2686,7 @@ void main() { 'description', ); - when(() => camera.setFlashMode(any())).thenThrow(exception); + when(camera.setFlashMode(any)).thenThrow(exception); final Stream eventStream = CameraPlatform.instance.onCameraError(cameraId); @@ -2754,7 +2726,7 @@ void main() { 'description', ); - when(camera.getMaxZoomLevel).thenThrow(exception); + when(camera.getMaxZoomLevel()).thenThrow(exception); final Stream eventStream = CameraPlatform.instance.onCameraError(cameraId); @@ -2793,7 +2765,7 @@ void main() { 'description', ); - when(camera.getMinZoomLevel).thenThrow(exception); + when(camera.getMinZoomLevel()).thenThrow(exception); final Stream eventStream = CameraPlatform.instance.onCameraError(cameraId); @@ -2832,7 +2804,7 @@ void main() { 'description', ); - when(() => camera.setZoomLevel(any())).thenThrow(exception); + when(camera.setZoomLevel(any)).thenThrow(exception); final Stream eventStream = CameraPlatform.instance.onCameraError(cameraId); @@ -2872,7 +2844,7 @@ void main() { 'description', ); - when(camera.play).thenThrow(exception); + when(camera.play()).thenThrow(exception); final Stream eventStream = CameraPlatform.instance.onCameraError(cameraId); @@ -2909,12 +2881,10 @@ void main() { 'description', ); - when(() => camera.onVideoRecordingError) - .thenAnswer((Invocation _) => const Stream.empty()); + when(camera.onVideoRecordingError) + .thenAnswer((_) => const Stream.empty()); - when( - () => camera.startVideoRecording(), - ).thenThrow(exception); + when(camera.startVideoRecording()).thenThrow(exception); final Stream eventStream = CameraPlatform.instance.onCameraError(cameraId); @@ -2983,7 +2953,7 @@ void main() { 'description', ); - when(camera.stopVideoRecording).thenThrow(exception); + when(camera.stopVideoRecording()).thenThrow(exception); final Stream eventStream = CameraPlatform.instance.onCameraError(cameraId); @@ -3020,7 +2990,7 @@ void main() { 'description', ); - when(camera.pauseVideoRecording).thenThrow(exception); + when(camera.pauseVideoRecording()).thenThrow(exception); final Stream eventStream = CameraPlatform.instance.onCameraError(cameraId); @@ -3057,7 +3027,7 @@ void main() { 'description', ); - when(camera.resumeVideoRecording).thenThrow(exception); + when(camera.resumeVideoRecording()).thenThrow(exception); final Stream eventStream = CameraPlatform.instance.onCameraError(cameraId); @@ -3093,8 +3063,7 @@ void main() { final Stream stream = Stream.value( VideoRecordedEvent(cameraId, capturedVideo, Duration.zero)); - when(() => camera.onVideoRecordedEvent) - .thenAnswer((Invocation _) => stream); + when(camera.onVideoRecordedEvent).thenAnswer((_) => stream); // Save the camera in the camera plugin. (CameraPlatform.instance as CameraPlugin).cameras[cameraId] = camera; @@ -3120,14 +3089,14 @@ void main() { MockEventStreamProvider(); (CameraPlatform.instance as CameraPlugin) .orientationOnChangeProvider = provider; - when(() => provider.forTarget(any())) + when(provider.forTarget(any)) .thenAnswer((_) => eventStreamController.stream); }); testWidgets('emits the initial DeviceOrientationChangedEvent', (WidgetTester tester) async { when( - () => cameraService.mapOrientationTypeToDeviceOrientation( + cameraService.mapOrientationTypeToDeviceOrientation( OrientationType.portraitPrimary, ), ).thenReturn(DeviceOrientation.portraitUp); @@ -3158,13 +3127,13 @@ void main() { 'when the screen orientation is changed', (WidgetTester tester) async { when( - () => cameraService.mapOrientationTypeToDeviceOrientation( + cameraService.mapOrientationTypeToDeviceOrientation( OrientationType.landscapePrimary, ), ).thenReturn(DeviceOrientation.landscapeLeft); when( - () => cameraService.mapOrientationTypeToDeviceOrientation( + cameraService.mapOrientationTypeToDeviceOrientation( OrientationType.portraitSecondary, ), ).thenReturn(DeviceOrientation.portraitDown); diff --git a/packages/camera/camera_web/example/integration_test/helpers/mocks.dart b/packages/camera/camera_web/example/integration_test/helpers/mocks.dart index e4852843d1f..eb94d399eb8 100644 --- a/packages/camera/camera_web/example/integration_test/helpers/mocks.dart +++ b/packages/camera/camera_web/example/integration_test/helpers/mocks.dart @@ -13,11 +13,59 @@ import 'package:camera_web/src/camera.dart'; import 'package:camera_web/src/camera_service.dart'; import 'package:camera_web/src/shims/dart_js_util.dart'; import 'package:camera_web/src/types/types.dart'; -import 'package:mocktail/mocktail.dart'; +import 'package:mockito/annotations.dart'; +import 'package:mockito/mockito.dart'; // TODO(srujzs): This is exported in `package:web` 0.6.0. Remove this when it is available. import 'package:web/src/helpers/events/streams.dart'; import 'package:web/web.dart' as web; +@GenerateNiceMocks(>[ + MockSpec( + fallbackGenerators: { + #window: windowShim, + #getMediaStreamForOptions: getMediaStreamForOptionsShim, + }, + ), + MockSpec(), + MockSpec( + fallbackGenerators: { + #videoElement: videoElementShim, + #divElement: divElementShim, + #window: windowShim, + #blobBuilder: blobBuilderShim, + }, + ), + MockSpec( + fallbackGenerators: { + #toMediaStreamConstraints: toMediaStreamConstraintsShim, + }, + ), +]) +export 'mocks.mocks.dart'; + +web.Window windowShim() => throw UnimplementedError(); + +Future getMediaStreamForOptionsShim( + CameraOptions? options, { + int? cameraId = 0, +}) async { + return createJSInteropWrapper(FakeMediaStream([])) + as web.MediaStream; +} + +web.HTMLVideoElement videoElementShim() { + return createJSInteropWrapper(MockVideoElement()) as web.HTMLVideoElement; +} + +web.HTMLDivElement divElementShim() => throw UnimplementedError(); + +web.Blob blobBuilderShim([List? blobs, String? type]) { + throw UnimplementedError(); +} + +web.MediaStreamConstraints toMediaStreamConstraintsShim() => + throw UnimplementedError(); + @JSExport() class MockWindow { late web.Navigator navigator; @@ -72,8 +120,6 @@ class MockMediaDevices { late JSFunction enumerateDevices; } -class MockCameraService extends Mock implements CameraService {} - @JSExport() class MockMediaStreamTrack { /// web.MediaTrackCapabilities Function(); @@ -91,18 +137,12 @@ class MockMediaStreamTrack { JSFunction stop = () {}.toJS; } -class MockCamera extends Mock implements Camera {} - -class MockCameraOptions extends Mock implements CameraOptions {} - @JSExport() class MockVideoElement { web.MediaProvider? srcObject; web.MediaError? error; } -class MockJsUtil extends Mock implements JsUtil {} - @JSExport() class MockMediaRecorder { /// void Function(String type, web.EventListener? callback, [JSAny options]) @@ -219,4 +259,34 @@ web.HTMLVideoElement getVideoElementWithBlankStream(Size videoSize) { } class MockEventStreamProvider extends Mock - implements web.EventStreamProvider {} + implements web.EventStreamProvider { + @override + Stream forTarget( + web.EventTarget? e, { + bool? useCapture = false, + }) { + return super.noSuchMethod( + Invocation.method( + #forTarget, + [e], + {#useCapture: useCapture}, + ), + returnValue: Stream.empty(), + ) as Stream; + } + + @override + ElementStream forElement( + web.Element? e, { + bool? useCapture = false, + }) { + return super.noSuchMethod( + Invocation.method( + #forElement, + [e], + {#useCapture: useCapture}, + ), + returnValue: FakeElementStream(Stream.empty()), + ) as ElementStream; + } +} diff --git a/packages/camera/camera_web/example/integration_test/helpers/mocks.mocks.dart b/packages/camera/camera_web/example/integration_test/helpers/mocks.mocks.dart new file mode 100644 index 00000000000..a544cbbed68 --- /dev/null +++ b/packages/camera/camera_web/example/integration_test/helpers/mocks.mocks.dart @@ -0,0 +1,648 @@ +// Mocks generated by Mockito 5.4.5 from annotations +// in camera_web_integration_tests/integration_test/helpers/mocks.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'dart:async' as _i5; +import 'dart:js_interop' as _i13; +import 'dart:ui' as _i4; + +import 'package:camera_platform_interface/camera_platform_interface.dart' + as _i7; +import 'package:camera_web/src/camera.dart' as _i10; +import 'package:camera_web/src/camera_service.dart' as _i8; +import 'package:camera_web/src/shims/dart_js_util.dart' as _i2; +import 'package:camera_web/src/types/types.dart' as _i3; +import 'package:flutter/services.dart' as _i11; +import 'package:mockito/mockito.dart' as _i1; +import 'package:mockito/src/dummies.dart' as _i12; +import 'package:web/web.dart' as _i6; + +import 'mocks.dart' as _i9; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: deprecated_member_use +// ignore_for_file: deprecated_member_use_from_same_package +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: must_be_immutable +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class + +class _FakeJsUtil_0 extends _i1.SmartFake implements _i2.JsUtil { + _FakeJsUtil_0(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); +} + +class _FakeZoomLevelCapability_1 extends _i1.SmartFake + implements _i3.ZoomLevelCapability { + _FakeZoomLevelCapability_1(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); +} + +class _FakeSize_2 extends _i1.SmartFake implements _i4.Size { + _FakeSize_2(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); +} + +class _FakeCameraOptions_3 extends _i1.SmartFake implements _i3.CameraOptions { + _FakeCameraOptions_3(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); +} + +class _FakeStreamController_4 extends _i1.SmartFake + implements _i5.StreamController { + _FakeStreamController_4(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); +} + +class _FakeEventStreamProvider_5 extends _i1.SmartFake + implements _i6.EventStreamProvider { + _FakeEventStreamProvider_5(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); +} + +class _FakeXFile_6 extends _i1.SmartFake implements _i7.XFile { + _FakeXFile_6(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); +} + +class _FakeAudioConstraints_7 extends _i1.SmartFake + implements _i3.AudioConstraints { + _FakeAudioConstraints_7(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); +} + +class _FakeVideoConstraints_8 extends _i1.SmartFake + implements _i3.VideoConstraints { + _FakeVideoConstraints_8(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); +} + +/// A class which mocks [CameraService]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockCameraService extends _i1.Mock implements _i8.CameraService { + @override + _i6.Window get window => (super.noSuchMethod( + Invocation.getter(#window), + returnValue: _i9.windowShim(), + returnValueForMissingStub: _i9.windowShim(), + ) as _i6.Window); + + @override + set window(_i6.Window? _window) => super.noSuchMethod( + Invocation.setter(#window, _window), + returnValueForMissingStub: null, + ); + + @override + _i2.JsUtil get jsUtil => (super.noSuchMethod( + Invocation.getter(#jsUtil), + returnValue: _FakeJsUtil_0(this, Invocation.getter(#jsUtil)), + returnValueForMissingStub: _FakeJsUtil_0( + this, + Invocation.getter(#jsUtil), + ), + ) as _i2.JsUtil); + + @override + set jsUtil(_i2.JsUtil? _jsUtil) => super.noSuchMethod( + Invocation.setter(#jsUtil, _jsUtil), + returnValueForMissingStub: null, + ); + + @override + _i5.Future<_i6.MediaStream> getMediaStreamForOptions( + _i3.CameraOptions? options, { + int? cameraId = 0, + }) => + (super.noSuchMethod( + Invocation.method( + #getMediaStreamForOptions, + [options], + {#cameraId: cameraId}, + ), + returnValue: _i9.getMediaStreamForOptionsShim( + options, + cameraId: cameraId, + ), + returnValueForMissingStub: _i9.getMediaStreamForOptionsShim( + options, + cameraId: cameraId, + ), + ) as _i5.Future<_i6.MediaStream>); + + @override + _i3.ZoomLevelCapability getZoomLevelCapabilityForCamera( + _i10.Camera? camera, + ) => + (super.noSuchMethod( + Invocation.method(#getZoomLevelCapabilityForCamera, [camera]), + returnValue: _FakeZoomLevelCapability_1( + this, + Invocation.method(#getZoomLevelCapabilityForCamera, [camera]), + ), + returnValueForMissingStub: _FakeZoomLevelCapability_1( + this, + Invocation.method(#getZoomLevelCapabilityForCamera, [camera]), + ), + ) as _i3.ZoomLevelCapability); + + @override + String? getFacingModeForVideoTrack(_i6.MediaStreamTrack? videoTrack) => + (super.noSuchMethod( + Invocation.method(#getFacingModeForVideoTrack, [videoTrack]), + returnValueForMissingStub: null, + ) as String?); + + @override + _i7.CameraLensDirection mapFacingModeToLensDirection(String? facingMode) => + (super.noSuchMethod( + Invocation.method(#mapFacingModeToLensDirection, [facingMode]), + returnValue: _i7.CameraLensDirection.front, + returnValueForMissingStub: _i7.CameraLensDirection.front, + ) as _i7.CameraLensDirection); + + @override + _i3.CameraType mapFacingModeToCameraType(String? facingMode) => + (super.noSuchMethod( + Invocation.method(#mapFacingModeToCameraType, [facingMode]), + returnValue: _i3.CameraType.environment, + returnValueForMissingStub: _i3.CameraType.environment, + ) as _i3.CameraType); + + @override + _i4.Size mapResolutionPresetToSize(_i7.ResolutionPreset? resolutionPreset) => + (super.noSuchMethod( + Invocation.method(#mapResolutionPresetToSize, [resolutionPreset]), + returnValue: _FakeSize_2( + this, + Invocation.method(#mapResolutionPresetToSize, [resolutionPreset]), + ), + returnValueForMissingStub: _FakeSize_2( + this, + Invocation.method(#mapResolutionPresetToSize, [resolutionPreset]), + ), + ) as _i4.Size); + + @override + int mapResolutionPresetToVideoBitrate( + _i7.ResolutionPreset? resolutionPreset, + ) => + (super.noSuchMethod( + Invocation.method(#mapResolutionPresetToVideoBitrate, [ + resolutionPreset, + ]), + returnValue: 0, + returnValueForMissingStub: 0, + ) as int); + + @override + int mapResolutionPresetToAudioBitrate( + _i7.ResolutionPreset? resolutionPreset, + ) => + (super.noSuchMethod( + Invocation.method(#mapResolutionPresetToAudioBitrate, [ + resolutionPreset, + ]), + returnValue: 0, + returnValueForMissingStub: 0, + ) as int); + + @override + String mapDeviceOrientationToOrientationType( + _i11.DeviceOrientation? deviceOrientation, + ) => + (super.noSuchMethod( + Invocation.method(#mapDeviceOrientationToOrientationType, [ + deviceOrientation, + ]), + returnValue: _i12.dummyValue( + this, + Invocation.method(#mapDeviceOrientationToOrientationType, [ + deviceOrientation, + ]), + ), + returnValueForMissingStub: _i12.dummyValue( + this, + Invocation.method(#mapDeviceOrientationToOrientationType, [ + deviceOrientation, + ]), + ), + ) as String); + + @override + _i11.DeviceOrientation mapOrientationTypeToDeviceOrientation( + String? orientationType, + ) => + (super.noSuchMethod( + Invocation.method(#mapOrientationTypeToDeviceOrientation, [ + orientationType, + ]), + returnValue: _i11.DeviceOrientation.portraitUp, + returnValueForMissingStub: _i11.DeviceOrientation.portraitUp, + ) as _i11.DeviceOrientation); +} + +/// A class which mocks [JsUtil]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockJsUtil extends _i1.Mock implements _i2.JsUtil { + @override + bool hasProperty(_i13.JSObject? o, _i13.JSAny? name) => (super.noSuchMethod( + Invocation.method(#hasProperty, [o, name]), + returnValue: false, + returnValueForMissingStub: false, + ) as bool); + + @override + _i13.JSAny? getProperty(_i13.JSObject? o, _i13.JSAny? name) => + (super.noSuchMethod( + Invocation.method(#getProperty, [o, name]), + returnValueForMissingStub: null, + ) as _i13.JSAny?); +} + +/// A class which mocks [Camera]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockCamera extends _i1.Mock implements _i10.Camera { + @override + int get textureId => (super.noSuchMethod( + Invocation.getter(#textureId), + returnValue: 0, + returnValueForMissingStub: 0, + ) as int); + + @override + _i3.CameraOptions get options => (super.noSuchMethod( + Invocation.getter(#options), + returnValue: _FakeCameraOptions_3( + this, + Invocation.getter(#options), + ), + returnValueForMissingStub: _FakeCameraOptions_3( + this, + Invocation.getter(#options), + ), + ) as _i3.CameraOptions); + + @override + ({int? audioBitrate, int? videoBitrate}) get recorderOptions => + (super.noSuchMethod( + Invocation.getter(#recorderOptions), + returnValue: (audioBitrate: null, videoBitrate: null), + returnValueForMissingStub: (audioBitrate: null, videoBitrate: null), + ) as ({int? audioBitrate, int? videoBitrate})); + + @override + _i6.HTMLVideoElement get videoElement => (super.noSuchMethod( + Invocation.getter(#videoElement), + returnValue: _i9.videoElementShim(), + returnValueForMissingStub: _i9.videoElementShim(), + ) as _i6.HTMLVideoElement); + + @override + set videoElement(_i6.HTMLVideoElement? _videoElement) => super.noSuchMethod( + Invocation.setter(#videoElement, _videoElement), + returnValueForMissingStub: null, + ); + + @override + _i6.HTMLDivElement get divElement => (super.noSuchMethod( + Invocation.getter(#divElement), + returnValue: _i9.divElementShim(), + returnValueForMissingStub: _i9.divElementShim(), + ) as _i6.HTMLDivElement); + + @override + set divElement(_i6.HTMLDivElement? _divElement) => super.noSuchMethod( + Invocation.setter(#divElement, _divElement), + returnValueForMissingStub: null, + ); + + @override + set stream(_i6.MediaStream? _stream) => super.noSuchMethod( + Invocation.setter(#stream, _stream), + returnValueForMissingStub: null, + ); + + @override + _i5.StreamController<_i6.MediaStreamTrack> get onEndedController => + (super.noSuchMethod( + Invocation.getter(#onEndedController), + returnValue: _FakeStreamController_4<_i6.MediaStreamTrack>( + this, + Invocation.getter(#onEndedController), + ), + returnValueForMissingStub: + _FakeStreamController_4<_i6.MediaStreamTrack>( + this, + Invocation.getter(#onEndedController), + ), + ) as _i5.StreamController<_i6.MediaStreamTrack>); + + @override + _i6.EventStreamProvider<_i6.Event> get mediaRecorderOnErrorProvider => + (super.noSuchMethod( + Invocation.getter(#mediaRecorderOnErrorProvider), + returnValue: _FakeEventStreamProvider_5<_i6.Event>( + this, + Invocation.getter(#mediaRecorderOnErrorProvider), + ), + returnValueForMissingStub: _FakeEventStreamProvider_5<_i6.Event>( + this, + Invocation.getter(#mediaRecorderOnErrorProvider), + ), + ) as _i6.EventStreamProvider<_i6.Event>); + + @override + set mediaRecorderOnErrorProvider( + _i6.EventStreamProvider<_i6.Event>? _mediaRecorderOnErrorProvider, + ) => + super.noSuchMethod( + Invocation.setter( + #mediaRecorderOnErrorProvider, + _mediaRecorderOnErrorProvider, + ), + returnValueForMissingStub: null, + ); + + @override + _i5.StreamController<_i6.ErrorEvent> get videoRecordingErrorController => + (super.noSuchMethod( + Invocation.getter(#videoRecordingErrorController), + returnValue: _FakeStreamController_4<_i6.ErrorEvent>( + this, + Invocation.getter(#videoRecordingErrorController), + ), + returnValueForMissingStub: _FakeStreamController_4<_i6.ErrorEvent>( + this, + Invocation.getter(#videoRecordingErrorController), + ), + ) as _i5.StreamController<_i6.ErrorEvent>); + + @override + set flashMode(_i7.FlashMode? _flashMode) => super.noSuchMethod( + Invocation.setter(#flashMode, _flashMode), + returnValueForMissingStub: null, + ); + + @override + _i6.Window get window => (super.noSuchMethod( + Invocation.getter(#window), + returnValue: _i9.windowShim(), + returnValueForMissingStub: _i9.windowShim(), + ) as _i6.Window); + + @override + set window(_i6.Window? _window) => super.noSuchMethod( + Invocation.setter(#window, _window), + returnValueForMissingStub: null, + ); + + @override + set mediaRecorder(_i6.MediaRecorder? _mediaRecorder) => super.noSuchMethod( + Invocation.setter(#mediaRecorder, _mediaRecorder), + returnValueForMissingStub: null, + ); + + @override + bool Function(String) get isVideoTypeSupported => (super.noSuchMethod( + Invocation.getter(#isVideoTypeSupported), + returnValue: (String __p0) => false, + returnValueForMissingStub: (String __p0) => false, + ) as bool Function(String)); + + @override + set isVideoTypeSupported(bool Function(String)? _isVideoTypeSupported) => + super.noSuchMethod( + Invocation.setter(#isVideoTypeSupported, _isVideoTypeSupported), + returnValueForMissingStub: null, + ); + + @override + _i6.Blob Function(List<_i6.Blob>, String) get blobBuilder => + (super.noSuchMethod( + Invocation.getter(#blobBuilder), + returnValue: _i9.blobBuilderShim(), + returnValueForMissingStub: _i9.blobBuilderShim(), + ) as _i6.Blob Function(List<_i6.Blob>, String)); + + @override + set blobBuilder(_i6.Blob Function(List<_i6.Blob>, String)? _blobBuilder) => + super.noSuchMethod( + Invocation.setter(#blobBuilder, _blobBuilder), + returnValueForMissingStub: null, + ); + + @override + _i5.StreamController<_i7.VideoRecordedEvent> get videoRecorderController => + (super.noSuchMethod( + Invocation.getter(#videoRecorderController), + returnValue: _FakeStreamController_4<_i7.VideoRecordedEvent>( + this, + Invocation.getter(#videoRecorderController), + ), + returnValueForMissingStub: + _FakeStreamController_4<_i7.VideoRecordedEvent>( + this, + Invocation.getter(#videoRecorderController), + ), + ) as _i5.StreamController<_i7.VideoRecordedEvent>); + + @override + _i5.Stream<_i6.MediaStreamTrack> get onEnded => (super.noSuchMethod( + Invocation.getter(#onEnded), + returnValue: _i5.Stream<_i6.MediaStreamTrack>.empty(), + returnValueForMissingStub: _i5.Stream<_i6.MediaStreamTrack>.empty(), + ) as _i5.Stream<_i6.MediaStreamTrack>); + + @override + _i5.Stream<_i6.ErrorEvent> get onVideoRecordingError => (super.noSuchMethod( + Invocation.getter(#onVideoRecordingError), + returnValue: _i5.Stream<_i6.ErrorEvent>.empty(), + returnValueForMissingStub: _i5.Stream<_i6.ErrorEvent>.empty(), + ) as _i5.Stream<_i6.ErrorEvent>); + + @override + _i5.Stream<_i7.VideoRecordedEvent> get onVideoRecordedEvent => + (super.noSuchMethod( + Invocation.getter(#onVideoRecordedEvent), + returnValue: _i5.Stream<_i7.VideoRecordedEvent>.empty(), + returnValueForMissingStub: _i5.Stream<_i7.VideoRecordedEvent>.empty(), + ) as _i5.Stream<_i7.VideoRecordedEvent>); + + @override + _i5.Future initialize() => (super.noSuchMethod( + Invocation.method(#initialize, []), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + _i5.Future play() => (super.noSuchMethod( + Invocation.method(#play, []), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + void pause() => super.noSuchMethod( + Invocation.method(#pause, []), + returnValueForMissingStub: null, + ); + + @override + void stop() => super.noSuchMethod( + Invocation.method(#stop, []), + returnValueForMissingStub: null, + ); + + @override + _i5.Future<_i7.XFile> takePicture() => (super.noSuchMethod( + Invocation.method(#takePicture, []), + returnValue: _i5.Future<_i7.XFile>.value( + _FakeXFile_6(this, Invocation.method(#takePicture, [])), + ), + returnValueForMissingStub: _i5.Future<_i7.XFile>.value( + _FakeXFile_6(this, Invocation.method(#takePicture, [])), + ), + ) as _i5.Future<_i7.XFile>); + + @override + _i4.Size getVideoSize() => (super.noSuchMethod( + Invocation.method(#getVideoSize, []), + returnValue: _FakeSize_2( + this, + Invocation.method(#getVideoSize, []), + ), + returnValueForMissingStub: _FakeSize_2( + this, + Invocation.method(#getVideoSize, []), + ), + ) as _i4.Size); + + @override + void setFlashMode(_i7.FlashMode? mode) => super.noSuchMethod( + Invocation.method(#setFlashMode, [mode]), + returnValueForMissingStub: null, + ); + + @override + double getMaxZoomLevel() => (super.noSuchMethod( + Invocation.method(#getMaxZoomLevel, []), + returnValue: 0.0, + returnValueForMissingStub: 0.0, + ) as double); + + @override + double getMinZoomLevel() => (super.noSuchMethod( + Invocation.method(#getMinZoomLevel, []), + returnValue: 0.0, + returnValueForMissingStub: 0.0, + ) as double); + + @override + void setZoomLevel(double? zoom) => super.noSuchMethod( + Invocation.method(#setZoomLevel, [zoom]), + returnValueForMissingStub: null, + ); + + @override + String getViewType() => (super.noSuchMethod( + Invocation.method(#getViewType, []), + returnValue: _i12.dummyValue( + this, + Invocation.method(#getViewType, []), + ), + returnValueForMissingStub: _i12.dummyValue( + this, + Invocation.method(#getViewType, []), + ), + ) as String); + + @override + _i5.Future startVideoRecording() => (super.noSuchMethod( + Invocation.method(#startVideoRecording, []), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + _i5.Future pauseVideoRecording() => (super.noSuchMethod( + Invocation.method(#pauseVideoRecording, []), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + _i5.Future resumeVideoRecording() => (super.noSuchMethod( + Invocation.method(#resumeVideoRecording, []), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + _i5.Future<_i7.XFile> stopVideoRecording() => (super.noSuchMethod( + Invocation.method(#stopVideoRecording, []), + returnValue: _i5.Future<_i7.XFile>.value( + _FakeXFile_6(this, Invocation.method(#stopVideoRecording, [])), + ), + returnValueForMissingStub: _i5.Future<_i7.XFile>.value( + _FakeXFile_6(this, Invocation.method(#stopVideoRecording, [])), + ), + ) as _i5.Future<_i7.XFile>); + + @override + _i5.Future dispose() => (super.noSuchMethod( + Invocation.method(#dispose, []), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); +} + +/// A class which mocks [CameraOptions]. +/// +/// See the documentation for Mockito's code generation for more information. +// ignore: must_be_immutable +class MockCameraOptions extends _i1.Mock implements _i3.CameraOptions { + @override + _i3.AudioConstraints get audio => (super.noSuchMethod( + Invocation.getter(#audio), + returnValue: _FakeAudioConstraints_7( + this, + Invocation.getter(#audio), + ), + returnValueForMissingStub: _FakeAudioConstraints_7( + this, + Invocation.getter(#audio), + ), + ) as _i3.AudioConstraints); + + @override + _i3.VideoConstraints get video => (super.noSuchMethod( + Invocation.getter(#video), + returnValue: _FakeVideoConstraints_8( + this, + Invocation.getter(#video), + ), + returnValueForMissingStub: _FakeVideoConstraints_8( + this, + Invocation.getter(#video), + ), + ) as _i3.VideoConstraints); + + @override + _i6.MediaStreamConstraints toMediaStreamConstraints() => (super.noSuchMethod( + Invocation.method(#toMediaStreamConstraints, []), + returnValue: _i9.toMediaStreamConstraintsShim(), + returnValueForMissingStub: _i9.toMediaStreamConstraintsShim(), + ) as _i6.MediaStreamConstraints); +} diff --git a/packages/camera/camera_web/example/pubspec.yaml b/packages/camera/camera_web/example/pubspec.yaml index 8305d8434ab..ad864220ae3 100644 --- a/packages/camera/camera_web/example/pubspec.yaml +++ b/packages/camera/camera_web/example/pubspec.yaml @@ -20,9 +20,10 @@ dependencies: dev_dependencies: async: ^2.5.0 + build_runner: ^2.4.12 cross_file: ^0.3.1 flutter_test: sdk: flutter integration_test: sdk: flutter - mocktail: 0.3.0 + mockito: ^5.4.4 diff --git a/script/configs/allowed_pinned_deps.yaml b/script/configs/allowed_pinned_deps.yaml index a224cca3a5a..a2477212661 100644 --- a/script/configs/allowed_pinned_deps.yaml +++ b/script/configs/allowed_pinned_deps.yaml @@ -5,10 +5,6 @@ # # All entries here should have an explanation for why they are here. -# TODO(stuartmorgan): Eliminate this in favor of standardizing on -# mockito. See https://github.com/flutter/flutter/issues/130757 -- mocktail - # Test-only dependency, so does not impact package clients, and # has limited impact so could be easily removed if there are # ever maintenance issues in the future.