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  }