package input import ( "testing" "time" ) func TestTimeDatePresses(t *testing.T) { for _, layout := range []KeyboardLayout{DesktopKeyboardLayout, LaptopKeyboardLayout} { for _, modifierFirst := range []bool{false, true} { router := NewCommandRouter([]uint32{0xff63}, DefaultCommandBindings(layout)) now := time.Unix(100, 0) router.now = func() time.Time { return now } press := func(want Command) { t.Helper() router.Handle(0xff63, 118, 0, true) if consumed, got := router.Handle('t', 28, 0, true); !consumed || got != want { t.Fatalf("press = %v %s; want %s", consumed, got, want) } if consumed, got := router.Handle('t', 28, 0, true); !consumed || got != "" { t.Fatal("held key repeated command") } codes := []uint16{28, 118} if modifierFirst { codes = []uint16{118, 28} } for _, code := range codes { if consumed, got := router.Handle(0, code, 0, false); !consumed || got != "" { t.Fatal("unbalanced release") } } router.Reset() // Native owner finishes each fully released chord. } press(PresentTime) now = now.Add(500 * time.Millisecond) press(PresentDate) press(PresentTime) now = now.Add(501 * time.Millisecond) press(PresentTime) router.Handle(0xff63, 118, 0, true) router.Handle('x', 53, 0, true) router.Handle('x', 53, 0, false) router.Handle(0xff63, 118, 0, false) press(PresentTime) } } }