diff --git a/packages/camera/camera_avfoundation/CHANGELOG.md b/packages/camera/camera_avfoundation/CHANGELOG.md index f7dc03558d4..c0dad2343bc 100644 --- a/packages/camera/camera_avfoundation/CHANGELOG.md +++ b/packages/camera/camera_avfoundation/CHANGELOG.md @@ -1,3 +1,8 @@ +## 0.9.18+13 + +* Migrates test utils and mocks to Swift. +* Aligns `FLTCaptureDevice` more closely with the `AVCaptureDevice` interface. + ## 0.9.18+12 * Migrates test utils and mocks to Swift. diff --git a/packages/camera/camera_avfoundation/example/ios/Runner.xcodeproj/project.pbxproj b/packages/camera/camera_avfoundation/example/ios/Runner.xcodeproj/project.pbxproj index e3d9a2a2323..3ac9305523c 100644 --- a/packages/camera/camera_avfoundation/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/camera/camera_avfoundation/example/ios/Runner.xcodeproj/project.pbxproj @@ -17,9 +17,7 @@ 7F8FD22C2D4D07DD001AF2C1 /* MockFlutterTextureRegistry.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F8FD22B2D4D07DD001AF2C1 /* MockFlutterTextureRegistry.m */; }; 7F8FD22F2D4D0B88001AF2C1 /* MockFlutterBinaryMessenger.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F8FD22E2D4D0B88001AF2C1 /* MockFlutterBinaryMessenger.m */; }; 7FCEDD352D43C2B900EA1CA8 /* MockDeviceOrientationProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FCEDD342D43C2B900EA1CA8 /* MockDeviceOrientationProvider.m */; }; - 7FCEDD362D43C2B900EA1CA8 /* MockCaptureDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FCEDD322D43C2B900EA1CA8 /* MockCaptureDevice.m */; }; 7FD582202D579ECC003B1200 /* MockCapturePhotoOutput.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FD5821F2D579ECC003B1200 /* MockCapturePhotoOutput.m */; }; - 7FD582272D57C020003B1200 /* MockAssetWriter.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FD582262D57C020003B1200 /* MockAssetWriter.m */; }; 7FD582352D57D97C003B1200 /* MockCaptureDeviceFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FD582342D57D97C003B1200 /* MockCaptureDeviceFormat.m */; }; 7FD83D2B2D5BA65B00F4DB7C /* MockCaptureConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FD83D2A2D5BA65B00F4DB7C /* MockCaptureConnection.m */; }; 970ADABE2D6740A900EFDCD9 /* MockWritableData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 970ADABD2D6740A900EFDCD9 /* MockWritableData.swift */; }; @@ -56,6 +54,12 @@ E15139182D80980900FEE47B /* FLTCamSetDeviceOrientationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E15139172D80980900FEE47B /* FLTCamSetDeviceOrientationTests.swift */; }; E16602952D8471C0003CFE12 /* FLTCamZoomTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E16602942D8471C0003CFE12 /* FLTCamZoomTests.swift */; }; E1A5F4E32D80259C0005BA64 /* FLTCamSetFlashModeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1A5F4E22D80259C0005BA64 /* FLTCamSetFlashModeTests.swift */; }; + E1ABED6C2D94392500AED9CC /* MockAssetWriter.swift in Sources */ = {isa = PBXBuildFile; fileRef = E15BC7E72D86D29F00F66474 /* MockAssetWriter.swift */; }; + E1ABED6D2D94392700AED9CC /* MockAssetWriterInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = E15BC7E92D86D41F00F66474 /* MockAssetWriterInput.swift */; }; + E1ABED6E2D94392900AED9CC /* MockAssetWriterInputPixelBufferAdaptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = E15BC7EB2D86D50200F66474 /* MockAssetWriterInputPixelBufferAdaptor.swift */; }; + E1ABED6F2D943B2500AED9CC /* MockCaptureDevice.swift in Sources */ = {isa = PBXBuildFile; fileRef = E15BC7ED2D86D85500F66474 /* MockCaptureDevice.swift */; }; + E1ABED722D943DC700AED9CC /* MockCaptureDeviceInputFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1ABED702D943DC700AED9CC /* MockCaptureDeviceInputFactory.swift */; }; + E1ABED732D943DC700AED9CC /* MockCaptureInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1ABED712D943DC700AED9CC /* MockCaptureInput.swift */; }; E1FFEAAD2D6C8DD700B14107 /* MockFLTCam.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1FFEAAC2D6C8DD700B14107 /* MockFLTCam.swift */; }; E1FFEAAF2D6CDA8C00B14107 /* CameraPluginCreateCameraTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1FFEAAE2D6CDA8C00B14107 /* CameraPluginCreateCameraTests.swift */; }; E1FFEAB12D6CDE5B00B14107 /* CameraPluginInitializeCameraTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1FFEAB02D6CDE5B00B14107 /* CameraPluginInitializeCameraTests.swift */; }; @@ -102,14 +106,10 @@ 7F8FD22B2D4D07DD001AF2C1 /* MockFlutterTextureRegistry.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MockFlutterTextureRegistry.m; sourceTree = ""; }; 7F8FD22D2D4D0B73001AF2C1 /* MockFlutterBinaryMessenger.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MockFlutterBinaryMessenger.h; sourceTree = ""; }; 7F8FD22E2D4D0B88001AF2C1 /* MockFlutterBinaryMessenger.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MockFlutterBinaryMessenger.m; sourceTree = ""; }; - 7FCEDD312D43C2B900EA1CA8 /* MockCaptureDevice.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MockCaptureDevice.h; sourceTree = ""; }; - 7FCEDD322D43C2B900EA1CA8 /* MockCaptureDevice.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MockCaptureDevice.m; sourceTree = ""; }; 7FCEDD332D43C2B900EA1CA8 /* MockDeviceOrientationProvider.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MockDeviceOrientationProvider.h; sourceTree = ""; }; 7FCEDD342D43C2B900EA1CA8 /* MockDeviceOrientationProvider.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MockDeviceOrientationProvider.m; sourceTree = ""; }; 7FD5821F2D579ECC003B1200 /* MockCapturePhotoOutput.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MockCapturePhotoOutput.m; sourceTree = ""; }; 7FD582212D579ED9003B1200 /* MockCapturePhotoOutput.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MockCapturePhotoOutput.h; sourceTree = ""; }; - 7FD582262D57C020003B1200 /* MockAssetWriter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MockAssetWriter.m; sourceTree = ""; }; - 7FD582282D57C02B003B1200 /* MockAssetWriter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MockAssetWriter.h; sourceTree = ""; }; 7FD582342D57D97C003B1200 /* MockCaptureDeviceFormat.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MockCaptureDeviceFormat.m; sourceTree = ""; }; 7FD582362D57D989003B1200 /* MockCaptureDeviceFormat.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MockCaptureDeviceFormat.h; sourceTree = ""; }; 7FD83D292D5BA49100F4DB7C /* MockCaptureConnection.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MockCaptureConnection.h; sourceTree = ""; }; @@ -155,8 +155,14 @@ E142681C2D8483FD0046CBBC /* MockCaptureSession.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockCaptureSession.swift; sourceTree = ""; }; E142681E2D8566230046CBBC /* CameraTestUtils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraTestUtils.swift; sourceTree = ""; }; E15139172D80980900FEE47B /* FLTCamSetDeviceOrientationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FLTCamSetDeviceOrientationTests.swift; sourceTree = ""; }; + E15BC7E72D86D29F00F66474 /* MockAssetWriter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockAssetWriter.swift; sourceTree = ""; }; + E15BC7E92D86D41F00F66474 /* MockAssetWriterInput.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockAssetWriterInput.swift; sourceTree = ""; }; + E15BC7EB2D86D50200F66474 /* MockAssetWriterInputPixelBufferAdaptor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockAssetWriterInputPixelBufferAdaptor.swift; sourceTree = ""; }; + E15BC7ED2D86D85500F66474 /* MockCaptureDevice.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockCaptureDevice.swift; sourceTree = ""; }; E16602942D8471C0003CFE12 /* FLTCamZoomTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FLTCamZoomTests.swift; sourceTree = ""; }; E1A5F4E22D80259C0005BA64 /* FLTCamSetFlashModeTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FLTCamSetFlashModeTests.swift; sourceTree = ""; }; + E1ABED702D943DC700AED9CC /* MockCaptureDeviceInputFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockCaptureDeviceInputFactory.swift; sourceTree = ""; }; + E1ABED712D943DC700AED9CC /* MockCaptureInput.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MockCaptureInput.swift; sourceTree = ""; }; E1FFEAAC2D6C8DD700B14107 /* MockFLTCam.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockFLTCam.swift; sourceTree = ""; }; E1FFEAAE2D6CDA8C00B14107 /* CameraPluginCreateCameraTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraPluginCreateCameraTests.swift; sourceTree = ""; }; E1FFEAB02D6CDE5B00B14107 /* CameraPluginInitializeCameraTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraPluginInitializeCameraTests.swift; sourceTree = ""; }; @@ -235,8 +241,9 @@ 7F29EB3F2D281C6D00740257 /* Mocks */ = { isa = PBXGroup; children = ( - 7FD582282D57C02B003B1200 /* MockAssetWriter.h */, - 7FD582262D57C020003B1200 /* MockAssetWriter.m */, + E15BC7E72D86D29F00F66474 /* MockAssetWriter.swift */, + E15BC7E92D86D41F00F66474 /* MockAssetWriterInput.swift */, + E15BC7EB2D86D50200F66474 /* MockAssetWriterInputPixelBufferAdaptor.swift */, 7F8FD22D2D4D0B73001AF2C1 /* MockFlutterBinaryMessenger.h */, 7F8FD22E2D4D0B88001AF2C1 /* MockFlutterBinaryMessenger.m */, 7F8FD22A2D4D07A6001AF2C1 /* MockFlutterTextureRegistry.h */, @@ -245,8 +252,9 @@ 7F8FD2282D4BFABF001AF2C1 /* MockGlobalEventApi.m */, 7FD83D292D5BA49100F4DB7C /* MockCaptureConnection.h */, 7FD83D2A2D5BA65B00F4DB7C /* MockCaptureConnection.m */, - 7FCEDD312D43C2B900EA1CA8 /* MockCaptureDevice.h */, - 7FCEDD322D43C2B900EA1CA8 /* MockCaptureDevice.m */, + E15BC7ED2D86D85500F66474 /* MockCaptureDevice.swift */, + E1ABED702D943DC700AED9CC /* MockCaptureDeviceInputFactory.swift */, + E1ABED712D943DC700AED9CC /* MockCaptureInput.swift */, 7FD582362D57D989003B1200 /* MockCaptureDeviceFormat.h */, 7FD582342D57D97C003B1200 /* MockCaptureDeviceFormat.m */, 7FD582212D579ED9003B1200 /* MockCapturePhotoOutput.h */, @@ -554,8 +562,11 @@ 972CA92D2D5A28C4004B846F /* QueueUtilsTests.swift in Sources */, E1FFEAB12D6CDE5B00B14107 /* CameraPluginInitializeCameraTests.swift in Sources */, 979B3DFB2D5B6BC7009BDE1A /* ExceptionCatcher.m in Sources */, + E1ABED6E2D94392900AED9CC /* MockAssetWriterInputPixelBufferAdaptor.swift in Sources */, + E1ABED6C2D94392500AED9CC /* MockAssetWriter.swift in Sources */, E1A5F4E32D80259C0005BA64 /* FLTCamSetFlashModeTests.swift in Sources */, 7FD83D2B2D5BA65B00F4DB7C /* MockCaptureConnection.m in Sources */, + E1ABED6D2D94392700AED9CC /* MockAssetWriterInput.swift in Sources */, 977A25242D5A511600931E34 /* CameraPermissionTests.swift in Sources */, 970ADABE2D6740A900EFDCD9 /* MockWritableData.swift in Sources */, 7F8FD2292D4BFABF001AF2C1 /* MockGlobalEventApi.m in Sources */, @@ -573,14 +584,16 @@ 979B3E002D5B9E6C009BDE1A /* CameraMethodChannelTests.swift in Sources */, E1FFEAAF2D6CDA8C00B14107 /* CameraPluginCreateCameraTests.swift in Sources */, 97DB234D2D566D0700CEFE66 /* CameraPreviewPauseTests.swift in Sources */, + E1ABED732D943DC700AED9CC /* MockCaptureInput.swift in Sources */, 970ADAC02D6764CC00EFDCD9 /* MockEventChannel.swift in Sources */, + E1ABED6F2D943B2500AED9CC /* MockCaptureDevice.swift in Sources */, + E1ABED722D943DC700AED9CC /* MockCaptureDeviceInputFactory.swift in Sources */, 977A25202D5A439300931E34 /* AvailableCamerasTests.swift in Sources */, E142681F2D8566230046CBBC /* CameraTestUtils.swift in Sources */, E1FFEAAD2D6C8DD700B14107 /* MockFLTCam.swift in Sources */, 7F29EB292D26A59000740257 /* MockCameraDeviceDiscoverer.m in Sources */, E16602952D8471C0003CFE12 /* FLTCamZoomTests.swift in Sources */, 97BD4A102D5CE13500F857D5 /* CameraSessionPresetsTests.swift in Sources */, - 7FD582272D57C020003B1200 /* MockAssetWriter.m in Sources */, 979B3E022D5BA48F009BDE1A /* CameraOrientationTests.swift in Sources */, E12C4FF62D68C69000515E70 /* CameraPluginDelegatingMethodTests.swift in Sources */, 977A25222D5A49EC00931E34 /* FLTCamFocusTests.swift in Sources */, @@ -588,7 +601,6 @@ 7FCEDD352D43C2B900EA1CA8 /* MockDeviceOrientationProvider.m in Sources */, E11D6A8F2D81B81D0031E6C5 /* MockCaptureVideoDataOutput.swift in Sources */, 977CAC9F2D5E5180001E5DC3 /* ThreadSafeEventChannelTests.swift in Sources */, - 7FCEDD362D43C2B900EA1CA8 /* MockCaptureDevice.m in Sources */, 7F8FD22C2D4D07DD001AF2C1 /* MockFlutterTextureRegistry.m in Sources */, 97C0FFAE2D5E023200A36284 /* SavePhotoDelegateTests.swift in Sources */, ); diff --git a/packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraSessionPresetsTests.swift b/packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraSessionPresetsTests.swift index a89f2cb4c02..07fb2c8ea9b 100644 --- a/packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraSessionPresetsTests.swift +++ b/packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraSessionPresetsTests.swift @@ -25,9 +25,8 @@ final class CameraSessionPresetsTests: XCTestCase { let captureDeviceMock = MockCaptureDevice() captureDeviceMock.formats = [captureFormatMock] captureDeviceMock.activeFormat = captureFormatMock - captureDeviceMock.lockForConfigurationStub = { error in + captureDeviceMock.lockForConfigurationStub = { lockForConfigurationExpectation.fulfill() - return true } let configuration = CameraTestUtils.createTestCameraConfiguration() diff --git a/packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraTestUtils.swift b/packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraTestUtils.swift index e320beb9411..1c978db8edd 100644 --- a/packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraTestUtils.swift +++ b/packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraTestUtils.swift @@ -40,7 +40,6 @@ enum CameraTestUtils { captureDeviceFormatMock2.videoSupportedFrameRateRanges = [frameRateRangeMock2] let captureDeviceMock = MockCaptureDevice() - captureDeviceMock.lockForConfigurationStub = { _ in true } captureDeviceMock.formats = [captureDeviceFormatMock1, captureDeviceFormatMock2] var currentFormat: FLTCaptureDeviceFormat = captureDeviceFormatMock1 diff --git a/packages/camera/camera_avfoundation/example/ios/RunnerTests/FLTCamExposureTests.swift b/packages/camera/camera_avfoundation/example/ios/RunnerTests/FLTCamExposureTests.swift index d6f0845c4bd..038a5a45977 100644 --- a/packages/camera/camera_avfoundation/example/ios/RunnerTests/FLTCamExposureTests.swift +++ b/packages/camera/camera_avfoundation/example/ios/RunnerTests/FLTCamExposureTests.swift @@ -64,7 +64,7 @@ final class FLTCamExposureTests: XCTestCase { // UI is currently in landscape left orientation. mockDeviceOrientationProvider.orientation = .landscapeLeft // Exposure point of interest is supported. - mockDevice.exposurePointOfInterestSupported = true + mockDevice.isExposurePointOfInterestSupported = true // Verify the focus point of interest has been set. var setPoint = CGPoint.zero @@ -89,7 +89,7 @@ final class FLTCamExposureTests: XCTestCase { // UI is currently in landscape left orientation. mockDeviceOrientationProvider.orientation = .landscapeLeft // Exposure point of interest is not supported. - mockDevice.exposurePointOfInterestSupported = false + mockDevice.isExposurePointOfInterestSupported = false let expectation = expectation(description: "Completion with error") diff --git a/packages/camera/camera_avfoundation/example/ios/RunnerTests/FLTCamFocusTests.swift b/packages/camera/camera_avfoundation/example/ios/RunnerTests/FLTCamFocusTests.swift index 9bb3c2afbbf..df9ac91fc7f 100644 --- a/packages/camera/camera_avfoundation/example/ios/RunnerTests/FLTCamFocusTests.swift +++ b/packages/camera/camera_avfoundation/example/ios/RunnerTests/FLTCamFocusTests.swift @@ -124,7 +124,7 @@ final class FLTCamSetFocusModeTests: XCTestCase { // UI is currently in landscape left orientation. mockDeviceOrientationProvider.orientation = .landscapeLeft // Focus point of interest is supported. - mockDevice.focusPointOfInterestSupported = true + mockDevice.isFocusPointOfInterestSupported = true var setFocusPointOfInterestCalled = false mockDevice.setFocusPointOfInterestStub = { point in @@ -145,7 +145,7 @@ final class FLTCamSetFocusModeTests: XCTestCase { // UI is currently in landscape left orientation. mockDeviceOrientationProvider.orientation = .landscapeLeft // Focus point of interest is not supported. - mockDevice.focusPointOfInterestSupported = false + mockDevice.isFocusPointOfInterestSupported = false let expectation = self.expectation(description: "Completion with error") diff --git a/packages/camera/camera_avfoundation/example/ios/RunnerTests/FLTCamZoomTests.swift b/packages/camera/camera_avfoundation/example/ios/RunnerTests/FLTCamZoomTests.swift index 57c340afcfc..b3320de2825 100644 --- a/packages/camera/camera_avfoundation/example/ios/RunnerTests/FLTCamZoomTests.swift +++ b/packages/camera/camera_avfoundation/example/ios/RunnerTests/FLTCamZoomTests.swift @@ -28,7 +28,7 @@ final class FLTCamZoomTests: XCTestCase { var setVideoZoomFactorCalled = false mockDevice.setVideoZoomFactorStub = { zoom in - XCTAssertEqual(zoom, Float(targetZoom)) + XCTAssertEqual(zoom, targetZoom) setVideoZoomFactorCalled = true } @@ -85,7 +85,7 @@ final class FLTCamZoomTests: XCTestCase { let targetZoom = CGFloat(1.0) - mockDevice.maxAvailableVideoZoomFactor = Float(targetZoom) + mockDevice.maxAvailableVideoZoomFactor = CGFloat(targetZoom) XCTAssertEqual(camera.maximumAvailableZoomFactor, targetZoom) } @@ -95,7 +95,7 @@ final class FLTCamZoomTests: XCTestCase { let targetZoom = CGFloat(1.0) - mockDevice.minAvailableVideoZoomFactor = Float(targetZoom) + mockDevice.minAvailableVideoZoomFactor = CGFloat(targetZoom) XCTAssertEqual(camera.minimumAvailableZoomFactor, targetZoom) } diff --git a/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockAssetWriter.h b/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockAssetWriter.h deleted file mode 100644 index 2c022488b9b..00000000000 --- a/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockAssetWriter.h +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -@import camera_avfoundation; -@import AVFoundation; - -/// Mock implementation of `FLTAssetWriter` protocol which allows injecting a custom -/// implementation. -@interface MockAssetWriter : NSObject - -// Properties re-declared as read/write so a mocked value can be set during testing. -@property(nonatomic, strong) NSError *error; - -// Stubs that are called when the corresponding public method is called. -@property(nonatomic, copy) AVAssetWriterStatus (^statusStub)(void); -@property(nonatomic, copy) void (^getStatusStub)(void); -@property(nonatomic, copy) void (^startWritingStub)(void); -@property(nonatomic, copy) void (^finishWritingStub)(void (^)(void)); - -@end - -/// Mock implementation of `FLTAssetWriterInput` protocol which allows injecting a custom -/// implementation. -@interface MockAssetWriterInput : NSObject - -// Properties re-declared as read/write so a mocked value can be set during testing. -@property(nonatomic, strong) AVAssetWriterInput *input; -@property(nonatomic, assign) BOOL readyForMoreMediaData; -@property(nonatomic, assign) BOOL expectsMediaDataInRealTime; - -// Stub that is called when the `appendSampleBuffer` method is called. -@property(nonatomic, copy) BOOL (^appendSampleBufferStub)(CMSampleBufferRef); - -@end - -/// Mock implementation of `FLTAssetWriterInput` protocol which allows injecting a custom -/// implementation. -@interface MockAssetWriterInputPixelBufferAdaptor : NSObject - -// Stub that is called when the `appendPixelBuffer` method is called. -@property(nonatomic, copy) BOOL (^appendPixelBufferStub)(CVPixelBufferRef, CMTime); - -@end diff --git a/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockAssetWriter.m b/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockAssetWriter.m deleted file mode 100644 index 866ec37ae16..00000000000 --- a/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockAssetWriter.m +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#import "MockAssetWriter.h" - -@implementation MockAssetWriter - -- (BOOL)startWriting { - if (self.startWritingStub) { - self.startWritingStub(); - } - return YES; -} - -- (AVAssetWriterStatus)status { - if (_statusStub) { - return _statusStub(); - } - return AVAssetWriterStatusUnknown; -} - -- (void)finishWritingWithCompletionHandler:(void (^)(void))handler { - if (self.finishWritingStub) { - self.finishWritingStub(handler); - } -} - -- (void)startSessionAtSourceTime:(CMTime)startTime { -} - -- (void)addInput:(AVAssetWriterInput *)input { -} - -@end - -@implementation MockAssetWriterInput - -- (BOOL)appendSampleBuffer:(CMSampleBufferRef)sampleBuffer { - if (self.appendSampleBufferStub) { - return self.appendSampleBufferStub(sampleBuffer); - } - return YES; -} - -@end - -@implementation MockAssetWriterInputPixelBufferAdaptor - -- (BOOL)appendPixelBuffer:(CVPixelBufferRef)pixelBuffer - withPresentationTime:(CMTime)presentationTime { - if (self.appendPixelBufferStub) { - return self.appendPixelBufferStub(pixelBuffer, presentationTime); - } - return YES; -} - -@end diff --git a/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockAssetWriter.swift b/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockAssetWriter.swift new file mode 100644 index 00000000000..f47e6852c44 --- /dev/null +++ b/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockAssetWriter.swift @@ -0,0 +1,29 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/// Mock implementation of `FLTAssetWriter` protocol which allows injecting a custom +/// implementation. +final class MockAssetWriter: NSObject, FLTAssetWriter { + var statusStub: (() -> AVAssetWriter.Status)? + var startWritingStub: (() -> Bool)? + var finishWritingStub: ((() -> Void) -> Void)? + + var status: AVAssetWriter.Status { + return statusStub?() ?? .unknown + } + + var error: Error? = nil + + func startWriting() -> Bool { + return startWritingStub?() ?? true + } + + func finishWriting(completionHandler handler: @escaping () -> Void) { + finishWritingStub?(handler) + } + + func startSession(atSourceTime startTime: CMTime) {} + + func add(_ input: AVAssetWriterInput) {} +} diff --git a/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockAssetWriterInput.swift b/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockAssetWriterInput.swift new file mode 100644 index 00000000000..3b06941ab71 --- /dev/null +++ b/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockAssetWriterInput.swift @@ -0,0 +1,21 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/// Mock implementation of `FLTAssetWriterInput` protocol which allows injecting a custom +/// implementation. +final class MockAssetWriterInput: NSObject, FLTAssetWriterInput { + var appendStub: ((CMSampleBuffer) -> Bool)? + + var input: AVAssetWriterInput { + preconditionFailure("Attempted to access unimplemented property: input") + } + + var expectsMediaDataInRealTime = false + + var readyForMoreMediaData = false + + func append(_ sampleBuffer: CMSampleBuffer) -> Bool { + return appendStub?(sampleBuffer) ?? false + } +} diff --git a/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockAssetWriterInputPixelBufferAdaptor.swift b/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockAssetWriterInputPixelBufferAdaptor.swift new file mode 100644 index 00000000000..20a2ade55c6 --- /dev/null +++ b/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockAssetWriterInputPixelBufferAdaptor.swift @@ -0,0 +1,14 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/// Mock implementation of `FLTAssetWriterInputPixelBufferAdaptor` protocol which allows injecting a custom +/// implementation. +final class MockAssetWriterInputPixelBufferAdaptor: NSObject, FLTAssetWriterInputPixelBufferAdaptor +{ + var appendStub: ((CVPixelBuffer, CMTime) -> Bool)? + + func append(_ pixelBuffer: CVPixelBuffer, withPresentationTime presentationTime: CMTime) -> Bool { + appendStub?(pixelBuffer, presentationTime) ?? true + } +} diff --git a/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockCaptureDevice.h b/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockCaptureDevice.h deleted file mode 100644 index 71589e1338c..00000000000 --- a/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockCaptureDevice.h +++ /dev/null @@ -1,127 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -@import camera_avfoundation; -#if __has_include() -@import camera_avfoundation.Test; -#endif -@import AVFoundation; - -NS_ASSUME_NONNULL_BEGIN - -@interface MockCaptureDevice : NSObject - -@property(nonatomic, assign) NSString *uniqueID; - -// Position/Orientation -@property(nonatomic, assign) AVCaptureDevicePosition position; - -// Format/Configuration -@property(nonatomic, strong) NSArray *> *formats; -/// Overrides the default implementation of getting the active format. -@property(nonatomic, copy) NSObject * (^activeFormatStub)(void); -/// Overrides the default implementation of setting active format. -/// @param format The format being set -@property(nonatomic, copy) void (^setActiveFormatStub)(NSObject *format); - -// Flash/Torch -@property(nonatomic, assign) BOOL hasFlash; -@property(nonatomic, assign) BOOL hasTorch; -@property(nonatomic, assign) BOOL isTorchAvailable; -@property(nonatomic, assign) AVCaptureTorchMode torchMode; -/// Overrides the default implementation of setting torch mode. -/// @param mode The torch mode being set -@property(nonatomic, copy) void (^setTorchModeStub)(AVCaptureTorchMode mode); -@property(nonatomic, copy) AVCaptureTorchMode (^getTorchModeStub)(void); -@property(nonatomic, assign) BOOL flashModeSupported; - -// Focus -@property(nonatomic, assign) BOOL focusPointOfInterestSupported; -/// Overrides the default implementation of checking if focus mode is supported. -/// @param mode The focus mode to check -/// @return Whether the focus mode is supported -@property(nonatomic, copy) BOOL (^isFocusModeSupportedStub)(AVCaptureFocusMode mode); -@property(nonatomic, assign) AVCaptureFocusMode focusMode; -/// Overrides the default implementation of setting focus mode. -/// @param mode The focus mode being set -@property(nonatomic, copy) void (^setFocusModeStub)(AVCaptureFocusMode mode); -@property(nonatomic, assign) CGPoint focusPointOfInterest; -/// Overrides the default implementation of setting focus point of interest. -/// @param point The focus point being set -@property(nonatomic, copy) void (^setFocusPointOfInterestStub)(CGPoint point); - -// Exposure -@property(nonatomic, assign) BOOL exposurePointOfInterestSupported; -@property(nonatomic, assign) AVCaptureExposureMode exposureMode; -@property(nonatomic, copy) BOOL (^isExposureModeSupportedStub)(AVCaptureExposureMode mode); -/// Overrides the default implementation of setting exposure mode. -/// @param mode The exposure mode being set -@property(nonatomic, copy) void (^setExposureModeStub)(AVCaptureExposureMode mode); -@property(nonatomic, assign) CGPoint exposurePointOfInterest; -/// Override the default implementation of setting exposure point of interest. -/// @param point The exposure point being set -@property(nonatomic, copy) void (^setExposurePointOfInterestStub)(CGPoint point); -@property(nonatomic, assign) float minExposureTargetBias; -@property(nonatomic, assign) float maxExposureTargetBias; -/// Overrides the default implementation of setting exposure target bias. -/// @param bias The exposure bias being set -/// @param handler The completion handler to be called -@property(nonatomic, copy) void (^setExposureTargetBiasStub) - (float bias, void (^_Nullable handler)(CMTime)); - -// Zoom -@property(nonatomic, assign) float maxAvailableVideoZoomFactor; -@property(nonatomic, assign) float minAvailableVideoZoomFactor; -@property(nonatomic, assign) float videoZoomFactor; -/// Overrides the default implementation of setting video zoom factor. -/// @param factor The zoom factor being set -@property(nonatomic, copy) void (^setVideoZoomFactorStub)(float factor); - -// Camera Properties -@property(nonatomic, assign) float lensAperture; -@property(nonatomic, assign) CMTime exposureDuration; -@property(nonatomic, assign) float ISO; - -// Configuration Lock -/// Overrides the default implementation of locking device for configuration. -/// @param error Error pointer to be set if lock fails -@property(nonatomic, copy) BOOL (^lockForConfigurationStub)(NSError **error); -/// Overrides the default implementation of unlocking device configuration. -@property(nonatomic, copy) void (^unlockForConfigurationStub)(void); - -// Frame Duration -@property(nonatomic, assign) CMTime activeVideoMinFrameDuration; -@property(nonatomic, assign) CMTime activeVideoMaxFrameDuration; -/// Overrides the default implementation of setting minimum frame duration. -/// @param duration The minimum frame duration being set -@property(nonatomic, copy) void (^setActiveVideoMinFrameDurationStub)(CMTime duration); -/// Overrides the default implementation of setting maximum frame duration. -/// @param duration The maximum frame duration being set -@property(nonatomic, copy) void (^setActiveVideoMaxFrameDurationStub)(CMTime duration); - -@end - -/// A mocked implementation of FLTCaptureDeviceInputFactory which allows injecting a custom -/// implementation. -@interface MockCaptureInput : NSObject - -/// This property is re-declared to be read/write to allow setting a mocked value for testing. -@property(nonatomic, strong) NSArray *ports; - -@end - -/// A mocked implementation of FLTCaptureDeviceInputFactory which allows injecting a custom -/// implementation. -@interface MockCaptureDeviceInputFactory : NSObject - -/// Initializes a new instance with the given mock device input. Whenever `deviceInputWithDevice` is -/// called on this instance, it will return the mock device input. -- (nonnull instancetype)initWithMockDeviceInput:(NSObject *)mockDeviceInput; - -/// The mock device input to be returned by `deviceInputWithDevice`. -@property(nonatomic, strong) NSObject *mockDeviceInput; - -@end - -NS_ASSUME_NONNULL_END diff --git a/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockCaptureDevice.m b/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockCaptureDevice.m deleted file mode 100644 index b8ff1e326fe..00000000000 --- a/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockCaptureDevice.m +++ /dev/null @@ -1,154 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#import "MockCaptureDevice.h" - -@import camera_avfoundation; -#if __has_include() -@import camera_avfoundation.Test; -#endif -@import AVFoundation; - -@implementation MockCaptureDevice - -- (NSObject *)activeFormat { - if (self.activeFormatStub) { - return self.activeFormatStub(); - } - return nil; -} - -- (void)setActiveFormat:(NSObject *)format { - if (self.setActiveFormatStub) { - self.setActiveFormatStub(format); - } -} - -- (BOOL)isFlashModeSupported:(AVCaptureFlashMode)mode { - return self.flashModeSupported; -} - -- (void)setTorchMode:(AVCaptureTorchMode)mode { - if (self.setTorchModeStub) { - self.setTorchModeStub(mode); - } -} - -- (AVCaptureTorchMode)torchMode { - if (self.getTorchModeStub) { - return self.getTorchModeStub(); - } - return AVCaptureTorchModeOff; -} - -- (BOOL)isFocusModeSupported:(AVCaptureFocusMode)mode { - if (self.isFocusModeSupportedStub) { - return self.isFocusModeSupportedStub(mode); - } - return NO; -} - -- (void)setFocusMode:(AVCaptureFocusMode)mode { - if (self.setFocusModeStub) { - self.setFocusModeStub(mode); - } -} - -- (void)setFocusPointOfInterest:(CGPoint)point { - if (self.setFocusPointOfInterestStub) { - self.setFocusPointOfInterestStub(point); - } -} - -- (void)setExposureMode:(AVCaptureExposureMode)mode { - if (self.setExposureModeStub) { - self.setExposureModeStub(mode); - } -} - -- (void)setExposurePointOfInterest:(CGPoint)point { - if (self.setExposurePointOfInterestStub) { - self.setExposurePointOfInterestStub(point); - } -} - -- (void)setExposureTargetBias:(float)bias completionHandler:(void (^)(CMTime))handler { - if (self.setExposureTargetBiasStub) { - self.setExposureTargetBiasStub(bias, handler); - } -} - -- (void)setVideoZoomFactor:(float)factor { - if (self.setVideoZoomFactorStub) { - self.setVideoZoomFactorStub(factor); - } -} - -- (BOOL)lockForConfiguration:(NSError **)error { - if (self.lockForConfigurationStub) { - return self.lockForConfigurationStub(error); - } - return YES; -} - -- (void)unlockForConfiguration { - if (self.unlockForConfigurationStub) { - self.unlockForConfigurationStub(); - } -} - -- (void)setActiveVideoMinFrameDuration:(CMTime)duration { - if (self.setActiveVideoMinFrameDurationStub) { - self.setActiveVideoMinFrameDurationStub(duration); - } -} - -- (void)setActiveVideoMaxFrameDuration:(CMTime)duration { - if (self.setActiveVideoMaxFrameDurationStub) { - self.setActiveVideoMaxFrameDurationStub(duration); - } -} - -- (BOOL)isExposureModeSupported:(AVCaptureExposureMode)mode { - if (self.isExposureModeSupportedStub) { - return self.isExposureModeSupportedStub(mode); - } else { - return NO; - } -} - -@synthesize device; - -@end - -@implementation MockCaptureInput -@synthesize ports; -@synthesize input; -@end - -@implementation MockCaptureDeviceInputFactory - -- (nonnull instancetype)init { - self = [super init]; - if (self) { - _mockDeviceInput = [[MockCaptureInput alloc] init]; - } - return self; -} - -- (nonnull instancetype)initWithMockDeviceInput: - (nonnull NSObject *)mockDeviceInput { - self = [super init]; - if (self) { - _mockDeviceInput = mockDeviceInput; - } - return self; -} - -- (NSObject *)deviceInputWithDevice:(NSObject *)device - error:(NSError **)error { - return _mockDeviceInput; -} - -@end diff --git a/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockCaptureDevice.swift b/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockCaptureDevice.swift new file mode 100644 index 00000000000..53886adf8ee --- /dev/null +++ b/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockCaptureDevice.swift @@ -0,0 +1,114 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/// A mock implementation of `FLTCaptureDevice` that allows mocking the class +/// properties. +class MockCaptureDevice: NSObject, FLTCaptureDevice { + var activeFormatStub: (() -> FLTCaptureDeviceFormat)? + var setActiveFormatStub: ((FLTCaptureDeviceFormat) -> Void)? + var getTorchModeStub: (() -> AVCaptureDevice.TorchMode)? + var setTorchModeStub: ((AVCaptureDevice.TorchMode) -> Void)? + var isFocusModeSupportedStub: ((AVCaptureDevice.FocusMode) -> Bool)? + var setFocusModeStub: ((AVCaptureDevice.FocusMode) -> Void)? + var setFocusPointOfInterestStub: ((CGPoint) -> Void)? + var setExposureModeStub: ((AVCaptureDevice.ExposureMode) -> Void)? + var setExposurePointOfInterestStub: ((CGPoint) -> Void)? + var setExposureTargetBiasStub: ((Float, ((CMTime) -> Void)?) -> Void)? + var isExposureModeSupportedStub: ((AVCaptureDevice.ExposureMode) -> Bool)? + var setVideoZoomFactorStub: ((CGFloat) -> Void)? + var lockForConfigurationStub: (() throws -> Void)? + + var device: AVCaptureDevice { + preconditionFailure("Attempted to access unimplemented property: device") + } + + var uniqueID = "" + var position = AVCaptureDevice.Position.unspecified + + var activeFormat: FLTCaptureDeviceFormat { + get { + activeFormatStub?() ?? MockCaptureDeviceFormat() + } + set { + setActiveFormatStub?(newValue) + } + } + + var formats: [FLTCaptureDeviceFormat] = [] + var hasFlash = false + var hasTorch = false + var isTorchAvailable = false + var torchMode: AVCaptureDevice.TorchMode { + get { + getTorchModeStub?() ?? .off + } + set { + setTorchModeStub?(newValue) + } + } + var isFocusPointOfInterestSupported = false + var maxAvailableVideoZoomFactor = CGFloat(0) + var minAvailableVideoZoomFactor = CGFloat(0) + var videoZoomFactor: CGFloat { + get { 0 } + set { + setVideoZoomFactorStub?(newValue) + } + } + var isExposurePointOfInterestSupported = false + var minExposureTargetBias = Float(0) + var maxExposureTargetBias = Float(0) + var activeVideoMinFrameDuration = CMTime(value: 1, timescale: 1) + var activeVideoMaxFrameDuration = CMTime(value: 1, timescale: 1) + + func isFlashModeSupported(_ mode: AVCaptureDevice.FlashMode) -> Bool { + return false + } + + func isFocusModeSupported(_ mode: AVCaptureDevice.FocusMode) -> Bool { + return isFocusModeSupportedStub?(mode) ?? false + } + + func setFocusMode(_ focusMode: AVCaptureDevice.FocusMode) { + setFocusModeStub?(focusMode) + } + + func setFocusPointOfInterest(_ point: CGPoint) { + setFocusPointOfInterestStub?(point) + } + + func setExposureMode(_ exposureMode: AVCaptureDevice.ExposureMode) { + setExposureModeStub?(exposureMode) + } + + func setExposurePointOfInterest(_ point: CGPoint) { + setExposurePointOfInterestStub?(point) + } + + func setExposureTargetBias(_ bias: Float, completionHandler handler: ((CMTime) -> Void)? = nil) { + setExposureTargetBiasStub?(bias, handler) + } + + func isExposureModeSupported(_ mode: AVCaptureDevice.ExposureMode) -> Bool { + return isExposureModeSupportedStub?(mode) ?? false + } + + func lensAperture() -> Float { + return 0 + } + + func exposureDuration() -> CMTime { + return CMTime(value: 1, timescale: 1) + } + + func iso() -> Float { + return 0 + } + + func lockForConfiguration() throws { + try lockForConfigurationStub?() + } + + func unlockForConfiguration() {} +} diff --git a/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockCaptureDeviceInputFactory.swift b/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockCaptureDeviceInputFactory.swift new file mode 100644 index 00000000000..bbca49a230a --- /dev/null +++ b/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockCaptureDeviceInputFactory.swift @@ -0,0 +1,11 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +///// A mocked implementation of FLTCaptureDeviceInputFactory which allows injecting a custom +///// implementation. +final class MockCaptureDeviceInputFactory: NSObject, FLTCaptureDeviceInputFactory { + func deviceInput(with device: FLTCaptureDevice) throws -> FLTCaptureInput { + return MockCaptureInput() + } +} diff --git a/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockCaptureInput.swift b/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockCaptureInput.swift new file mode 100644 index 00000000000..6c8151a1715 --- /dev/null +++ b/packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockCaptureInput.swift @@ -0,0 +1,13 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/// A mocked implementation of FLTCaptureInput which allows injecting a custom +/// implementation. +final class MockCaptureInput: NSObject, FLTCaptureInput { + var input: AVCaptureInput { + preconditionFailure("Attempted to access unimplemented property: input") + } + + var ports: [AVCaptureInput.Port] = [] +} diff --git a/packages/camera/camera_avfoundation/example/ios/RunnerTests/RunnerTests-Bridging-Header.h b/packages/camera/camera_avfoundation/example/ios/RunnerTests/RunnerTests-Bridging-Header.h index 8316eb929cd..dabe0173157 100644 --- a/packages/camera/camera_avfoundation/example/ios/RunnerTests/RunnerTests-Bridging-Header.h +++ b/packages/camera/camera_avfoundation/example/ios/RunnerTests/RunnerTests-Bridging-Header.h @@ -11,10 +11,8 @@ #import "camera_avfoundation/FLTThreadSafeEventChannel.h" // Mocks, protocols. -#import "MockAssetWriter.h" #import "MockCameraDeviceDiscoverer.h" #import "MockCaptureConnection.h" -#import "MockCaptureDevice.h" #import "MockCaptureDeviceFormat.h" #import "MockCapturePhotoOutput.h" #import "MockDeviceOrientationProvider.h" diff --git a/packages/camera/camera_avfoundation/example/ios/RunnerTests/SampleBufferTests.swift b/packages/camera/camera_avfoundation/example/ios/RunnerTests/SampleBufferTests.swift index bb8e18ed827..932f93ee5d5 100644 --- a/packages/camera/camera_avfoundation/example/ios/RunnerTests/SampleBufferTests.swift +++ b/packages/camera/camera_avfoundation/example/ios/RunnerTests/SampleBufferTests.swift @@ -144,6 +144,7 @@ final class CameraSampleBufferTests: XCTestCase { var status = AVAssetWriter.Status.unknown writerMock.startWritingStub = { status = .writing + return true } writerMock.statusStub = { return status @@ -153,12 +154,12 @@ final class CameraSampleBufferTests: XCTestCase { let audioSample = CameraTestUtils.createTestAudioSampleBuffer() var writtenSamples: [String] = [] - adaptorMock.appendPixelBufferStub = { buffer, time in + adaptorMock.appendStub = { buffer, time in writtenSamples.append("video") return true } inputMock.readyForMoreMediaData = true - inputMock.appendSampleBufferStub = { buffer in + inputMock.appendStub = { buffer in writtenSamples.append("audio") return true } @@ -183,13 +184,14 @@ final class CameraSampleBufferTests: XCTestCase { var status = AVAssetWriter.Status.unknown writerMock.startWritingStub = { status = .writing + return true } writerMock.statusStub = { return status } var videoAppended = false - adaptorMock.appendPixelBufferStub = { buffer, time in + adaptorMock.appendStub = { buffer, time in XCTAssert(CMTIME_IS_NUMERIC(time)) videoAppended = true return true @@ -197,8 +199,8 @@ final class CameraSampleBufferTests: XCTestCase { var audioAppended = false inputMock.readyForMoreMediaData = true - inputMock.appendSampleBufferStub = { buffer in - let sampleTime = CMSampleBufferGetPresentationTimeStamp(buffer!) + inputMock.appendStub = { buffer in + let sampleTime = CMSampleBufferGetPresentationTimeStamp(buffer) XCTAssert(CMTIME_IS_NUMERIC(sampleTime)) audioAppended = true return true @@ -223,7 +225,7 @@ final class CameraSampleBufferTests: XCTestCase { let videoSample = CameraTestUtils.createTestSampleBuffer() var sampleAppended = false - adaptorMock.appendPixelBufferStub = { buffer, time in + adaptorMock.appendStub = { buffer, time in sampleAppended = true return true } @@ -249,6 +251,7 @@ final class CameraSampleBufferTests: XCTestCase { var status = AVAssetWriter.Status.unknown writerMock.startWritingStub = { status = .writing + return true } writerMock.statusStub = { return status @@ -258,7 +261,7 @@ final class CameraSampleBufferTests: XCTestCase { writerMock.status == .writing, "Cannot call finishWritingWithCompletionHandler when status is not AVAssetWriter.Status.writing." ) - handler?() + handler() } camera.startVideoRecording(completion: { error in }, messengerForStreaming: nil) @@ -278,10 +281,12 @@ final class CameraSampleBufferTests: XCTestCase { var startWritingCalled = false writerMock.startWritingStub = { startWritingCalled = true + return true + } var videoAppended = false - adaptorMock.appendPixelBufferStub = { buffer, time in + adaptorMock.appendStub = { buffer, time in videoAppended = true return true } diff --git a/packages/camera/camera_avfoundation/ios/camera_avfoundation/Sources/camera_avfoundation/FLTCaptureDevice.m b/packages/camera/camera_avfoundation/ios/camera_avfoundation/Sources/camera_avfoundation/FLTCaptureDevice.m index 41e75e9b257..0c6b31709e1 100644 --- a/packages/camera/camera_avfoundation/ios/camera_avfoundation/Sources/camera_avfoundation/FLTCaptureDevice.m +++ b/packages/camera/camera_avfoundation/ios/camera_avfoundation/Sources/camera_avfoundation/FLTCaptureDevice.m @@ -77,8 +77,8 @@ - (BOOL)isFlashModeSupported:(AVCaptureFlashMode)mode { #pragma clang diagnostic pop // Focus -- (BOOL)focusPointOfInterestSupported { - return self.device.focusPointOfInterestSupported; +- (BOOL)isFocusPointOfInterestSupported { + return self.device.isFocusPointOfInterestSupported; } - (BOOL)isFocusModeSupported:(AVCaptureFocusMode)mode { @@ -94,8 +94,8 @@ - (void)setFocusPointOfInterest:(CGPoint)point { } // Exposure -- (BOOL)exposurePointOfInterestSupported { - return self.device.exposurePointOfInterestSupported; +- (BOOL)isExposurePointOfInterestSupported { + return self.device.isExposurePointOfInterestSupported; } - (void)setExposureMode:(AVCaptureExposureMode)exposureMode { @@ -123,19 +123,19 @@ - (BOOL)isExposureModeSupported:(AVCaptureExposureMode)mode { } // Zoom -- (float)maxAvailableVideoZoomFactor { +- (CGFloat)maxAvailableVideoZoomFactor { return self.device.maxAvailableVideoZoomFactor; } -- (float)minAvailableVideoZoomFactor { +- (CGFloat)minAvailableVideoZoomFactor { return self.device.minAvailableVideoZoomFactor; } -- (float)videoZoomFactor { +- (CGFloat)videoZoomFactor { return self.device.videoZoomFactor; } -- (void)setVideoZoomFactor:(float)factor { +- (void)setVideoZoomFactor:(CGFloat)factor { self.device.videoZoomFactor = factor; } diff --git a/packages/camera/camera_avfoundation/ios/camera_avfoundation/Sources/camera_avfoundation/include/camera_avfoundation/FLTCaptureDevice.h b/packages/camera/camera_avfoundation/ios/camera_avfoundation/Sources/camera_avfoundation/include/camera_avfoundation/FLTCaptureDevice.h index 76dc9717305..80735b8e167 100644 --- a/packages/camera/camera_avfoundation/ios/camera_avfoundation/Sources/camera_avfoundation/include/camera_avfoundation/FLTCaptureDevice.h +++ b/packages/camera/camera_avfoundation/ios/camera_avfoundation/Sources/camera_avfoundation/include/camera_avfoundation/FLTCaptureDevice.h @@ -22,40 +22,40 @@ NS_ASSUME_NONNULL_BEGIN @property(nonatomic, readonly) NSString *uniqueID; // Position/Orientation -- (AVCaptureDevicePosition)position; +@property(nonatomic, readonly) AVCaptureDevicePosition position; // Format/Configuration @property(nonatomic, retain) NSObject *activeFormat; @property(nonatomic, readonly) NSArray *> *formats; // Flash/Torch -- (BOOL)hasFlash; -- (BOOL)hasTorch; -- (BOOL)isTorchAvailable; -- (AVCaptureTorchMode)torchMode; -- (void)setTorchMode:(AVCaptureTorchMode)torchMode; +@property(nonatomic, readonly) BOOL hasFlash; +@property(nonatomic, readonly) BOOL hasTorch; +@property(nonatomic, readonly, getter=isTorchAvailable) BOOL torchAvailable; +@property(nonatomic) AVCaptureTorchMode torchMode; - (BOOL)isFlashModeSupported:(AVCaptureFlashMode)mode; // Focus -- (BOOL)focusPointOfInterestSupported; +@property(nonatomic, readonly, getter=isFocusPointOfInterestSupported) + BOOL focusPointOfInterestSupported; - (BOOL)isFocusModeSupported:(AVCaptureFocusMode)mode; - (void)setFocusMode:(AVCaptureFocusMode)focusMode; - (void)setFocusPointOfInterest:(CGPoint)point; // Exposure -- (BOOL)exposurePointOfInterestSupported; +@property(nonatomic, readonly, getter=isExposurePointOfInterestSupported) + BOOL exposurePointOfInterestSupported; - (void)setExposureMode:(AVCaptureExposureMode)exposureMode; - (void)setExposurePointOfInterest:(CGPoint)point; -- (float)minExposureTargetBias; -- (float)maxExposureTargetBias; +@property(nonatomic, readonly) float minExposureTargetBias; +@property(nonatomic, readonly) float maxExposureTargetBias; - (void)setExposureTargetBias:(float)bias completionHandler:(void (^_Nullable)(CMTime))handler; - (BOOL)isExposureModeSupported:(AVCaptureExposureMode)mode; // Zoom -- (float)maxAvailableVideoZoomFactor; -- (float)minAvailableVideoZoomFactor; -- (float)videoZoomFactor; -- (void)setVideoZoomFactor:(float)factor; +@property(nonatomic, readonly) CGFloat maxAvailableVideoZoomFactor; +@property(nonatomic, readonly) CGFloat minAvailableVideoZoomFactor; +@property(nonatomic) CGFloat videoZoomFactor; // Camera Properties - (float)lensAperture; @@ -63,14 +63,12 @@ NS_ASSUME_NONNULL_BEGIN - (float)ISO; // Configuration Lock -- (BOOL)lockForConfiguration:(NSError **)error; +- (BOOL)lockForConfiguration:(NSError *_Nullable *_Nullable)outError; - (void)unlockForConfiguration; // Frame Duration -- (CMTime)activeVideoMinFrameDuration; -- (void)setActiveVideoMinFrameDuration:(CMTime)duration; -- (CMTime)activeVideoMaxFrameDuration; -- (void)setActiveVideoMaxFrameDuration:(CMTime)duration; +@property(nonatomic) CMTime activeVideoMinFrameDuration; +@property(nonatomic) CMTime activeVideoMaxFrameDuration; @end diff --git a/packages/camera/camera_avfoundation/pubspec.yaml b/packages/camera/camera_avfoundation/pubspec.yaml index 7605730d9ce..66dffba0df0 100644 --- a/packages/camera/camera_avfoundation/pubspec.yaml +++ b/packages/camera/camera_avfoundation/pubspec.yaml @@ -2,7 +2,7 @@ name: camera_avfoundation description: iOS implementation of the camera plugin. repository: https://github.com/flutter/packages/tree/main/packages/camera/camera_avfoundation issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22 -version: 0.9.18+12 +version: 0.9.18+13 environment: sdk: ^3.4.0