From 55ea0f398bd9fc4d88e832e8ec2740a205a2329e Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sun, 7 Dec 2025 04:53:59 +0100 Subject: [PATCH] test(voicewake): cover trigger matching for runtime listener --- .../Sources/Clawdis/VoiceWakeRuntime.swift | 6 ++++++ .../VoiceWakeRuntimeTests.swift | 20 +++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 apps/macos/Tests/ClawdisIPCTests/VoiceWakeRuntimeTests.swift diff --git a/apps/macos/Sources/Clawdis/VoiceWakeRuntime.swift b/apps/macos/Sources/Clawdis/VoiceWakeRuntime.swift index 20d42f970..8aca09d36 100644 --- a/apps/macos/Sources/Clawdis/VoiceWakeRuntime.swift +++ b/apps/macos/Sources/Clawdis/VoiceWakeRuntime.swift @@ -142,4 +142,10 @@ actor VoiceWakeRuntime { } return false } + +#if DEBUG + static func _testMatches(text: String, triggers: [String]) -> Bool { + Self.matches(text: text, triggers: triggers) + } +#endif } diff --git a/apps/macos/Tests/ClawdisIPCTests/VoiceWakeRuntimeTests.swift b/apps/macos/Tests/ClawdisIPCTests/VoiceWakeRuntimeTests.swift new file mode 100644 index 000000000..4461d18bd --- /dev/null +++ b/apps/macos/Tests/ClawdisIPCTests/VoiceWakeRuntimeTests.swift @@ -0,0 +1,20 @@ +import Testing +@testable import Clawdis + +@Suite struct VoiceWakeRuntimeTests { + @Test func matchesIsCaseInsensitive() { + let triggers = ["ClAwD", "buddy"] + #expect(VoiceWakeRuntime._testMatches(text: "hey clawd are you there", triggers: triggers)) + #expect(!VoiceWakeRuntime._testMatches(text: "nothing to see", triggers: triggers)) + } + + @Test func matchesIgnoresWhitespace() { + let triggers = [" claude "] + #expect(VoiceWakeRuntime._testMatches(text: "hello claude!", triggers: triggers)) + } + + @Test func matchesSkipsEmptyTriggers() { + let triggers = [" ", ""] + #expect(!VoiceWakeRuntime._testMatches(text: "hello", triggers: triggers)) + } +}