Files
openclaw/apps/macos/Tests/OpenClawIPCTests/AudioInputDeviceObserverTests.swift
2026-08-14 01:39:19 -07:00

77 lines
3.2 KiB
Swift

import Foundation
import Testing
@testable import OpenClaw
struct AudioInputDeviceObserverTests {
@Test func `selected available input wins over system default`() {
let result = AudioInputDeviceSelectionResolver.resolve(
selectedUID: "desk-mic",
availableUIDs: ["desk-mic", "built-in"],
defaultUID: "built-in")
#expect(result == AudioInputDeviceResolution(
selectedUID: "desk-mic",
resolvedUID: "desk-mic",
fellBackToSystemDefault: false))
#expect(result.shouldBindSelectedDevice)
}
@Test func `missing selected input falls back without replacing selection`() {
let result = AudioInputDeviceSelectionResolver.resolve(
selectedUID: "desk-mic",
availableUIDs: ["built-in"],
defaultUID: "built-in")
#expect(result == AudioInputDeviceResolution(
selectedUID: "desk-mic",
resolvedUID: "built-in",
fellBackToSystemDefault: true))
#expect(!result.shouldBindSelectedDevice)
}
@Test func `system default and unavailable states resolve explicitly`() {
let systemDefault = AudioInputDeviceSelectionResolver.resolve(
selectedUID: "",
availableUIDs: ["built-in"],
defaultUID: "built-in")
let unavailable = AudioInputDeviceSelectionResolver.resolve(
selectedUID: nil,
availableUIDs: [],
defaultUID: "built-in")
#expect(systemDefault.resolvedUID == "built-in")
#expect(systemDefault.selectedUID == nil)
#expect(unavailable.resolvedUID == nil)
}
@Test func `default and fallback follow default changes while selected input does not`() {
let systemDefault = AudioInputDeviceResolution(
selectedUID: nil,
resolvedUID: "built-in",
fellBackToSystemDefault: false)
let fallback = AudioInputDeviceResolution(
selectedUID: "desk-mic",
resolvedUID: "built-in",
fellBackToSystemDefault: true)
let selected = AudioInputDeviceResolution(
selectedUID: "desk-mic",
resolvedUID: "desk-mic",
fellBackToSystemDefault: false)
let available = Set(["built-in", "new-default", "desk-mic"])
#expect(systemDefault.shouldRestart(availableUIDs: available, defaultUID: "new-default"))
#expect(fallback.shouldRestart(availableUIDs: available, defaultUID: "new-default"))
#expect(!selected.shouldRestart(availableUIDs: available, defaultUID: "new-default"))
#expect(selected.shouldRestart(availableUIDs: ["built-in"], defaultUID: "built-in"))
}
@Test func `has usable default input device consistent with components`() {
// When no default UID exists, the method must return false.
// When a default UID exists, the result must match alive-set membership.
let uid = AudioInputDeviceObserver.defaultInputDeviceUID()
let alive = AudioInputDeviceObserver.aliveInputDeviceUIDs()
let expected = uid.map { alive.contains($0) } ?? false
#expect(AudioInputDeviceObserver.hasUsableDefaultInputDevice() == expected)
}
}