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) } } }