48 lines
2.1 KiB
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)
|
|
}
|
|
}
|
|
}
|