1//go:build windows
2
3package tui
4
5import (
6 "encoding/binary"
7 "testing"
8)
9
10func TestResizeWatcherIsPerTerminal(t *testing.T) {
11 first, second := &ProcTerm{}, &ProcTerm{}
12 var started int
13 first.resizeOnce.Do(func() { started++ })
14 first.resizeOnce.Do(func() { started++ })
15 second.resizeOnce.Do(func() { started++ })
16 if started != 2 {
17 t.Fatalf("watchers started = %d, want one per terminal", started)
18 }
19}
20
21func TestConsoleRecordYieldsByte(t *testing.T) {
22 for _, tc := range []struct {
23 name string
24 eventType uint16
25 keyDown bool
26 key uint16
27 char uint16
28 want bool
29 }{
30 {"character", keyEvent, true, 0x41, 'a', true},
31 {"key up", keyEvent, false, 0x26, 0, false},
32 {"arrow up", keyEvent, true, 0x26, 0, true},
33 {"delete", keyEvent, true, 0x2e, 0, true},
34 {"home", keyEvent, true, 0x24, 0, true},
35 {"function key", keyEvent, true, 0x70, 0, true},
36 {"shift", keyEvent, true, 0x10, 0, false},
37 {"focus", 0x0010, false, 0, 0, false},
38 } {
39 t.Run(tc.name, func(t *testing.T) {
40 r := inputRecord{eventType: tc.eventType}
41 if tc.keyDown {
42 binary.LittleEndian.PutUint32(r.event[0:4], 1)
43 }
44 binary.LittleEndian.PutUint16(r.event[4:6], tc.key)
45 binary.LittleEndian.PutUint16(r.event[10:12], tc.char)
46 if got := r.yieldsByte(); got != tc.want {
47 t.Errorf("yieldsByte() = %v, want %v", got, tc.want)
48 }
49 })
50 }
51}