[camera_web] Add `takePicture` implementation (#4196)
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 7539dd3..0b35fcf 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
@@ -481,11 +481,39 @@
);
});
- testWidgets('takePicture throws UnimplementedError', (tester) async {
- expect(
- () => CameraPlatform.instance.takePicture(cameraId),
- throwsUnimplementedError,
- );
+ group('takePicture', () {
+ testWidgets(
+ 'throws CameraException '
+ 'with notFound error '
+ 'if the camera does not exist', (tester) async {
+ expect(
+ () => CameraPlatform.instance.initializeCamera(cameraId),
+ throwsA(
+ isA<CameraException>().having(
+ (e) => e.code,
+ 'code',
+ CameraErrorCodes.notFound,
+ ),
+ ),
+ );
+ });
+
+ testWidgets('captures a picture', (tester) async {
+ final camera = MockCamera();
+ final capturedPicture = MockXFile();
+
+ when(camera.takePicture)
+ .thenAnswer((_) => Future.value(capturedPicture));
+
+ // Save the camera in the camera plugin.
+ (CameraPlatform.instance as CameraPlugin).cameras[cameraId] = camera;
+
+ final picture = await CameraPlatform.instance.takePicture(cameraId);
+
+ verify(camera.takePicture).called(1);
+
+ expect(picture, equals(capturedPicture));
+ });
});
testWidgets('prepareForVideoRecording throws UnimplementedError',
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 fa627ca..54a4f59 100644
--- a/packages/camera/camera_web/example/integration_test/helpers/mocks.dart
+++ b/packages/camera/camera_web/example/integration_test/helpers/mocks.dart
@@ -7,6 +7,7 @@
import 'package:camera_web/src/camera.dart';
import 'package:camera_web/src/camera_settings.dart';
+import 'package:cross_file/cross_file.dart';
import 'package:mocktail/mocktail.dart';
class MockWindow extends Mock implements Window {}
@@ -21,6 +22,8 @@
class MockCamera extends Mock implements Camera {}
+class MockXFile extends Mock implements XFile {}
+
/// A fake [MediaStream] that returns the provided [_videoTracks].
class FakeMediaStream extends Fake implements MediaStream {
FakeMediaStream(this._videoTracks);
diff --git a/packages/camera/camera_web/lib/src/camera_web.dart b/packages/camera/camera_web/lib/src/camera_web.dart
index 263e053..7a5738d 100644
--- a/packages/camera/camera_web/lib/src/camera_web.dart
+++ b/packages/camera/camera_web/lib/src/camera_web.dart
@@ -271,7 +271,7 @@
@override
Future<XFile> takePicture(int cameraId) {
- throw UnimplementedError('takePicture() is not implemented.');
+ return getCamera(cameraId).takePicture();
}
@override