131 lines
4.2 KiB
Swift
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)
|
|
}
|
|
}
|