Files
cthulhu/internal/input/interruption_test.go

48 lines
2.1 KiB
Go

package input
import "testing"
func TestSpeechInterruptionModes(t *testing.T) {
for _, name := range []string{"Control_L", "Control_R", "Return", "KP_Enter", "space", "KP_Space", "Escape", "Shift_L", "Tab", "Up", "a", "F8"} {
for _, pressed := range []bool{false, true} {
for _, repeat := range []bool{false, true} {
event := NewKeyEvent(42, pressed, name)
event.Repeat = repeat
common := name == "Control_L" || name == "Control_R" || name == "Return" || name == "KP_Enter" || name == "space" || name == "KP_Space" || name == "Escape"
for mode, want := range map[string]bool{InterruptAllKeys: pressed, InterruptCommonKeys: pressed && common,
InterruptCustomKeys: pressed && (name == "Tab" || name == "F8")} {
settings := InterruptionSettings{Mode: mode, Keys: []string{"Tab", "F8"}}
if got := settings.ShouldInterrupt(event); got != want {
t.Fatalf("mode=%s event=%+v: interrupt=%t, want %t", mode, event, got, want)
}
}
}
}
}
settings := InterruptionSettings{Mode: InterruptCustomKeys, Keys: []string{"a", "Control_R"}}
if !settings.ShouldInterrupt(Event{Pressed: true, Name: "A"}) || settings.ShouldInterrupt(Event{Pressed: true, Name: "Control_L"}) {
t.Fatal("custom keys must ignore letter case and preserve left/right modifiers")
}
settings.Keys = []string{"Tab", "Prior", "XF86AudioMute"}
for _, name := range []string{"ISO_Left_Tab", "Prior", "XF86AudioMute"} {
if !settings.ShouldInterrupt(Event{Pressed: true, Name: name}) {
t.Fatalf("recorded key %s did not match its input name", name)
}
}
}
func TestSpeechInterruptionValidation(t *testing.T) {
for _, settings := range []InterruptionSettings{
{Mode: "unknown"}, {Mode: InterruptCustomKeys},
{Mode: InterruptCustomKeys, Keys: []string{"Tab", "Tab"}},
{Mode: InterruptCustomKeys, Keys: []string{"a", "A"}},
{Mode: InterruptCustomKeys, Keys: []string{"Ctrl+Enter"}},
{Mode: InterruptCustomKeys, Keys: []string{""}},
{Mode: InterruptCustomKeys, Keys: make([]string, MaxInterruptionKeys+1)},
} {
if err := settings.Validate(); err == nil {
t.Fatalf("accepted invalid settings %+v", settings)
}
}
}