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

80 lines
2.6 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 AVFoundation
import XCTest
@testable import camera_avfoundation
final class CameraMethodChannelTests: XCTestCase {
private func createCameraPlugin(with session: MockCaptureSession) -> CameraPlugin {
return CameraPlugin(
registry: MockFlutterTextureRegistry(),
messenger: MockFlutterBinaryMessenger(),
globalAPI: MockGlobalEventApi(),
deviceDiscoverer: MockCameraDeviceDiscoverer(),
permissionManager: MockCameraPermissionManager(),
deviceFactory: { _ in MockCaptureDevice() },
captureSessionFactory: { session },
captureDeviceInputFactory: MockCaptureDeviceInputFactory(),
captureSessionQueue: DispatchQueue(label: "io.flutter.camera.captureSessionQueue")
)
}
func testCreate_ShouldCallResultOnMainThread() {
let avCaptureSessionMock = MockCaptureSession()
avCaptureSessionMock.canSetSessionPresetStub = { _ in true }
let camera = createCameraPlugin(with: avCaptureSessionMock)
let expectation = self.expectation(description: "Result finished")
var resultValue: Int64?
camera.createCameraOnSessionQueue(
withName: "acamera",
settings: PlatformMediaSettings(
resolutionPreset: .medium,
framesPerSecond: nil,
videoBitrate: nil,
audioBitrate: nil,
enableAudio: true
)
) { result in
resultValue = self.assertSuccess(result)
expectation.fulfill()
}
waitForExpectations(timeout: 30, handler: nil)
XCTAssertNotNil(resultValue)
}
func testDisposeShouldDeallocCamera() {
let avCaptureSessionMock = MockCaptureSession()
avCaptureSessionMock.canSetSessionPresetStub = { _ in true }
let camera = createCameraPlugin(with: avCaptureSessionMock)
let createExpectation = self.expectation(description: "create's result block must be called")
camera.createCameraOnSessionQueue(
withName: "acamera",
settings: PlatformMediaSettings(
resolutionPreset: .medium,
framesPerSecond: nil,
videoBitrate: nil,
audioBitrate: nil,
enableAudio: true
)
) { result in
createExpectation.fulfill()
}
waitForExpectations(timeout: 30, handler: nil)
XCTAssertNotNil(camera.camera)
let disposeExpectation = self.expectation(description: "dispose's result block must be called")
camera.dispose(cameraId: 0) { error in
disposeExpectation.fulfill()
}
waitForExpectations(timeout: 30, handler: nil)
XCTAssertNil(camera.camera, "camera should be deallocated after dispose")
}
}