rainbow-dragon/Tests/ForgeCameraSonyTests/SonyDriverTests.swift

98 lines
3.1 KiB
Swift
Raw Normal View History

import XCTest
import Foundation
#if canImport(FoundationNetworking)
import FoundationNetworking
#endif
import ForgeCamera
import ForgeGrade
import ForgeColor
import ForgeSim
@testable import ForgeCameraSony
final class SonyDriverTests: XCTestCase {
var sim: SonySimulator!
override func setUp() async throws {
sim = SonySimulator()
try await sim.start(port: 0)
}
override func tearDown() async throws {
try? await sim.stop()
sim = nil
}
func makeDriver() async -> SonyDriver {
let port = await sim.boundPort!
return SonyDriver(host: "127.0.0.1", port: port, pollInterval: .milliseconds(20))
}
// Venice 2: protocol closed (research) no look-push capability claimed.
func testCapabilities() async {
let driver = await makeDriver()
XCTAssertEqual(driver.capabilities.vendor, .sony)
XCTAssertFalse(driver.capabilities.supportsNativeCDL)
XCTAssertTrue(driver.capabilities.lut3dSizes.isEmpty)
}
func testConnectEmitsConnected() async throws {
let driver = await makeDriver()
var iterator = driver.state.makeAsyncIterator()
try await driver.connect()
var connected = false
for _ in 0..<5 {
if let s = await iterator.next(), s.connection == .connected {
connected = true
break
}
}
XCTAssertTrue(connected)
await driver.disconnect()
}
func testRecStateAndMetadata() async throws {
let driver = await makeDriver()
var iterator = driver.state.makeAsyncIterator()
try await driver.connect()
await sim.setState(recording: true, clipName: "C0001", ei: 500, wb: 5500, tint: 1, fps: 24, timecode: "09:15:00:00")
var got = false
for _ in 0..<30 {
if let s = await iterator.next(), s.isRecording {
XCTAssertEqual(s.clipName, "C0001")
XCTAssertEqual(s.metadata?.exposureIndex, 500)
got = true
break
}
}
XCTAssertTrue(got)
await driver.disconnect()
}
// Any look push rejected: Venice look control unverified/closed (research).
// Metadata/rec-state monitoring is the only claimed capability.
func testAnyPushRejected() async throws {
let driver = await makeDriver()
try await driver.connect()
let lutOnly = FlattenedLook(cdl: nil, lut: Lut3D.identity(size: 33), latticeSize: 33)
do {
try await driver.push(look: lutOnly)
XCTFail("expected unsupportedLook")
} catch let e as CameraError {
guard case .unsupportedLook = e else { return XCTFail("wrong error") }
}
let cdl = CDL(slope: SIMD3(1.2, 1, 1), offset: .zero, power: .one, saturation: 1)
let withCDL = FlattenedLook(cdl: cdl, lut: nil, latticeSize: 33)
do {
try await driver.push(look: withCDL)
XCTFail("expected unsupportedLook")
} catch let e as CameraError {
guard case .unsupportedLook = e else { return XCTFail("wrong error") }
}
await driver.disconnect()
}
}