add gbs.conf
[platform/upstream/libxkbcommon.git] / test / modifiers.c
1 /*
2  * Copyright © 2023 Pierre Le Marre <dev@wismill.eu>
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a
5  * copy of this software and associated documentation files (the "Software"),
6  * to deal in the Software without restriction, including without limitation
7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8  * and/or sell copies of the Software, and to permit persons to whom the
9  * Software is furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice (including the next
12  * paragraph) shall be included in all copies or substantial portions of the
13  * Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21  * DEALINGS IN THE SOFTWARE.
22  *
23  */
24
25 #include "config.h"
26
27 #include <assert.h>
28 #include <stdlib.h>
29
30 #include "test.h"
31 #include "keymap.h"
32
33 // Standard real modifier masks
34 #define ShiftMask   (1 << 0)
35 #define LockMask    (1 << 1)
36 #define ControlMask (1 << 2)
37 #define Mod1Mask    (1 << 3)
38 #define Mod2Mask    (1 << 4)
39 #define Mod3Mask    (1 << 5)
40 #define Mod4Mask    (1 << 6)
41 #define Mod5Mask    (1 << 7)
42 #define NoModifier  0
43
44 static void
45 test_modmap_none(void)
46 {
47     struct xkb_context *context = test_get_context(0);
48     struct xkb_keymap *keymap;
49     const struct xkb_key *key;
50     xkb_keycode_t keycode;
51
52     keymap = test_compile_file(context, "keymaps/modmap-none.xkb");
53     assert(keymap);
54
55     keycode = xkb_keymap_key_by_name(keymap, "LVL3");
56     assert(keycode != XKB_KEYCODE_INVALID);
57     key = XkbKey(keymap, keycode);
58     assert(key->modmap == NoModifier);
59
60     keycode = xkb_keymap_key_by_name(keymap, "LFSH");
61     assert(keycode != XKB_KEYCODE_INVALID);
62     key = XkbKey(keymap, keycode);
63     assert(key->modmap == NoModifier);
64
65     keycode = xkb_keymap_key_by_name(keymap, "RTSH");
66     assert(keycode != XKB_KEYCODE_INVALID);
67     key = XkbKey(keymap, keycode);
68     assert(key->modmap == NoModifier);
69
70     keycode = xkb_keymap_key_by_name(keymap, "LWIN");
71     assert(keycode != XKB_KEYCODE_INVALID);
72     key = XkbKey(keymap, keycode);
73     assert(key->modmap == Mod4Mask);
74
75     keycode = xkb_keymap_key_by_name(keymap, "RWIN");
76     assert(keycode != XKB_KEYCODE_INVALID);
77     key = XkbKey(keymap, keycode);
78     assert(key->modmap == Mod4Mask);
79
80     keycode = xkb_keymap_key_by_name(keymap, "LCTL");
81     assert(keycode != XKB_KEYCODE_INVALID);
82     key = XkbKey(keymap, keycode);
83     assert(key->modmap == ControlMask);
84
85     keycode = xkb_keymap_key_by_name(keymap, "RCTL");
86     assert(keycode != XKB_KEYCODE_INVALID);
87     key = XkbKey(keymap, keycode);
88     assert(key->modmap == ControlMask);
89
90     keycode = xkb_keymap_key_by_name(keymap, "LALT");
91     assert(keycode != XKB_KEYCODE_INVALID);
92     key = XkbKey(keymap, keycode);
93     assert(key->modmap == Mod1Mask);
94
95     keycode = xkb_keymap_key_by_name(keymap, "RALT");
96     assert(keycode != XKB_KEYCODE_INVALID);
97     key = XkbKey(keymap, keycode);
98     assert(key->modmap == (Mod2Mask | Mod5Mask));
99
100     keycode = xkb_keymap_key_by_name(keymap, "CAPS");
101     assert(keycode != XKB_KEYCODE_INVALID);
102     key = XkbKey(keymap, keycode);
103     assert(key->modmap == LockMask);
104
105     keycode = xkb_keymap_key_by_name(keymap, "AD01");
106     assert(keycode != XKB_KEYCODE_INVALID);
107     key = XkbKey(keymap, keycode);
108     assert(key->modmap == Mod1Mask);
109
110     keycode = xkb_keymap_key_by_name(keymap, "AD02");
111     assert(keycode != XKB_KEYCODE_INVALID);
112     key = XkbKey(keymap, keycode);
113     assert(key->modmap == NoModifier);
114
115     keycode = xkb_keymap_key_by_name(keymap, "AD03");
116     assert(keycode != XKB_KEYCODE_INVALID);
117     key = XkbKey(keymap, keycode);
118     assert(key->modmap == NoModifier);
119
120     keycode = xkb_keymap_key_by_name(keymap, "AD04");
121     assert(keycode != XKB_KEYCODE_INVALID);
122     key = XkbKey(keymap, keycode);
123     assert(key->modmap == Mod1Mask);
124
125     keycode = xkb_keymap_key_by_name(keymap, "AD05");
126     assert(keycode != XKB_KEYCODE_INVALID);
127     key = XkbKey(keymap, keycode);
128     assert(key->modmap == Mod2Mask);
129
130     keycode = xkb_keymap_key_by_name(keymap, "AD06");
131     assert(keycode != XKB_KEYCODE_INVALID);
132     key = XkbKey(keymap, keycode);
133     assert(key->modmap == Mod3Mask);
134
135     keycode = xkb_keymap_key_by_name(keymap, "AD07");
136     assert(keycode != XKB_KEYCODE_INVALID);
137     key = XkbKey(keymap, keycode);
138     assert(key->modmap == Mod1Mask);
139
140     keycode = xkb_keymap_key_by_name(keymap, "AD08");
141     assert(keycode != XKB_KEYCODE_INVALID);
142     key = XkbKey(keymap, keycode);
143     assert(key->modmap == Mod2Mask);
144
145     keycode = xkb_keymap_key_by_name(keymap, "AD09");
146     assert(keycode != XKB_KEYCODE_INVALID);
147     key = XkbKey(keymap, keycode);
148     assert(key->modmap == Mod3Mask);
149
150     xkb_keymap_unref(keymap);
151     xkb_context_unref(context);
152 }
153
154 int
155 main(void)
156 {
157     test_modmap_none();
158
159     return 0;
160 }