1 package cbind
2
3 import (
4 "fmt"
5 "testing"
6
7 "github.com/gdamore/tcell/v3"
8 )
9
10 type testCase struct {
11 mod tcell.ModMask
12 key tcell.Key
13 str string
14 encoded string
15 }
16
17 func (c testCase) String() string {
18 var str string
19 if c.str != "" {
20 str = "-" + str
21 }
22 return fmt.Sprintf("%d-%d%s-%s", c.mod, c.key, str, c.encoded)
23 }
24
25 var testCases = []testCase{
26 {mod: tcell.ModNone, key: tcell.KeyRune, str: "a", encoded: "a"},
27 {mod: tcell.ModNone, key: tcell.KeyRune, str: "+", encoded: "+"},
28 {mod: tcell.ModNone, key: tcell.KeyRune, str: ";", encoded: ";"},
29 {mod: tcell.ModNone, key: tcell.KeyTab, str: string(rune(tcell.KeyTab)), encoded: "Tab"},
30 {mod: tcell.ModNone, key: tcell.KeyEnter, str: string(rune(tcell.KeyEnter)), encoded: "Enter"},
31 {mod: tcell.ModNone, key: tcell.KeyPgDn, str: "", encoded: "PageDown"},
32 {mod: tcell.ModAlt, key: tcell.KeyRune, str: "a", encoded: "Alt+a"},
33 {mod: tcell.ModAlt, key: tcell.KeyRune, str: "+", encoded: "Alt++"},
34 {mod: tcell.ModAlt, key: tcell.KeyRune, str: ";", encoded: "Alt+;"},
35 {mod: tcell.ModAlt, key: tcell.KeyRune, str: " ", encoded: "Alt+Space"},
36 {mod: tcell.ModAlt, key: tcell.KeyRune, str: "1", encoded: "Alt+1"},
37 {mod: tcell.ModAlt, key: tcell.KeyTab, str: string(rune(tcell.KeyTab)), encoded: "Alt+Tab"},
38 {mod: tcell.ModAlt, key: tcell.KeyEnter, str: string(rune(tcell.KeyEnter)), encoded: "Alt+Enter"},
39 {mod: tcell.ModAlt, key: tcell.KeyDelete, str: "", encoded: "Alt+Delete"},
40 {mod: tcell.ModCtrl, key: tcell.KeyRune, str: "c", encoded: "Ctrl+c"},
41 {mod: tcell.ModCtrl, key: tcell.KeyRune, str: "d", encoded: "Ctrl+d"},
42 {mod: tcell.ModCtrl | tcell.ModAlt, key: tcell.KeyRune, str: "c", encoded: "Ctrl+Alt+c"},
43 {mod: tcell.ModCtrl, key: tcell.KeyRune, str: " ", encoded: "Ctrl+Space"},
44 {mod: tcell.ModCtrl | tcell.ModAlt, key: tcell.KeyRune, str: "+", encoded: "Ctrl+Alt++"},
45 {mod: tcell.ModCtrl | tcell.ModShift, key: tcell.KeyRune, str: "+", encoded: "Ctrl+Shift++"},
46 }
47
48 func TestEncode(t *testing.T) {
49 t.Parallel()
50
51 for _, c := range testCases {
52 encoded, err := Encode(c.mod, c.key, c.str)
53 if err != nil {
54 t.Errorf("failed to encode key %d %d %s: %s", c.mod, c.key, c.str, err)
55 }
56 if encoded != c.encoded {
57 t.Errorf("failed to encode key %d %d %s: got %s, want %s", c.mod, c.key, c.str, encoded, c.encoded)
58 }
59 }
60 }
61
62 func TestDecode(t *testing.T) {
63 t.Parallel()
64
65 for _, c := range testCases {
66 mod, key, str, err := Decode(c.encoded)
67 if err != nil {
68 t.Errorf("failed to decode key %s: %s", c.encoded, err)
69 }
70 if mod != c.mod {
71 t.Errorf("failed to decode key %s: invalid modifiers: got %d, want %d", c.encoded, mod, c.mod)
72 }
73 if key != c.key {
74 t.Errorf("failed to decode key %s: invalid key: got %d, want %d", c.encoded, key, c.key)
75 }
76 if str != c.str {
77 t.Errorf("failed to decode key %s: invalid rune: got %s, want %s", c.encoded, str, c.str)
78 }
79 }
80 }
81
View as plain text