Skip to content

Commit 63292b4

Browse files
committed
Restrict visibility and refactor null checks
1 parent 4a9665e commit 63292b4

9 files changed

+107
-79
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ final class AvailableCamerasTest: XCTestCase {
2323
permissionManager: MockFLTCameraPermissionManager(),
2424
deviceFactory: { _ in MockCaptureDevice() },
2525
captureSessionFactory: { MockCaptureSession() },
26-
captureDeviceInputFactory: MockCaptureDeviceInputFactory()
26+
captureDeviceInputFactory: MockCaptureDeviceInputFactory(),
27+
captureSessionQueue: DispatchQueue(label: "io.flutter.camera.captureSessionQueue")
2728
)
2829
}
2930

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

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,21 +12,26 @@ import XCTest
1212
#endif
1313

1414
final class CameraCaptureSessionQueueRaceConditionTests: XCTestCase {
15-
private func createCameraPlugin() -> CameraPlugin {
16-
return CameraPlugin(
15+
private func createCameraPlugin() -> (CameraPlugin, DispatchQueue) {
16+
let captureSessionQueue = DispatchQueue(label: "io.flutter.camera.captureSessionQueue")
17+
18+
let cameraPlugin = CameraPlugin(
1719
registry: MockFlutterTextureRegistry(),
1820
messenger: MockFlutterBinaryMessenger(),
1921
globalAPI: MockGlobalEventApi(),
2022
deviceDiscoverer: MockCameraDeviceDiscoverer(),
2123
permissionManager: MockFLTCameraPermissionManager(),
2224
deviceFactory: { _ in MockCaptureDevice() },
2325
captureSessionFactory: { MockCaptureSession() },
24-
captureDeviceInputFactory: MockCaptureDeviceInputFactory()
26+
captureDeviceInputFactory: MockCaptureDeviceInputFactory(),
27+
captureSessionQueue: captureSessionQueue
2528
)
29+
30+
return (cameraPlugin, captureSessionQueue)
2631
}
2732

2833
func testFixForCaptureSessionQueueNullPointerCrashDueToRaceCondition() {
29-
let cameraPlugin = createCameraPlugin()
34+
let (cameraPlugin, captureSessionQueue) = createCameraPlugin()
3035
let disposeExpectation = expectation(description: "dispose's result block must be called")
3136
let createExpectation = expectation(description: "create's result block must be called")
3237

@@ -55,6 +60,6 @@ final class CameraCaptureSessionQueueRaceConditionTests: XCTestCase {
5560
// `captureSessionQueue` passed into `AVCaptureVideoDataOutput::setSampleBufferDelegate:queue:`
5661
// API will cause a crash.
5762
XCTAssertNotNil(
58-
cameraPlugin.captureSessionQueue, "captureSessionQueue must not be nil after create method.")
63+
captureSessionQueue, "captureSessionQueue must not be nil after create method.")
5964
}
6065
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ final class CameraMethodChannelTests: XCTestCase {
2222
permissionManager: MockFLTCameraPermissionManager(),
2323
deviceFactory: { _ in MockCaptureDevice() },
2424
captureSessionFactory: { session },
25-
captureDeviceInputFactory: MockCaptureDeviceInputFactory()
25+
captureDeviceInputFactory: MockCaptureDeviceInputFactory(),
26+
captureSessionQueue: DispatchQueue(label: "io.flutter.camera.captureSessionQueue")
2627
)
2728
}
2829

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

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,14 @@ private final class MockUIDevice: UIDevice {
2323

2424
final class CameraOrientationTests: XCTestCase {
2525
private func createCameraPlugin() -> (
26-
CameraPlugin, MockFLTCam, MockGlobalEventApi, MockCaptureDevice, MockCameraDeviceDiscoverer
26+
CameraPlugin, MockFLTCam, MockGlobalEventApi, MockCaptureDevice, MockCameraDeviceDiscoverer,
27+
DispatchQueue
2728
) {
2829
let mockDevice = MockCaptureDevice()
2930
let mockCamera = MockFLTCam()
3031
let mockEventAPI = MockGlobalEventApi()
3132
let mockDeviceDiscoverer = MockCameraDeviceDiscoverer()
33+
let captureSessionQueue = DispatchQueue(label: "io.flutter.camera.captureSessionQueue")
3234

3335
let cameraPlugin = CameraPlugin(
3436
registry: MockFlutterTextureRegistry(),
@@ -38,11 +40,14 @@ final class CameraOrientationTests: XCTestCase {
3840
permissionManager: MockFLTCameraPermissionManager(),
3941
deviceFactory: { _ in mockDevice },
4042
captureSessionFactory: { MockCaptureSession() },
41-
captureDeviceInputFactory: MockCaptureDeviceInputFactory()
43+
captureDeviceInputFactory: MockCaptureDeviceInputFactory(),
44+
captureSessionQueue: captureSessionQueue
4245
)
4346
cameraPlugin.camera = mockCamera
4447

45-
return (cameraPlugin, mockCamera, mockEventAPI, mockDevice, mockDeviceDiscoverer)
48+
return (
49+
cameraPlugin, mockCamera, mockEventAPI, mockDevice, mockDeviceDiscoverer, captureSessionQueue
50+
)
4651
}
4752

4853
private func waitForRoundTrip(with queue: DispatchQueue) {
@@ -55,9 +60,12 @@ final class CameraOrientationTests: XCTestCase {
5560
waitForExpectations(timeout: 30, handler: nil)
5661
}
5762

58-
private func sendOrientation(_ orientation: UIDeviceOrientation, to cameraPlugin: CameraPlugin) {
63+
private func sendOrientation(
64+
_ orientation: UIDeviceOrientation, to cameraPlugin: CameraPlugin,
65+
captureSessionQueue: DispatchQueue
66+
) {
5967
cameraPlugin.orientationChanged(createMockNotification(for: orientation))
60-
waitForRoundTrip(with: cameraPlugin.captureSessionQueue)
68+
waitForRoundTrip(with: captureSessionQueue)
6169
}
6270

6371
private func createMockNotification(for deviceOrientation: UIDeviceOrientation) -> Notification {
@@ -67,36 +75,36 @@ final class CameraOrientationTests: XCTestCase {
6775
}
6876

6977
func testOrientationNotifications() {
70-
let (cameraPlugin, _, mockEventAPI, _, _) = createCameraPlugin()
78+
let (cameraPlugin, _, mockEventAPI, _, _, captureSessionQueue) = createCameraPlugin()
7179

72-
sendOrientation(.portraitUpsideDown, to: cameraPlugin)
80+
sendOrientation(.portraitUpsideDown, to: cameraPlugin, captureSessionQueue: captureSessionQueue)
7381
XCTAssertEqual(mockEventAPI.lastOrientation, .portraitDown)
74-
sendOrientation(.portrait, to: cameraPlugin)
82+
sendOrientation(.portrait, to: cameraPlugin, captureSessionQueue: captureSessionQueue)
7583
XCTAssertEqual(mockEventAPI.lastOrientation, .portraitUp)
76-
sendOrientation(.landscapeLeft, to: cameraPlugin)
84+
sendOrientation(.landscapeLeft, to: cameraPlugin, captureSessionQueue: captureSessionQueue)
7785
XCTAssertEqual(mockEventAPI.lastOrientation, .landscapeLeft)
78-
sendOrientation(.landscapeRight, to: cameraPlugin)
86+
sendOrientation(.landscapeRight, to: cameraPlugin, captureSessionQueue: captureSessionQueue)
7987
XCTAssertEqual(mockEventAPI.lastOrientation, .landscapeRight)
8088
}
8189

8290
func testOrientationNotificationsNotCalledForFaceUp() {
83-
let (cameraPlugin, _, mockEventAPI, _, _) = createCameraPlugin()
84-
sendOrientation(.faceUp, to: cameraPlugin)
91+
let (cameraPlugin, _, mockEventAPI, _, _, captureSessionQueue) = createCameraPlugin()
92+
sendOrientation(.faceUp, to: cameraPlugin, captureSessionQueue: captureSessionQueue)
8593
XCTAssertFalse(mockEventAPI.deviceOrientationChangedCalled)
8694
}
8795

8896
func testOrientationNotificationsNotCalledForFaceDown() {
89-
let (cameraPlugin, _, mockEventAPI, _, _) = createCameraPlugin()
90-
sendOrientation(.faceDown, to: cameraPlugin)
97+
let (cameraPlugin, _, mockEventAPI, _, _, captureSessionQueue) = createCameraPlugin()
98+
sendOrientation(.faceDown, to: cameraPlugin, captureSessionQueue: captureSessionQueue)
9199
XCTAssertFalse(mockEventAPI.deviceOrientationChangedCalled)
92100
}
93101

94102
func testOrientationUpdateMustBeOnCaptureSessionQueue() {
95103
let queueExpectation = expectation(
96104
description: "Orientation update must happen on the capture session queue")
97-
let (cameraPlugin, mockCamera, _, _, _) = createCameraPlugin()
105+
let (cameraPlugin, mockCamera, _, _, _, captureSessionQueue) = createCameraPlugin()
98106
let captureSessionQueueSpecific = DispatchSpecificKey<Void>()
99-
cameraPlugin.captureSessionQueue.setSpecific(
107+
captureSessionQueue.setSpecific(
100108
key: captureSessionQueueSpecific,
101109
value: ())
102110

@@ -111,7 +119,7 @@ final class CameraOrientationTests: XCTestCase {
111119
}
112120

113121
func testOrientationChangedNoRetainCycle() {
114-
let (_, mockCamera, mockEventAPI, mockDevice, mockDeviceDiscoverer) = createCameraPlugin()
122+
let (_, mockCamera, mockEventAPI, mockDevice, mockDeviceDiscoverer, _) = createCameraPlugin()
115123
let captureSessionQueue = DispatchQueue(label: "capture_session_queue")
116124
weak var weakPlugin: CameraPlugin?
117125
weak var weakDevice = mockDevice
@@ -125,10 +133,10 @@ final class CameraOrientationTests: XCTestCase {
125133
permissionManager: MockFLTCameraPermissionManager(),
126134
deviceFactory: { _ in weakDevice! },
127135
captureSessionFactory: { MockCaptureSession() },
128-
captureDeviceInputFactory: MockCaptureDeviceInputFactory()
136+
captureDeviceInputFactory: MockCaptureDeviceInputFactory(),
137+
captureSessionQueue: captureSessionQueue
129138
)
130139
weakPlugin = cameraPlugin
131-
cameraPlugin.captureSessionQueue = captureSessionQueue
132140
cameraPlugin.camera = mockCamera
133141

134142
cameraPlugin.orientationChanged(createMockNotification(for: .landscapeLeft))

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ final class CameraPluginCreateCameraTests: XCTestCase {
2626
permissionManager: mockPermissionManager,
2727
deviceFactory: { _ in MockCaptureDevice() },
2828
captureSessionFactory: { mockCaptureSession },
29-
captureDeviceInputFactory: MockCaptureDeviceInputFactory()
29+
captureDeviceInputFactory: MockCaptureDeviceInputFactory(),
30+
captureSessionQueue: DispatchQueue(label: "io.flutter.camera.captureSessionQueue")
3031
)
3132

3233
return (cameraPlugin, mockPermissionManager, mockCaptureSession)

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ final class CameraPluginDelegatingMethodTests: XCTestCase {
2424
permissionManager: MockFLTCameraPermissionManager(),
2525
deviceFactory: { _ in MockCaptureDevice() },
2626
captureSessionFactory: { MockCaptureSession() },
27-
captureDeviceInputFactory: MockCaptureDeviceInputFactory()
27+
captureDeviceInputFactory: MockCaptureDeviceInputFactory(),
28+
captureSessionQueue: DispatchQueue(label: "io.flutter.camera.captureSessionQueue")
2829
)
2930
cameraPlugin.camera = mockCamera
3031

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

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,11 @@ import XCTest
1313

1414
final class CameraPluginInitializeCameraTests: XCTestCase {
1515
private func createCameraPlugin() -> (
16-
CameraPlugin, MockFLTCam, MockGlobalEventApi
16+
CameraPlugin, MockFLTCam, MockGlobalEventApi, DispatchQueue
1717
) {
1818
let mockCamera = MockFLTCam()
1919
let mockGlobalEventApi = MockGlobalEventApi()
20+
let captureSessionQueue = DispatchQueue(label: "io.flutter.camera.captureSessionQueue")
2021

2122
let cameraPlugin = CameraPlugin(
2223
registry: MockFlutterTextureRegistry(),
@@ -26,11 +27,12 @@ final class CameraPluginInitializeCameraTests: XCTestCase {
2627
permissionManager: MockFLTCameraPermissionManager(),
2728
deviceFactory: { _ in MockCaptureDevice() },
2829
captureSessionFactory: { MockCaptureSession() },
29-
captureDeviceInputFactory: MockCaptureDeviceInputFactory()
30+
captureDeviceInputFactory: MockCaptureDeviceInputFactory(),
31+
captureSessionQueue: captureSessionQueue
3032
)
3133
cameraPlugin.camera = mockCamera
3234

33-
return (cameraPlugin, mockCamera, mockGlobalEventApi)
35+
return (cameraPlugin, mockCamera, mockGlobalEventApi, captureSessionQueue)
3436
}
3537

3638
private func waitForRoundTrip(with queue: DispatchQueue) {
@@ -44,7 +46,7 @@ final class CameraPluginInitializeCameraTests: XCTestCase {
4446
}
4547

4648
func testInitializeCamera_setsCameraOnFrameAvailableCallback() {
47-
let (cameraPlugin, mockCamera, _) = createCameraPlugin()
49+
let (cameraPlugin, mockCamera, _, _) = createCameraPlugin()
4850
let expectation = expectation(description: "Initialization completed")
4951

5052
var onFrameAvailableSet = false
@@ -64,7 +66,7 @@ final class CameraPluginInitializeCameraTests: XCTestCase {
6466
}
6567

6668
func testInitializeCamera_setsCameraDartAPI() {
67-
let (cameraPlugin, mockCamera, _) = createCameraPlugin()
69+
let (cameraPlugin, mockCamera, _, _) = createCameraPlugin()
6870
let expectation = expectation(description: "Initialization completed")
6971

7072
var dartAPISet = false
@@ -84,20 +86,20 @@ final class CameraPluginInitializeCameraTests: XCTestCase {
8486
}
8587

8688
func testInitializeCamera_sendsDeviceOrientation() {
87-
let (cameraPlugin, _, mockGlobalEventApi) = createCameraPlugin()
89+
let (cameraPlugin, _, mockGlobalEventApi, captureSessionQueue) = createCameraPlugin()
8890

8991
cameraPlugin.initializeCamera(0, withImageFormat: FCPPlatformImageFormatGroup.bgra8888) {
9092
error in
9193
XCTAssertNil(error)
9294
}
9395

94-
waitForRoundTrip(with: cameraPlugin.captureSessionQueue)
96+
waitForRoundTrip(with: captureSessionQueue)
9597

9698
XCTAssertTrue(mockGlobalEventApi.deviceOrientationChangedCalled)
9799
}
98100

99101
func testInitializeCamera_startsCamera() {
100-
let (cameraPlugin, mockCamera, _) = createCameraPlugin()
102+
let (cameraPlugin, mockCamera, _, _) = createCameraPlugin()
101103
let expectation = expectation(description: "Initialization completed")
102104

103105
var startCalled = false

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,8 @@ final class CameraSettingsTests: XCTestCase {
163163
permissionManager: MockFLTCameraPermissionManager(),
164164
deviceFactory: { _ in mockDevice },
165165
captureSessionFactory: { mockSession },
166-
captureDeviceInputFactory: MockCaptureDeviceInputFactory()
166+
captureDeviceInputFactory: MockCaptureDeviceInputFactory(),
167+
captureSessionQueue: DispatchQueue(label: "io.flutter.camera.captureSessionQueue")
167168
)
168169

169170
let expectation = self.expectation(description: "Result finished")

0 commit comments

Comments
 (0)