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

111 lines
3.1 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 CameraZoomTests: XCTestCase {
private func createCamera() -> (Camera, MockCaptureDevice) {
let mockDevice = MockCaptureDevice()
let configuration = CameraTestUtils.createTestCameraConfiguration()
configuration.videoCaptureDeviceFactory = { _ in mockDevice }
let camera = CameraTestUtils.createTestCamera(configuration)
return (camera, mockDevice)
}
func testSetZoomLevel_setVideoZoomFactor() {
let (camera, mockDevice) = createCamera()
mockDevice.maxAvailableVideoZoomFactor = 2.0
mockDevice.minAvailableVideoZoomFactor = 0.0
let targetZoom = CGFloat(1.0)
var setVideoZoomFactorCalled = false
mockDevice.setVideoZoomFactorStub = { zoom in
XCTAssertEqual(zoom, targetZoom)
setVideoZoomFactorCalled = true
}
let expectation = expectation(description: "Call completed")
camera.setZoomLevel(targetZoom) {
result in
let _ = self.assertSuccess(result)
expectation.fulfill()
}
waitForExpectations(timeout: 30)
XCTAssertTrue(setVideoZoomFactorCalled)
}
func testSetZoomLevel_returnsError_forZoomLevelBlowMinimum() {
let (camera, mockDevice) = createCamera()
// Allowed zoom range between 2.0 and 3.0
mockDevice.maxAvailableVideoZoomFactor = 2.0
mockDevice.minAvailableVideoZoomFactor = 3.0
let expectation = expectation(description: "Call completed")
camera.setZoomLevel(CGFloat(1.0)) { result in
switch result {
case .failure(let error as PigeonError):
XCTAssertEqual(error.code, "ZOOM_ERROR")
default:
XCTFail("Expected failure")
}
expectation.fulfill()
}
waitForExpectations(timeout: 30)
}
func testSetZoomLevel_returnsError_forZoomLevelAboveMaximum() {
let (camera, mockDevice) = createCamera()
// Allowed zoom range between 0.0 and 1.0
mockDevice.maxAvailableVideoZoomFactor = 0.0
mockDevice.minAvailableVideoZoomFactor = 1.0
let expectation = expectation(description: "Call completed")
camera.setZoomLevel(CGFloat(2.0)) { result in
switch result {
case .failure(let error as PigeonError):
XCTAssertEqual(error.code, "ZOOM_ERROR")
default:
XCTFail("Expected failure")
}
expectation.fulfill()
}
waitForExpectations(timeout: 30)
}
func testMaximumAvailableZoomFactor_returnsDeviceMaxAvailableVideoZoomFactor() {
let (camera, mockDevice) = createCamera()
let targetZoom = CGFloat(1.0)
mockDevice.maxAvailableVideoZoomFactor = CGFloat(targetZoom)
XCTAssertEqual(camera.maximumAvailableZoomFactor, targetZoom)
}
func testMinimumAvailableZoomFactor_returnsDeviceMinAvailableVideoZoomFactor() {
let (camera, mockDevice) = createCamera()
let targetZoom = CGFloat(1.0)
mockDevice.minAvailableVideoZoomFactor = CGFloat(targetZoom)
XCTAssertEqual(camera.minimumAvailableZoomFactor, targetZoom)
}
}