Skip to content

Commit 0566371

Browse files
authored
[camera] Remove OCMock from CameraSettingsTests, CameraMethodChannelTests and CameraSessionPresetsTests (flutter#8592)
Continuation of OCMock removal from tests related to flutter/flutter#119109. - Introduces new protocols: `FLTFrameRateRange` and `FLTCaptureDeviceFormat` - Refactors `CameraTestUtils` to get rid of multiple similar helper methods in favor of using `FLTCamConfiguration` to set up mocks in tests. Also removes some OCMock usage from there.
1 parent fec5ec5 commit 0566371

29 files changed

+480
-335
lines changed

packages/camera/camera_avfoundation/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 0.9.18+4
2+
3+
* Refactors implementations to reduce usage of OCMock in internal testing.
4+
15
## 0.9.18+3
26

37
* Refactors implementations to reduce usage of OCMock in internal testing.

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
7FA99E592D22C75300582559 /* CameraExposureTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FA99E582D22C75300582559 /* CameraExposureTests.m */; };
3030
7FCEDD352D43C2B900EA1CA8 /* MockDeviceOrientationProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FCEDD342D43C2B900EA1CA8 /* MockDeviceOrientationProvider.m */; };
3131
7FCEDD362D43C2B900EA1CA8 /* MockCaptureDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FCEDD322D43C2B900EA1CA8 /* MockCaptureDevice.m */; };
32+
7FD582352D57D97C003B1200 /* MockCaptureDeviceFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FD582342D57D97C003B1200 /* MockCaptureDeviceFormat.m */; };
3233
7FD582122D579650003B1200 /* MockWritableData.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FD582112D579650003B1200 /* MockWritableData.m */; };
3334
7FD582202D579ECC003B1200 /* MockCapturePhotoOutput.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FD5821F2D579ECC003B1200 /* MockCapturePhotoOutput.m */; };
3435
978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; };
@@ -104,6 +105,8 @@
104105
7FCEDD322D43C2B900EA1CA8 /* MockCaptureDevice.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MockCaptureDevice.m; sourceTree = "<group>"; };
105106
7FCEDD332D43C2B900EA1CA8 /* MockDeviceOrientationProvider.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MockDeviceOrientationProvider.h; sourceTree = "<group>"; };
106107
7FCEDD342D43C2B900EA1CA8 /* MockDeviceOrientationProvider.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MockDeviceOrientationProvider.m; sourceTree = "<group>"; };
108+
7FD582342D57D97C003B1200 /* MockCaptureDeviceFormat.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MockCaptureDeviceFormat.m; sourceTree = "<group>"; };
109+
7FD582362D57D989003B1200 /* MockCaptureDeviceFormat.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MockCaptureDeviceFormat.h; sourceTree = "<group>"; };
107110
7FD582112D579650003B1200 /* MockWritableData.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MockWritableData.m; sourceTree = "<group>"; };
108111
7FD582132D57965A003B1200 /* MockWritableData.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MockWritableData.h; sourceTree = "<group>"; };
109112
7FD5821F2D579ECC003B1200 /* MockCapturePhotoOutput.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MockCapturePhotoOutput.m; sourceTree = "<group>"; };
@@ -205,6 +208,8 @@
205208
7F8FD2272D4BFA8D001AF2C1 /* MockGlobalEventApi.h */,
206209
7FCEDD312D43C2B900EA1CA8 /* MockCaptureDevice.h */,
207210
7FCEDD322D43C2B900EA1CA8 /* MockCaptureDevice.m */,
211+
7FD582362D57D989003B1200 /* MockCaptureDeviceFormat.h */,
212+
7FD582342D57D97C003B1200 /* MockCaptureDeviceFormat.m */,
208213
7FD582212D579ED9003B1200 /* MockCapturePhotoOutput.h */,
209214
7FD5821F2D579ECC003B1200 /* MockCapturePhotoOutput.m */,
210215
7FCEDD332D43C2B900EA1CA8 /* MockDeviceOrientationProvider.h */,
@@ -516,6 +521,7 @@
516521
7FA99E592D22C75300582559 /* CameraExposureTests.m in Sources */,
517522
E487C86026D686A10034AC92 /* CameraPreviewPauseTests.m in Sources */,
518523
E071CF7427B31DE4006EF3BA /* FLTCamSampleBufferTests.m in Sources */,
524+
7FD582352D57D97C003B1200 /* MockCaptureDeviceFormat.m in Sources */,
519525
7F29EB222D269ED500740257 /* MockEventChannel.m in Sources */,
520526
7F8FD22F2D4D0B88001AF2C1 /* MockFlutterBinaryMessenger.m in Sources */,
521527
E04F108627A87CA600573D0C /* FLTSavePhotoDelegateTests.m in Sources */,

packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraExposureTests.m

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,10 @@ - (void)setUp {
2323
_mockDeviceOrientationProvider = [[MockDeviceOrientationProvider alloc] init];
2424
_mockDevice = mockDevice;
2525

26-
_camera = FLTCreateCamWithCaptureSessionQueueAndMediaSettings(
27-
nil, nil, nil,
28-
^NSObject<FLTCaptureDevice> *(void) {
29-
return mockDevice;
30-
},
31-
_mockDeviceOrientationProvider);
26+
FLTCamConfiguration *configuration = FLTCreateTestCameraConfiguration();
27+
configuration.captureDeviceFactory = ^NSObject<FLTCaptureDevice> *_Nonnull { return mockDevice; };
28+
configuration.deviceOrientationProvider = _mockDeviceOrientationProvider;
29+
_camera = FLTCreateCamWithConfiguration(configuration);
3230
}
3331

3432
- (void)testSetExposurePointWithResult_SetsExposurePointOfInterest {
@@ -53,7 +51,7 @@ - (void)testSetExposurePointWithResult_SetsExposurePointOfInterest {
5351
[completionExpectation fulfill];
5452
}];
5553

56-
[self waitForExpectationsWithTimeout:1 handler:nil];
54+
[self waitForExpectationsWithTimeout:30 handler:nil];
5755
XCTAssertEqual(setPoint.x, 1.0);
5856
XCTAssertEqual(setPoint.y, 1.0);
5957
}
@@ -77,7 +75,7 @@ - (void)testSetExposurePoint_WhenNotSupported_ReturnsError {
7775
}];
7876

7977
// Verify
80-
[self waitForExpectationsWithTimeout:1 handler:nil];
78+
[self waitForExpectationsWithTimeout:30 handler:nil];
8179
}
8280

8381
@end

packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraFocusTests.m

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,10 @@ - (void)setUp {
2626
_mockDevice = mockDevice;
2727
_mockDeviceOrientationProvider = [[MockDeviceOrientationProvider alloc] init];
2828

29-
_camera = FLTCreateCamWithCaptureSessionQueueAndMediaSettings(
30-
nil, nil, nil,
31-
^NSObject<FLTCaptureDevice> *(void) {
32-
return mockDevice;
33-
},
34-
_mockDeviceOrientationProvider);
29+
FLTCamConfiguration *configuration = FLTCreateTestCameraConfiguration();
30+
configuration.captureDeviceFactory = ^NSObject<FLTCaptureDevice> *_Nonnull { return mockDevice; };
31+
configuration.deviceOrientationProvider = _mockDeviceOrientationProvider;
32+
_camera = FLTCreateCamWithConfiguration(configuration);
3533
}
3634

3735
- (void)testAutoFocusWithContinuousModeSupported_ShouldSetContinuousAutoFocus {
@@ -175,7 +173,7 @@ - (void)testSetFocusPoint_WhenNotSupported_ReturnsError {
175173
}];
176174

177175
// Verify
178-
[self waitForExpectationsWithTimeout:1 handler:nil];
176+
[self waitForExpectationsWithTimeout:30 handler:nil];
179177
}
180178

181179
@end

packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraMethodChannelTests.m

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,34 +8,40 @@
88
#endif
99
@import XCTest;
1010
@import AVFoundation;
11-
#import <OCMock/OCMock.h>
1211

12+
#import "MockCameraDeviceDiscoverer.h"
13+
#import "MockCaptureDevice.h"
14+
#import "MockCaptureSession.h"
1315
#import "MockFlutterBinaryMessenger.h"
1416
#import "MockFlutterTextureRegistry.h"
17+
#import "MockGlobalEventApi.h"
1518

1619
@interface CameraMethodChannelTests : XCTestCase
1720
@end
1821

1922
@implementation CameraMethodChannelTests
2023

21-
- (CameraPlugin *)createCameraPlugin {
24+
- (CameraPlugin *)createCameraPluginWithSession:(MockCaptureSession *)mockSession {
2225
return [[CameraPlugin alloc] initWithRegistry:[[MockFlutterTextureRegistry alloc] init]
23-
messenger:[[MockFlutterBinaryMessenger alloc] init]];
26+
messenger:[[MockFlutterBinaryMessenger alloc] init]
27+
globalAPI:[[MockGlobalEventApi alloc] init]
28+
deviceDiscoverer:[[MockCameraDeviceDiscoverer alloc] init]
29+
deviceFactory:^NSObject<FLTCaptureDevice> *(NSString *name) {
30+
return [[MockCaptureDevice alloc] init];
31+
}
32+
captureSessionFactory:^NSObject<FLTCaptureSession> *_Nonnull {
33+
return mockSession;
34+
}
35+
captureDeviceInputFactory:[[MockCaptureDeviceInputFactory alloc] init]];
2436
}
2537

2638
- (void)testCreate_ShouldCallResultOnMainThread {
27-
CameraPlugin *camera = [self createCameraPlugin];
39+
MockCaptureSession *avCaptureSessionMock = [[MockCaptureSession alloc] init];
40+
avCaptureSessionMock.canSetSessionPreset = YES;
2841

29-
XCTestExpectation *expectation = [self expectationWithDescription:@"Result finished"];
30-
31-
// Set up mocks for initWithCameraName method
32-
id avCaptureDeviceInputMock = OCMClassMock([AVCaptureDeviceInput class]);
33-
OCMStub([avCaptureDeviceInputMock deviceInputWithDevice:[OCMArg any] error:[OCMArg anyObjectRef]])
34-
.andReturn([AVCaptureInput alloc]);
42+
CameraPlugin *camera = [self createCameraPluginWithSession:avCaptureSessionMock];
3543

36-
id avCaptureSessionMock = OCMClassMock([AVCaptureSession class]);
37-
OCMStub([avCaptureSessionMock alloc]).andReturn(avCaptureSessionMock);
38-
OCMStub([avCaptureSessionMock canSetSessionPreset:[OCMArg any]]).andReturn(YES);
44+
XCTestExpectation *expectation = [self expectationWithDescription:@"Result finished"];
3945

4046
// Set up method call
4147
__block NSNumber *resultValue;
@@ -59,15 +65,10 @@ - (void)testCreate_ShouldCallResultOnMainThread {
5965
}
6066

6167
- (void)testDisposeShouldDeallocCamera {
62-
CameraPlugin *camera = [self createCameraPlugin];
63-
64-
id avCaptureDeviceInputMock = OCMClassMock([AVCaptureDeviceInput class]);
65-
OCMStub([avCaptureDeviceInputMock deviceInputWithDevice:[OCMArg any] error:[OCMArg anyObjectRef]])
66-
.andReturn([AVCaptureInput alloc]);
68+
MockCaptureSession *avCaptureSessionMock = [[MockCaptureSession alloc] init];
69+
avCaptureSessionMock.canSetSessionPreset = YES;
6770

68-
id avCaptureSessionMock = OCMClassMock([AVCaptureSession class]);
69-
OCMStub([avCaptureSessionMock alloc]).andReturn(avCaptureSessionMock);
70-
OCMStub([avCaptureSessionMock canSetSessionPreset:[OCMArg any]]).andReturn(YES);
71+
CameraPlugin *camera = [self createCameraPluginWithSession:avCaptureSessionMock];
7172

7273
XCTestExpectation *createExpectation =
7374
[self expectationWithDescription:@"create's result block must be called"];

packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraOrientationTests.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ - (void)testOrientationUpdateMustBeOnCaptureSessionQueue {
139139

140140
[plugin orientationChanged:
141141
[self createMockNotificationForOrientation:UIDeviceOrientationLandscapeLeft]];
142-
[self waitForExpectationsWithTimeout:1 handler:nil];
142+
[self waitForExpectationsWithTimeout:30 handler:nil];
143143
}
144144

145145
- (void)testOrientationChanged_noRetainCycle {

packages/camera/camera_avfoundation/example/ios/RunnerTests/CameraPermissionTests.m

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ - (void)testRequestCameraPermission_completeWithoutErrorIfPreviouslyAuthorized {
6060
[expectation fulfill];
6161
}
6262
}];
63-
[self waitForExpectationsWithTimeout:1 handler:nil];
63+
[self waitForExpectationsWithTimeout:30 handler:nil];
6464
}
6565
- (void)testRequestCameraPermission_completeWithErrorIfPreviouslyDenied {
6666
XCTestExpectation *expectation =
@@ -82,7 +82,7 @@ - (void)testRequestCameraPermission_completeWithErrorIfPreviouslyDenied {
8282
[expectation fulfill];
8383
}
8484
}];
85-
[self waitForExpectationsWithTimeout:1 handler:nil];
85+
[self waitForExpectationsWithTimeout:30 handler:nil];
8686
}
8787

8888
- (void)testRequestCameraPermission_completeWithErrorIfRestricted {
@@ -102,7 +102,7 @@ - (void)testRequestCameraPermission_completeWithErrorIfRestricted {
102102
[expectation fulfill];
103103
}
104104
}];
105-
[self waitForExpectationsWithTimeout:1 handler:nil];
105+
[self waitForExpectationsWithTimeout:30 handler:nil];
106106
}
107107

108108
- (void)testRequestCameraPermission_completeWithoutErrorIfUserGrantAccess {
@@ -125,7 +125,7 @@ - (void)testRequestCameraPermission_completeWithoutErrorIfUserGrantAccess {
125125
[grantedExpectation fulfill];
126126
}
127127
}];
128-
[self waitForExpectationsWithTimeout:1 handler:nil];
128+
[self waitForExpectationsWithTimeout:30 handler:nil];
129129
}
130130

131131
- (void)testRequestCameraPermission_completeWithErrorIfUserDenyAccess {
@@ -153,7 +153,7 @@ - (void)testRequestCameraPermission_completeWithErrorIfUserDenyAccess {
153153
}
154154
}];
155155

156-
[self waitForExpectationsWithTimeout:1 handler:nil];
156+
[self waitForExpectationsWithTimeout:30 handler:nil];
157157
}
158158

159159
#pragma mark - audio permissions
@@ -173,7 +173,7 @@ - (void)testRequestAudioPermission_completeWithoutErrorIfPrevoiuslyAuthorized {
173173
[expectation fulfill];
174174
}
175175
}];
176-
[self waitForExpectationsWithTimeout:1 handler:nil];
176+
[self waitForExpectationsWithTimeout:30 handler:nil];
177177
}
178178

179179
- (void)testRequestAudioPermission_completeWithErrorIfPreviouslyDenied {
@@ -196,7 +196,7 @@ - (void)testRequestAudioPermission_completeWithErrorIfPreviouslyDenied {
196196
[expectation fulfill];
197197
}
198198
}];
199-
[self waitForExpectationsWithTimeout:1 handler:nil];
199+
[self waitForExpectationsWithTimeout:30 handler:nil];
200200
}
201201

202202
- (void)testRequestAudioPermission_completeWithErrorIfRestricted {
@@ -216,7 +216,7 @@ - (void)testRequestAudioPermission_completeWithErrorIfRestricted {
216216
[expectation fulfill];
217217
}
218218
}];
219-
[self waitForExpectationsWithTimeout:1 handler:nil];
219+
[self waitForExpectationsWithTimeout:30 handler:nil];
220220
}
221221

222222
- (void)testRequestAudioPermission_completeWithoutErrorIfUserGrantAccess {
@@ -239,7 +239,7 @@ - (void)testRequestAudioPermission_completeWithoutErrorIfUserGrantAccess {
239239
[grantedExpectation fulfill];
240240
}
241241
}];
242-
[self waitForExpectationsWithTimeout:1 handler:nil];
242+
[self waitForExpectationsWithTimeout:30 handler:nil];
243243
}
244244

245245
- (void)testRequestAudioPermission_completeWithErrorIfUserDenyAccess {
@@ -265,7 +265,7 @@ - (void)testRequestAudioPermission_completeWithErrorIfUserDenyAccess {
265265
[expectation fulfill];
266266
}
267267
}];
268-
[self waitForExpectationsWithTimeout:1 handler:nil];
268+
[self waitForExpectationsWithTimeout:30 handler:nil];
269269
}
270270

271271
@end

0 commit comments

Comments
 (0)