...

Source file src/codeberg.org/tslocum/cbind/key_test.go

Documentation: codeberg.org/tslocum/cbind

     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