github.com/jmigpin/editor@v1.6.0/driver/xdriver/xinput/kmap_test.go (about)

     1  package xinput
     2  
     3  import (
     4  	"os"
     5  	"testing"
     6  
     7  	"github.com/BurntSushi/xgb"
     8  	"github.com/BurntSushi/xgb/xproto"
     9  	"github.com/jmigpin/editor/util/uiutil/event"
    10  )
    11  
    12  func TestKMapLookup1(t *testing.T) {
    13  	kmap, conn, err := getKMap(t)
    14  	if err != nil {
    15  		t.Fatal(err)
    16  	}
    17  	defer conn.Close()
    18  
    19  	type pair struct {
    20  		kc    xproto.Keycode
    21  		kmods uint16
    22  		eks   event.KeySym
    23  		ru    rune
    24  	}
    25  	pairs := []pair{
    26  		{11, 0, event.KSym2, '2'},
    27  		{11, xproto.KeyButMaskMod5, event.KSymAt, '@'},
    28  		{38, 0, event.KSymA, 'a'},
    29  		{38, xproto.KeyButMaskShift, event.KSymA, 'A'},
    30  		{35, xproto.KeyButMaskShift, event.KSymGrave, '`'},
    31  		{65, 0, event.KSymSpace, ' '},
    32  		{51, 0, event.KSymTilde, '~'},
    33  	}
    34  
    35  	//println(kmap.KeysymTable())
    36  
    37  	//for i := kmap.si.MinKeycode; i < 255; i++ {
    38  	//	eks, ru := kmap.Lookup(xproto.Keycode(i), 0)
    39  	//	fmt.Printf("%v, %v, %v(%c)\n", i, eks, ru, ru)
    40  	//}
    41  
    42  	for _, p := range pairs {
    43  		eks, ru := kmap.Lookup(p.kc, p.kmods)
    44  		if eks != p.eks || ru != p.ru {
    45  			t.Logf("%v, %v, %v(%c)\n", p.kc, eks, ru, ru)
    46  			t.Fail()
    47  		}
    48  	}
    49  }
    50  
    51  //----------
    52  
    53  func getKMap(t *testing.T) (*KMap, *xgb.Conn, error) {
    54  	display := os.Getenv("DISPLAY")
    55  	conn, err := xgb.NewConnDisplay(display)
    56  	if err != nil {
    57  		return nil, nil, err
    58  	}
    59  	km, err := NewKMap(conn)
    60  	if err != nil {
    61  		conn.Close()
    62  		return nil, nil, err
    63  	}
    64  	return km, conn, err
    65  }