github.com/markusbkk/elvish@v0.0.0-20231204143114-91dc52438621/pkg/cli/term/reader_windows_test.go (about) 1 package term 2 3 import ( 4 "testing" 5 6 "github.com/markusbkk/elvish/pkg/sys/ewindows" 7 "github.com/markusbkk/elvish/pkg/tt" 8 "github.com/markusbkk/elvish/pkg/ui" 9 ) 10 11 func TestConvertEvent(t *testing.T) { 12 tt.Test(t, tt.Fn("convertEvent", convertEvent), tt.Table{ 13 // Only convert KeyEvent 14 Args(&ewindows.MouseEvent{}).Rets(nil), 15 // Only convert KeyDown events 16 Args(&ewindows.KeyEvent{BKeyDown: 0}).Rets(nil), 17 18 Args(charKeyEvent('a', 0)).Rets(K('a')), 19 Args(charKeyEvent('A', shift)).Rets(K('A')), 20 Args(charKeyEvent('µ', leftCtrl|rightAlt)).Rets(K('µ')), 21 Args(charKeyEvent('ẞ', leftCtrl|rightAlt|shift)).Rets(K('ẞ')), 22 23 Args(funcKeyEvent(0x1b, 0)).Rets(K('[', ui.Ctrl)), 24 25 // Functional key with modifiers 26 Args(funcKeyEvent(0x08, 0)).Rets(K(ui.Backspace)), 27 Args(funcKeyEvent(0x08, leftCtrl)).Rets(K(ui.Backspace, ui.Ctrl)), 28 Args(funcKeyEvent(0x08, leftCtrl|leftAlt|shift)).Rets(K(ui.Backspace, ui.Ctrl, ui.Alt, ui.Shift)), 29 30 // Functional keys with an alphanumeric base 31 Args(funcKeyEvent('2', leftCtrl)).Rets(K('2', ui.Ctrl)), 32 Args(funcKeyEvent('A', leftCtrl)).Rets(K('A', ui.Ctrl)), 33 Args(funcKeyEvent('A', leftAlt)).Rets(K('a', ui.Alt)), 34 35 // Unrecognized functional key 36 Args(funcKeyEvent(0, 0)).Rets(nil), 37 }) 38 } 39 40 func charKeyEvent(r uint16, mod uint32) *ewindows.KeyEvent { 41 return &ewindows.KeyEvent{ 42 BKeyDown: 1, DwControlKeyState: mod, UChar: [2]byte{byte(r), byte(r >> 8)}} 43 } 44 45 func funcKeyEvent(code uint16, mod uint32) *ewindows.KeyEvent { 46 return &ewindows.KeyEvent{ 47 BKeyDown: 1, DwControlKeyState: mod, WVirtualKeyCode: code} 48 }