twonly-app-dependencies/camera_avfoundation/darwin/Tests/CameraPluginCreateCameraTests.swift
2026-10-07 22:18:23 +02:00

131 lines
4.2 KiB
Swift

// Copyright 2013 The Flutter Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import XCTest
@testable import camera_avfoundation
final class CameraPluginCreateCameraTests: XCTestCase {
private func createCameraPlugin() -> (
CameraPlugin, MockCameraPermissionManager, MockCaptureSession
) {
let mockPermissionManager = MockCameraPermissionManager()
let mockCaptureSession = MockCaptureSession()
let cameraPlugin = CameraPlugin(
registry: MockFlutterTextureRegistry(),
messenger: MockFlutterBinaryMessenger(),
globalAPI: MockGlobalEventApi(),
deviceDiscoverer: MockCameraDeviceDiscoverer(),
permissionManager: mockPermissionManager,
deviceFactory: { _ in MockCaptureDevice() },
captureSessionFactory: { mockCaptureSession },
captureDeviceInputFactory: MockCaptureDeviceInputFactory(),
captureSessionQueue: DispatchQueue(label: "io.flutter.camera.captureSessionQueue")
)
return (cameraPlugin, mockPermissionManager, mockCaptureSession)
}
func testCreateCamera_requestsOnlyCameraPermissionWithAudioDisabled() {
let (cameraPlugin, mockPermissionManager, _) = createCameraPlugin()
let expectation = expectation(description: "Initialization completed")
var requestCameraPermissionCalled = false
mockPermissionManager.requestCameraPermissionStub = { completion in
requestCameraPermissionCalled = true
// Permission is granted
completion(nil)
}
var requestAudioPermissionCalled = false
mockPermissionManager.requestAudioPermissionStub = { completion in
requestAudioPermissionCalled = true
// Permission is granted
completion(nil)
}
cameraPlugin.create(
cameraName: "camera_name",
settings: PlatformMediaSettings(
resolutionPreset: .medium,
framesPerSecond: nil,
videoBitrate: nil,
audioBitrate: nil,
enableAudio: false)
) { result in
expectation.fulfill()
}
waitForExpectations(timeout: 30, handler: nil)
XCTAssertTrue(requestCameraPermissionCalled)
XCTAssertFalse(requestAudioPermissionCalled)
}
func testCreateCamera_requestsCameraAndAudioPermissionWithAudioEnabled() {
let (cameraPlugin, mockPermissionManager, _) = createCameraPlugin()
let expectation = expectation(description: "Initialization completed")
var requestCameraPermissionCalled = false
mockPermissionManager.requestCameraPermissionStub = { completion in
requestCameraPermissionCalled = true
// Permission is granted
completion(nil)
}
var requestAudioPermissionCalled = false
mockPermissionManager.requestAudioPermissionStub = { completion in
requestAudioPermissionCalled = true
// Permission is granted
completion(nil)
}
cameraPlugin.create(
cameraName: "camera_name",
settings: PlatformMediaSettings(
resolutionPreset: .medium,
framesPerSecond: nil,
videoBitrate: nil,
audioBitrate: nil,
enableAudio: true)
) { result in
expectation.fulfill()
}
waitForExpectations(timeout: 30, handler: nil)
XCTAssertTrue(requestCameraPermissionCalled)
XCTAssertTrue(requestAudioPermissionCalled)
}
func testCreateCamera_createsCameraSuccessfully() {
let (cameraPlugin, mockPermissionManager, mockCaptureSession) = createCameraPlugin()
let expectation = expectation(description: "Initialization completed")
mockPermissionManager.requestCameraPermissionStub = { completion in
// Permission is granted
completion(nil)
}
mockPermissionManager.requestAudioPermissionStub = { completion in
// Permission is granted
completion(nil)
}
mockCaptureSession.canSetSessionPresetStub = { _ in true }
cameraPlugin.create(
cameraName: "camera_name",
settings: PlatformMediaSettings(
resolutionPreset: .medium,
framesPerSecond: nil,
videoBitrate: nil,
audioBitrate: nil,
enableAudio: true)
) { result in
expectation.fulfill()
}
waitForExpectations(timeout: 30, handler: nil)
XCTAssertNotNil(cameraPlugin.camera)
}
}