diff --git a/key_test.go b/key_test.go new file mode 100644 index 0000000..ecb551c --- /dev/null +++ b/key_test.go @@ -0,0 +1,73 @@ +package tea + +import ( + "bytes" + "testing" +) + +func TestKeyString(t *testing.T) { + t.Run("alt+space", func(t *testing.T) { + if got := KeyMsg(Key{ + Type: keySP, + Alt: true, + }).String(); got != "alt+space" { + t.Fatalf(`expected a "alt+space", got %q`, got) + } + }) + + t.Run("runes", func(t *testing.T) { + if got := KeyMsg(Key{ + Type: KeyRunes, + Runes: []rune{'a'}, + }).String(); got != "a" { + t.Fatalf(`expected an "a", got %q`, got) + } + }) + + t.Run("invalid", func(t *testing.T) { + if got := KeyMsg(Key{ + Type: KeyType(99999), + }).String(); got != "" { + t.Fatalf(`expected a "", got %q`, got) + } + }) +} + +func TestKeyTypeString(t *testing.T) { + t.Run("space", func(t *testing.T) { + if got := keySP.String(); got != "space" { + t.Fatalf(`expected a "space", got %q`, got) + } + }) + + t.Run("invalid", func(t *testing.T) { + if got := KeyType(99999).String(); got != "" { + t.Fatalf(`expected a "", got %q`, got) + } + }) +} + +func TestReadInput(t *testing.T) { + for out, in := range map[string][]byte{ + "a": {'a'}, + "ctrl+a": {byte(keySOH)}, + "alt+a": {0x1b, 'a'}, + "abcd": {'a', 'b', 'c', 'd'}, + "up": []byte("\x1b[A"), + "wheel up": {'\x1b', '[', 'M', byte(32) + 0b0100_0000, byte(65), byte(49)}, + "shift+tab": {'\x1b', '[', 'Z'}, + } { + t.Run(out, func(t *testing.T) { + msg, err := readInput(bytes.NewReader(in)) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if m, ok := msg.(KeyMsg); ok && m.String() != out { + t.Fatalf(`expected a keymsg %q, got %q`, out, m) + } + if m, ok := msg.(MouseMsg); ok && mouseEventTypes[m.Type] != out { + t.Fatalf(`expected a mousemsg %q, got %q`, out, mouseEventTypes[m.Type]) + } + }) + } +}