Skip to content

Commit dd781d4

Browse files
[camera_avfoundation] Tests backfilling - part 4 (#8854)
Backfills tests for the `FLTCam` class as part of flutter/flutter#119109 Adds tests for the `setDeviceOrientation` method of the `FLTCam` class. I had to add `FLTCaptureVideoDataOutput` and `FLTCaptureOutput` wrappers around AVFoundation classes to make it mockable (similar to the existing `FLTCapturePhotoOutput`wrapper) ## Pre-Review Checklist
1 parent a675ca6 commit dd781d4

22 files changed

+366
-68
lines changed

packages/camera/camera_avfoundation/CHANGELOG.md

+5
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
## 0.9.18+11
2+
3+
* Backfills unit tests for the `FLTCam` class.
4+
* Refactors implementation to allow mocking of `AVCaptureVideoDataOutput` in tests.
5+
16
## 0.9.18+10
27

38
* Backfills unit tests for the `FLTCam` class.

packages/camera/camera_avfoundation/example/ios/Runner.xcodeproj/project.pbxproj

+10
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,13 @@
4949
97DB234D2D566D0700CEFE66 /* CameraPreviewPauseTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97DB234C2D566D0700CEFE66 /* CameraPreviewPauseTests.swift */; };
5050
E0CDBAC227CD9729002561D9 /* CameraTestUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = E0CDBAC127CD9729002561D9 /* CameraTestUtils.m */; };
5151
E11D6A912D82C7740031E6C5 /* FLTCamExposureTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E11D6A902D82C7740031E6C5 /* FLTCamExposureTests.swift */; };
52+
E11D6A8F2D81B81D0031E6C5 /* MockCaptureVideoDataOutput.swift in Sources */ = {isa = PBXBuildFile; fileRef = E11D6A8E2D81B81D0031E6C5 /* MockCaptureVideoDataOutput.swift */; };
5253
E12C4FF62D68C69000515E70 /* CameraPluginDelegatingMethodTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E12C4FF52D68C69000515E70 /* CameraPluginDelegatingMethodTests.swift */; };
5354
E12C4FF82D68E85500515E70 /* MockFLTCameraPermissionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = E12C4FF72D68E85500515E70 /* MockFLTCameraPermissionManager.swift */; };
5455
E16602952D8471C0003CFE12 /* FLTCamZoomTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E16602942D8471C0003CFE12 /* FLTCamZoomTests.swift */; };
5556
E1A5F4E32D80259C0005BA64 /* FLTCamSetFlashModeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1A5F4E22D80259C0005BA64 /* FLTCamSetFlashModeTests.swift */; };
57+
E15139182D80980900FEE47B /* FLTCamSetDeviceOrientationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E15139172D80980900FEE47B /* FLTCamSetDeviceOrientationTests.swift */; };
58+
E1A5F4E32D80259C0005BA64 /* FLTCamSetFlashModeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1A5F4E22D80259C0005BA64 /* FLTCamSetFlashModeTests.swift */; };
5659
E1FFEAAD2D6C8DD700B14107 /* MockFLTCam.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1FFEAAC2D6C8DD700B14107 /* MockFLTCam.swift */; };
5760
E1FFEAAF2D6CDA8C00B14107 /* CameraPluginCreateCameraTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1FFEAAE2D6CDA8C00B14107 /* CameraPluginCreateCameraTests.swift */; };
5861
E1FFEAB12D6CDE5B00B14107 /* CameraPluginInitializeCameraTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1FFEAB02D6CDE5B00B14107 /* CameraPluginInitializeCameraTests.swift */; };
@@ -148,10 +151,13 @@
148151
E0CDBAC027CD9729002561D9 /* CameraTestUtils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CameraTestUtils.h; sourceTree = "<group>"; };
149152
E0CDBAC127CD9729002561D9 /* CameraTestUtils.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CameraTestUtils.m; sourceTree = "<group>"; };
150153
E11D6A902D82C7740031E6C5 /* FLTCamExposureTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FLTCamExposureTests.swift; sourceTree = "<group>"; };
154+
E11D6A8E2D81B81D0031E6C5 /* MockCaptureVideoDataOutput.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockCaptureVideoDataOutput.swift; sourceTree = "<group>"; };
151155
E12C4FF52D68C69000515E70 /* CameraPluginDelegatingMethodTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraPluginDelegatingMethodTests.swift; sourceTree = "<group>"; };
152156
E12C4FF72D68E85500515E70 /* MockFLTCameraPermissionManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockFLTCameraPermissionManager.swift; sourceTree = "<group>"; };
153157
E16602942D8471C0003CFE12 /* FLTCamZoomTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FLTCamZoomTests.swift; sourceTree = "<group>"; };
154158
E1A5F4E22D80259C0005BA64 /* FLTCamSetFlashModeTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FLTCamSetFlashModeTests.swift; sourceTree = "<group>"; };
159+
E15139172D80980900FEE47B /* FLTCamSetDeviceOrientationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FLTCamSetDeviceOrientationTests.swift; sourceTree = "<group>"; };
160+
E1A5F4E22D80259C0005BA64 /* FLTCamSetFlashModeTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FLTCamSetFlashModeTests.swift; sourceTree = "<group>"; };
155161
E1FFEAAC2D6C8DD700B14107 /* MockFLTCam.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockFLTCam.swift; sourceTree = "<group>"; };
156162
E1FFEAAE2D6CDA8C00B14107 /* CameraPluginCreateCameraTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraPluginCreateCameraTests.swift; sourceTree = "<group>"; };
157163
E1FFEAB02D6CDE5B00B14107 /* CameraPluginInitializeCameraTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraPluginInitializeCameraTests.swift; sourceTree = "<group>"; };
@@ -212,6 +218,7 @@
212218
977A25212D5A49EC00931E34 /* FLTCamFocusTests.swift */,
213219
E1A5F4E22D80259C0005BA64 /* FLTCamSetFlashModeTests.swift */,
214220
E16602942D8471C0003CFE12 /* FLTCamZoomTests.swift */,
221+
E15139172D80980900FEE47B /* FLTCamSetDeviceOrientationTests.swift */,
215222
);
216223
path = RunnerTests;
217224
sourceTree = "<group>";
@@ -254,6 +261,7 @@
254261
970ADABF2D6764CC00EFDCD9 /* MockEventChannel.swift */,
255262
E12C4FF72D68E85500515E70 /* MockFLTCameraPermissionManager.swift */,
256263
970ADABD2D6740A900EFDCD9 /* MockWritableData.swift */,
264+
E11D6A8E2D81B81D0031E6C5 /* MockCaptureVideoDataOutput.swift */,
257265
);
258266
path = Mocks;
259267
sourceTree = "<group>";
@@ -557,6 +565,7 @@
557565
7F8FD22F2D4D0B88001AF2C1 /* MockFlutterBinaryMessenger.m in Sources */,
558566
E12C4FF82D68E85500515E70 /* MockFLTCameraPermissionManager.swift in Sources */,
559567
97922B0D2D6380C300A9B4CF /* SampleBufferTests.swift in Sources */,
568+
E15139182D80980900FEE47B /* FLTCamSetDeviceOrientationTests.swift in Sources */,
560569
972CA92B2D5A1D8C004B846F /* CameraPropertiesTests.swift in Sources */,
561570
E0CDBAC227CD9729002561D9 /* CameraTestUtils.m in Sources */,
562571
978296CF2D5F744B0009BDD3 /* PhotoCaptureTests.swift in Sources */,
@@ -577,6 +586,7 @@
577586
978D90B42D5F630300CD817E /* StreamingTests.swift in Sources */,
578587
7F29EB412D281C7E00740257 /* MockCaptureSession.m in Sources */,
579588
7FCEDD352D43C2B900EA1CA8 /* MockDeviceOrientationProvider.m in Sources */,
589+
E11D6A8F2D81B81D0031E6C5 /* MockCaptureVideoDataOutput.swift in Sources */,
580590
977CAC9F2D5E5180001E5DC3 /* ThreadSafeEventChannelTests.swift in Sources */,
581591
7FCEDD362D43C2B900EA1CA8 /* MockCaptureDevice.m in Sources */,
582592
7F8FD22C2D4D07DD001AF2C1 /* MockFlutterTextureRegistry.m in Sources */,

packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraSettingsTests.swift

+1-2
Original file line numberDiff line numberDiff line change
@@ -101,11 +101,10 @@ private final class TestMediaSettingsAVWrapper: FLTCamMediaSettingsAVWrapper {
101101
}
102102

103103
override func recommendedVideoSettingsForAssetWriter(
104-
withFileType fileType: AVFileType, for output: AVCaptureVideoDataOutput
104+
withFileType fileType: AVFileType, for output: FLTCaptureVideoDataOutput
105105
) -> [String: Any]? {
106106
return [:]
107107
}
108-
109108
}
110109

111110
final class CameraSettingsTests: XCTestCase {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
// Copyright 2013 The Flutter Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
import AVFoundation
6+
import XCTest
7+
8+
@testable import camera_avfoundation
9+
10+
final class FLTCamSetDeviceOrientationTests: XCTestCase {
11+
private func createCamera() -> (FLTCam, MockCaptureConnection, MockCaptureConnection) {
12+
let configuration = FLTCreateTestCameraConfiguration()
13+
let camera = FLTCreateCamWithConfiguration(configuration)
14+
15+
let mockCapturePhotoOutput = MockCapturePhotoOutput()
16+
let mockPhotoCaptureConnection = MockCaptureConnection()
17+
mockPhotoCaptureConnection.isVideoOrientationSupported = true
18+
19+
mockCapturePhotoOutput.connectionWithMediaTypeStub = { _ in mockPhotoCaptureConnection }
20+
camera.capturePhotoOutput = mockCapturePhotoOutput
21+
22+
let mockCaptureVideoDataOutput = MockCaptureVideoDataOutput()
23+
let mockVideoCaptureConnection = MockCaptureConnection()
24+
mockVideoCaptureConnection.isVideoOrientationSupported = true
25+
26+
mockCaptureVideoDataOutput.connectionWithMediaTypeStub = { _ in mockVideoCaptureConnection }
27+
camera.captureVideoOutput = mockCaptureVideoDataOutput
28+
29+
return (camera, mockPhotoCaptureConnection, mockVideoCaptureConnection)
30+
}
31+
32+
func testSetDeviceOrientation_setsOrientationsOfCaptureConnections() {
33+
let (camera, mockPhotoCaptureConnection, mockVideoCaptureConnection) = createCamera()
34+
var photoSetVideoOrientationCalled = false
35+
mockPhotoCaptureConnection.setVideoOrientationStub = { orientation in
36+
// Device orientation is flipped compared to video orientation. When UIDeviceOrientation
37+
// is landscape left the video orientation should be landscape right.
38+
XCTAssertEqual(orientation, .landscapeRight)
39+
photoSetVideoOrientationCalled = true
40+
}
41+
42+
var videoSetVideoOrientationCalled = false
43+
mockVideoCaptureConnection.setVideoOrientationStub = { orientation in
44+
// Device orientation is flipped compared to video orientation. When UIDeviceOrientation
45+
// is landscape left the video orientation should be landscape right.
46+
XCTAssertEqual(orientation, .landscapeRight)
47+
videoSetVideoOrientationCalled = true
48+
}
49+
50+
camera.setDeviceOrientation(.landscapeLeft)
51+
52+
XCTAssertTrue(photoSetVideoOrientationCalled)
53+
XCTAssertTrue(videoSetVideoOrientationCalled)
54+
}
55+
56+
func
57+
testSetDeviceOrientation_setsLockedOrientationsOfCaptureConnection_ifCaptureOrientationIsLocked()
58+
{
59+
let (camera, mockPhotoCaptureConnection, mockVideoCaptureConnection) = createCamera()
60+
var photoSetVideoOrientationCalled = false
61+
mockPhotoCaptureConnection.setVideoOrientationStub = { orientation in
62+
XCTAssertEqual(orientation, .portraitUpsideDown)
63+
photoSetVideoOrientationCalled = true
64+
}
65+
66+
var videoSetVideoOrientationCalled = false
67+
mockVideoCaptureConnection.setVideoOrientationStub = { orientation in
68+
XCTAssertEqual(orientation, .portraitUpsideDown)
69+
videoSetVideoOrientationCalled = true
70+
}
71+
72+
camera.lockCapture(FCPPlatformDeviceOrientation.portraitDown)
73+
74+
camera.setDeviceOrientation(.landscapeLeft)
75+
76+
XCTAssertTrue(photoSetVideoOrientationCalled)
77+
XCTAssertTrue(videoSetVideoOrientationCalled)
78+
}
79+
80+
func testSetDeviceOrientation_doesNotSetOrientations_ifRecordingIsInProgress() {
81+
let (camera, mockPhotoCaptureConnection, mockVideoCaptureConnection) = createCamera()
82+
83+
camera.startVideoRecording(completion: { _ in }, messengerForStreaming: nil)
84+
85+
mockPhotoCaptureConnection.setVideoOrientationStub = { _ in XCTFail() }
86+
mockVideoCaptureConnection.setVideoOrientationStub = { _ in XCTFail() }
87+
88+
camera.setDeviceOrientation(.landscapeLeft)
89+
}
90+
91+
func testSetDeviceOrientation_doesNotSetOrientations_forDuplicateUpdates() {
92+
let (camera, mockPhotoCaptureConnection, mockVideoCaptureConnection) = createCamera()
93+
var photoSetVideoOrientationCallCount = 0
94+
mockPhotoCaptureConnection.setVideoOrientationStub = { _ in
95+
photoSetVideoOrientationCallCount += 1
96+
}
97+
98+
var videoSetVideoOrientationCallCount = 0
99+
mockVideoCaptureConnection.setVideoOrientationStub = { _ in
100+
videoSetVideoOrientationCallCount += 1
101+
}
102+
103+
camera.setDeviceOrientation(.landscapeRight)
104+
camera.setDeviceOrientation(.landscapeRight)
105+
106+
XCTAssertEqual(photoSetVideoOrientationCallCount, 1)
107+
XCTAssertEqual(videoSetVideoOrientationCallCount, 1)
108+
}
109+
}

packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockCaptureConnection.h

+3
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ NS_ASSUME_NONNULL_BEGIN
1919
@property(nonatomic, assign, getter=isVideoMirroringSupported) BOOL supportsVideoMirroring;
2020
@property(nonatomic, assign, getter=isVideoOrientationSupported) BOOL supportsVideoOrientation;
2121

22+
// Stub that is called when the corresponding public method is called.
23+
@property(nonatomic, copy) void (^setVideoOrientationStub)(AVCaptureVideoOrientation);
24+
2225
@end
2326

2427
NS_ASSUME_NONNULL_END

packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockCaptureConnection.m

+8
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,12 @@
66

77
@implementation MockCaptureConnection
88

9+
- (void)setVideoOrientation:(AVCaptureVideoOrientation)videoOrientation {
10+
if (self.setVideoOrientationStub) {
11+
_setVideoOrientationStub(videoOrientation);
12+
} else {
13+
_videoOrientation = videoOrientation;
14+
}
15+
}
16+
917
@end

packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockCapturePhotoOutput.h

+5-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ NS_ASSUME_NONNULL_BEGIN
1212
@interface MockCapturePhotoOutput : NSObject <FLTCapturePhotoOutput>
1313

1414
// Properties re-declared as read/write so a mocked value can be set during testing.
15-
@property(nonatomic, strong) AVCapturePhotoOutput *photoOutput;
15+
@property(nonatomic, strong) AVCapturePhotoOutput *avOutput;
1616
@property(nonatomic, strong) NSArray<AVVideoCodecType> *availablePhotoCodecTypes;
1717
@property(nonatomic, assign) BOOL highResolutionCaptureEnabled;
1818
@property(nonatomic, strong) NSArray<NSNumber *> *supportedFlashModes;
@@ -21,6 +21,10 @@ NS_ASSUME_NONNULL_BEGIN
2121
@property(nonatomic, copy) void (^capturePhotoWithSettingsStub)
2222
(AVCapturePhotoSettings *, NSObject<AVCapturePhotoCaptureDelegate> *);
2323

24+
// Stub that is called when the corresponding public method is called.
25+
@property(nonatomic, copy) NSObject<FLTCaptureConnection> * (^connectionWithMediaTypeStub)
26+
(AVMediaType);
27+
2428
@end
2529

2630
NS_ASSUME_NONNULL_END

packages/camera/camera_avfoundation/example/ios/RunnerTests/Mocks/MockCapturePhotoOutput.m

+7-2
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,13 @@ - (void)capturePhotoWithSettings:(AVCapturePhotoSettings *)settings
1212
}
1313
}
1414

15-
- (nullable AVCaptureConnection *)connectionWithMediaType:(nonnull AVMediaType)mediaType {
16-
return nil;
15+
- (nullable NSObject<FLTCaptureConnection> *)connectionWithMediaType:
16+
(nonnull AVMediaType)mediaType {
17+
if (self.connectionWithMediaTypeStub) {
18+
return self.connectionWithMediaTypeStub(mediaType);
19+
} else {
20+
return NULL;
21+
}
1722
}
1823

1924
@end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// Copyright 2013 The Flutter Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
/// Mock implementation of `FLTCaptureVideoDataOutput` protocol which allows injecting a custom
6+
/// implementation.
7+
class MockCaptureVideoDataOutput: NSObject, FLTCaptureVideoDataOutput {
8+
9+
var avOutput = AVCaptureVideoDataOutput()
10+
var alwaysDiscardsLateVideoFrames = false
11+
var videoSettings: [String: Any] = [:]
12+
13+
var connectionWithMediaTypeStub: ((AVMediaType) -> FLTCaptureConnection?)?
14+
15+
func connection(withMediaType mediaType: AVMediaType) -> FLTCaptureConnection? {
16+
return connectionWithMediaTypeStub?(mediaType)
17+
}
18+
19+
func setSampleBufferDelegate(
20+
_ sampleBufferDelegate: AVCaptureVideoDataOutputSampleBufferDelegate?,
21+
queue sampleBufferCallbackQueue: DispatchQueue?
22+
) {}
23+
}

packages/camera/camera_avfoundation/example/ios/RunnerTests/SampleBufferTests.swift

+14-13
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ private class FakeMediaSettingsAVWrapper: FLTCamMediaSettingsAVWrapper {
5555
}
5656

5757
override func recommendedVideoSettingsForAssetWriter(
58-
withFileType fileType: AVFileType, for output: AVCaptureVideoDataOutput
58+
withFileType fileType: AVFileType, for output: FLTCaptureVideoDataOutput
5959
) -> [String: Any]? {
6060
return [:]
6161
}
@@ -100,7 +100,7 @@ final class CameraSampleBufferTests: XCTestCase {
100100
let captureSessionQueue = DispatchQueue(label: "testing")
101101
let camera = FLTCreateCamWithCaptureSessionQueue(captureSessionQueue)
102102
XCTAssertEqual(
103-
captureSessionQueue, camera.captureVideoOutput.sampleBufferCallbackQueue,
103+
captureSessionQueue, camera.captureVideoOutput.avOutput.sampleBufferCallbackQueue,
104104
"Sample buffer callback queue must be the capture session queue.")
105105
}
106106

@@ -110,7 +110,8 @@ final class CameraSampleBufferTests: XCTestCase {
110110
let capturedPixelBuffer = CMSampleBufferGetImageBuffer(capturedSampleBuffer)!
111111
// Mimic sample buffer callback when captured a new video sample.
112112
camera.captureOutput(
113-
camera.captureVideoOutput, didOutputSampleBuffer: capturedSampleBuffer, from: connectionMock)
113+
camera.captureVideoOutput.avOutput, didOutputSampleBuffer: capturedSampleBuffer,
114+
from: connectionMock)
114115
let deliveredPixelBuffer = camera.copyPixelBuffer()?.takeRetainedValue()
115116
XCTAssertEqual(
116117
deliveredPixelBuffer, capturedPixelBuffer,
@@ -129,7 +130,7 @@ final class CameraSampleBufferTests: XCTestCase {
129130
camera.resumeVideoRecording()
130131

131132
camera.captureOutput(
132-
camera.captureVideoOutput, didOutputSampleBuffer: sampleBuffer, from: connectionMock)
133+
camera.captureVideoOutput.avOutput, didOutputSampleBuffer: sampleBuffer, from: connectionMock)
133134

134135
let finalRetainCount = CFGetRetainCount(sampleBuffer)
135136
XCTAssertEqual(
@@ -166,7 +167,7 @@ final class CameraSampleBufferTests: XCTestCase {
166167
camera.captureOutput(nil, didOutputSampleBuffer: audioSample, from: connectionMock)
167168
camera.captureOutput(nil, didOutputSampleBuffer: audioSample, from: connectionMock)
168169
camera.captureOutput(
169-
camera.captureVideoOutput, didOutputSampleBuffer: videoSample, from: connectionMock)
170+
camera.captureVideoOutput.avOutput, didOutputSampleBuffer: videoSample, from: connectionMock)
170171
camera.captureOutput(nil, didOutputSampleBuffer: audioSample, from: connectionMock)
171172

172173
let expectedSamples = ["video", "audio"]
@@ -207,17 +208,17 @@ final class CameraSampleBufferTests: XCTestCase {
207208
camera.pauseVideoRecording()
208209
camera.resumeVideoRecording()
209210
camera.captureOutput(
210-
camera.captureVideoOutput, didOutputSampleBuffer: videoSample, from: connectionMock)
211+
camera.captureVideoOutput.avOutput, didOutputSampleBuffer: videoSample, from: connectionMock)
211212
camera.captureOutput(nil, didOutputSampleBuffer: audioSample, from: connectionMock)
212213
camera.captureOutput(
213-
camera.captureVideoOutput, didOutputSampleBuffer: videoSample, from: connectionMock)
214+
camera.captureVideoOutput.avOutput, didOutputSampleBuffer: videoSample, from: connectionMock)
214215
camera.captureOutput(nil, didOutputSampleBuffer: audioSample, from: connectionMock)
215216

216217
XCTAssert(videoAppended && audioAppended, "Video or audio was not appended.")
217218
}
218219

219220
func testDidOutputSampleBufferMustNotAppendSampleWhenReadyForMoreMediaDataIsFalse() {
220-
let (camera, writerMock, adaptorMock, inputMock, connectionMock) = createCamera()
221+
let (camera, _, adaptorMock, inputMock, connectionMock) = createCamera()
221222

222223
let videoSample = FLTCreateTestSampleBuffer().takeRetainedValue()
223224

@@ -232,18 +233,18 @@ final class CameraSampleBufferTests: XCTestCase {
232233
inputMock.readyForMoreMediaData = true
233234
sampleAppended = false
234235
camera.captureOutput(
235-
camera.captureVideoOutput, didOutputSampleBuffer: videoSample, from: connectionMock)
236+
camera.captureVideoOutput.avOutput, didOutputSampleBuffer: videoSample, from: connectionMock)
236237
XCTAssertTrue(sampleAppended, "Sample was not appended.")
237238

238239
inputMock.readyForMoreMediaData = false
239240
sampleAppended = false
240241
camera.captureOutput(
241-
camera.captureVideoOutput, didOutputSampleBuffer: videoSample, from: connectionMock)
242+
camera.captureVideoOutput.avOutput, didOutputSampleBuffer: videoSample, from: connectionMock)
242243
XCTAssertFalse(sampleAppended, "Sample cannot be appended when readyForMoreMediaData is NO.")
243244
}
244245

245246
func testStopVideoRecordingWithCompletionMustCallCompletion() {
246-
let (camera, writerMock, adaptorMock, inputMock, _) = createCamera()
247+
let (camera, writerMock, _, _, _) = createCamera()
247248

248249
var status = AVAssetWriter.Status.unknown
249250
writerMock.startWritingStub = {
@@ -291,13 +292,13 @@ final class CameraSampleBufferTests: XCTestCase {
291292

292293
let startWritingCalledBefore = startWritingCalled
293294
camera.captureOutput(
294-
camera.captureVideoOutput, didOutputSampleBuffer: videoSample, from: connectionMock)
295+
camera.captureVideoOutput.avOutput, didOutputSampleBuffer: videoSample, from: connectionMock)
295296
XCTAssert(
296297
(startWritingCalledBefore && videoAppended) || (startWritingCalled && !videoAppended),
297298
"The startWriting was called between sample creation and appending.")
298299

299300
camera.captureOutput(
300-
camera.captureVideoOutput, didOutputSampleBuffer: videoSample, from: connectionMock)
301+
camera.captureVideoOutput.avOutput, didOutputSampleBuffer: videoSample, from: connectionMock)
301302
XCTAssert(videoAppended, "Video was not appended.")
302303
}
303304

0 commit comments

Comments
 (0)