Skip to content

Commit 3fe1b7a

Browse files
committed
Add tests
1 parent a2c6e67 commit 3fe1b7a

File tree

2 files changed

+214
-0
lines changed

2 files changed

+214
-0
lines changed

test/data/keymaps/real-modifiers.xkb

+151
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
xkb_keymap {
2+
xkb_keycodes "test" {
3+
minimum = 8;
4+
maximum = 255;
5+
<LVL3> = 92;
6+
<LFSH> = 50;
7+
<RTSH> = 62;
8+
<LALT> = 64;
9+
<RALT> = 108;
10+
<LWIN> = 133;
11+
<RWIN> = 134;
12+
<LCTL> = 37;
13+
<RCTL> = 105;
14+
<CAPS> = 66;
15+
16+
<AD01> = 24;
17+
<AD02> = 25;
18+
<AD03> = 26;
19+
<AD04> = 27;
20+
<AD05> = 28;
21+
<AD06> = 29;
22+
<AD07> = 30;
23+
<AD08> = 31;
24+
<AD09> = 32;
25+
};
26+
27+
xkb_types "complete" {
28+
virtual_modifiers MyMod5,MyMod6,MyMod6,MyMod7,MyMod8,MyMod9,MyMod10,WonderMod;
29+
30+
type "ONE_LEVEL" {
31+
modifiers= none;
32+
level_name[Level1]= "Any";
33+
};
34+
type "TWO_LEVEL" {
35+
modifiers= Shift;
36+
map[Shift]= 2;
37+
level_name[1]= "Base";
38+
level_name[2]= "Shift";
39+
};
40+
type "SO_MANY_LEVELS" {
41+
modifiers = Shift+MyMod5+MyMod6+MyMod6+MyMod7+MyMod8+MyMod9+MyMod10+WonderMod;
42+
map[Shift] = 2;
43+
map[MyMod5] = 3;
44+
map[MyMod6] = 4;
45+
map[MyMod6+Shift] = 5;
46+
map[MyMod7] = 6;
47+
map[MyMod8] = 7;
48+
map[MyMod9] = 8;
49+
map[MyMod10] = 9;
50+
map[WonderMod] = 10;
51+
level_name[1] = "1";
52+
level_name[2] = "2";
53+
level_name[3] = "3";
54+
level_name[4] = "4";
55+
level_name[5] = "5";
56+
level_name[6] = "6";
57+
level_name[7] = "7";
58+
level_name[8] = "8";
59+
level_name[9] = "9";
60+
level_name[10] = "10";
61+
};
62+
};
63+
xkb_compatibility "complete" {
64+
interpret.useModMapMods= AnyLevel;
65+
interpret.repeat= False;
66+
interpret.locking= False;
67+
68+
virtual_modifiers MyMod5,MyMod6,MyMod7,MyMod8,MyMod9,MyMod10,WonderMod;
69+
70+
interpret Any+AnyOf(all) {
71+
action = SetMods(modifiers=modMapMods,clearLocks);
72+
};
73+
74+
interpret q {
75+
useModMapMods = level1;
76+
virtualModifier = MyMod5;
77+
action = SetMods(modifiers=MyMod5);
78+
};
79+
interpret w {
80+
useModMapMods = level1;
81+
virtualModifier = MyMod6;
82+
action = SetMods(modifiers=MyMod6);
83+
};
84+
interpret e {
85+
useModMapMods = level1;
86+
virtualModifier = MyMod7;
87+
action = SetMods(modifiers=MyMod7);
88+
};
89+
interpret r {
90+
useModMapMods = level1;
91+
virtualModifier = MyMod8;
92+
action = SetMods(modifiers=MyMod8);
93+
};
94+
interpret t {
95+
useModMapMods = level1;
96+
virtualModifier = MyMod9;
97+
action = SetMods(modifiers=MyMod9);
98+
};
99+
interpret y {
100+
useModMapMods = level1;
101+
virtualModifier = MyMod10;
102+
action = SetMods(modifiers=MyMod10);
103+
};
104+
interpret u {
105+
useModMapMods = level1;
106+
virtualModifier = WonderMod;
107+
action = SetMods(modifiers=WonderMod);
108+
};
109+
interpret i {
110+
useModMapMods = level1;
111+
virtualModifier = WonderMod;
112+
action = SetMods(modifiers=WonderMod);
113+
};
114+
};
115+
xkb_symbols {
116+
name[group1]="Test";
117+
118+
key <LFSH> { [Shift_L] };
119+
modmap Shift { <LFSH> };
120+
121+
key <AD01> { [q] };
122+
modMap Mod5 { <AD01> };
123+
124+
key <AD02> { [w] };
125+
modMap Mod6 { <AD02> };
126+
127+
key <AD03> { [e] };
128+
modMap Mod7 { <AD03> };
129+
130+
key <AD04> { [r] };
131+
modMap Mod8 { <AD04> };
132+
133+
key <AD05> { [t] };
134+
modMap Mod9 { <AD05> };
135+
136+
key <AD06> { [y] };
137+
modMap Mod10 { <AD06> };
138+
139+
key <AD07> { [u] };
140+
modMap Mod5 { <AD07> };
141+
142+
key <AD08> { [i] };
143+
modMap Mod6 { <AD08> };
144+
145+
key <AD09> {
146+
type[Group1]="SO_MANY_LEVELS",
147+
symbols[Group1]=[a,b,c,d,e,f,g,h,i,j]
148+
};
149+
150+
};
151+
};

test/modifiers.c

+63
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929

3030
#include "test.h"
3131
#include "keymap.h"
32+
#include "evdev-scancodes.h"
3233

3334
// Standard real modifier masks
3435
#define ShiftMask (1 << 0)
@@ -39,6 +40,11 @@
3940
#define Mod3Mask (1 << 5)
4041
#define Mod4Mask (1 << 6)
4142
#define Mod5Mask (1 << 7)
43+
#define Mod6Mask (1 << 8)
44+
#define Mod7Mask (1 << 9)
45+
#define Mod8Mask (1 << 10)
46+
#define Mod9Mask (1 << 11)
47+
#define Mod10Mask (1 << 12)
4248
#define NoModifier 0
4349

4450
static void
@@ -151,10 +157,67 @@ test_modmap_none(void)
151157
xkb_context_unref(context);
152158
}
153159

160+
static void
161+
test_real_mods(void)
162+
{
163+
struct xkb_context *context = test_get_context(0);
164+
struct xkb_keymap *keymap;
165+
const struct xkb_key *key;
166+
xkb_keycode_t keycode;
167+
168+
keymap = test_compile_file(context, "keymaps/real-modifiers.xkb");
169+
assert(keymap);
170+
171+
keycode = xkb_keymap_key_by_name(keymap, "AD01");
172+
assert(keycode != XKB_KEYCODE_INVALID);
173+
key = XkbKey(keymap, keycode);
174+
assert(key->modmap == Mod5Mask);
175+
assert(key->vmodmap == Mod10Mask << 1);
176+
177+
keycode = xkb_keymap_key_by_name(keymap, "AD02");
178+
assert(keycode != XKB_KEYCODE_INVALID);
179+
key = XkbKey(keymap, keycode);
180+
assert(key->modmap == Mod6Mask);
181+
assert(key->vmodmap == Mod10Mask << 2);
182+
183+
assert(test_key_seq(keymap,
184+
KEY_O, BOTH, XKB_KEY_a, NEXT,
185+
KEY_Q, DOWN, XKB_KEY_q, NEXT,
186+
KEY_O, BOTH, XKB_KEY_c, NEXT,
187+
KEY_Q, UP, XKB_KEY_q, NEXT,
188+
KEY_W, DOWN, XKB_KEY_w, NEXT,
189+
KEY_O, BOTH, XKB_KEY_d, NEXT,
190+
KEY_W, UP, XKB_KEY_w, NEXT,
191+
KEY_E, DOWN, XKB_KEY_e, NEXT,
192+
KEY_O, BOTH, XKB_KEY_f, NEXT,
193+
KEY_E, UP, XKB_KEY_e, NEXT,
194+
KEY_R, DOWN, XKB_KEY_r, NEXT,
195+
KEY_O, BOTH, XKB_KEY_g, NEXT,
196+
KEY_R, UP, XKB_KEY_r, NEXT,
197+
KEY_T, DOWN, XKB_KEY_t, NEXT,
198+
KEY_O, BOTH, XKB_KEY_h, NEXT,
199+
KEY_T, UP, XKB_KEY_t, NEXT,
200+
KEY_Y, DOWN, XKB_KEY_y, NEXT,
201+
KEY_O, BOTH, XKB_KEY_i, NEXT,
202+
KEY_Y, UP, XKB_KEY_y, NEXT,
203+
KEY_U, DOWN, XKB_KEY_u, NEXT,
204+
KEY_O, BOTH, XKB_KEY_j, NEXT,
205+
KEY_U, UP, XKB_KEY_u, NEXT,
206+
KEY_Q, DOWN, XKB_KEY_q, NEXT,
207+
KEY_W, DOWN, XKB_KEY_w, NEXT,
208+
KEY_O, BOTH, XKB_KEY_j, NEXT,
209+
KEY_W, UP, XKB_KEY_w, NEXT,
210+
KEY_Q, UP, XKB_KEY_q, FINISH));
211+
212+
xkb_keymap_unref(keymap);
213+
xkb_context_unref(context);
214+
}
215+
154216
int
155217
main(void)
156218
{
157219
test_modmap_none();
220+
test_real_mods();
158221

159222
return 0;
160223
}

0 commit comments

Comments
 (0)