1 // SPDX-License-Identifier: MIT
2 /*
3 * Copyright © 2013 David Herrmann <dh.herrmann@gmail.com>
4 */
5
6 #include "config.h"
7 #include "test-common.h"
8
START_TEST(test_type_names)9 START_TEST(test_type_names)
10 {
11 ck_assert_int_eq(libevdev_event_type_from_name("EV_SYN"), EV_SYN);
12 ck_assert_int_eq(libevdev_event_type_from_name("EV_KEY"), EV_KEY);
13 ck_assert_int_eq(libevdev_event_type_from_name("EV_REL"), EV_REL);
14 ck_assert_int_eq(libevdev_event_type_from_name("EV_ABS"), EV_ABS);
15 ck_assert_int_eq(libevdev_event_type_from_name("EV_MSC"), EV_MSC);
16 ck_assert_int_eq(libevdev_event_type_from_name("EV_SND"), EV_SND);
17 ck_assert_int_eq(libevdev_event_type_from_name("EV_SW"), EV_SW);
18 ck_assert_int_eq(libevdev_event_type_from_name("EV_LED"), EV_LED);
19 ck_assert_int_eq(libevdev_event_type_from_name("EV_REP"), EV_REP);
20 ck_assert_int_eq(libevdev_event_type_from_name("EV_FF"), EV_FF);
21 ck_assert_int_eq(libevdev_event_type_from_name("EV_FF_STATUS"), EV_FF_STATUS);
22 ck_assert_int_eq(libevdev_event_type_from_name("EV_MAX"), EV_MAX);
23
24 ck_assert_int_eq(libevdev_event_type_from_name_n("EV_SYNTAX", 6), EV_SYN);
25 ck_assert_int_eq(libevdev_event_type_from_name_n("EV_REPTILE", 6), EV_REP);
26 }
27 END_TEST
28
START_TEST(test_type_names_invalid)29 START_TEST(test_type_names_invalid)
30 {
31 ck_assert_int_eq(libevdev_event_type_from_name("EV_Syn"), -1);
32 ck_assert_int_eq(libevdev_event_type_from_name("ev_SYN"), -1);
33 ck_assert_int_eq(libevdev_event_type_from_name("SYN"), -1);
34 ck_assert_int_eq(libevdev_event_type_from_name("EV_SYNTAX"), -1);
35
36 ck_assert_int_eq(libevdev_event_type_from_name_n("EV_SYN", 5), -1);
37 ck_assert_int_eq(libevdev_event_type_from_name_n("EV_REPTILE", 7), -1);
38 }
39 END_TEST
40
START_TEST(test_type_name_lookup)41 START_TEST(test_type_name_lookup)
42 {
43 ck_assert_int_eq(libevdev_event_type_from_code_name("SYN_REPORT"), EV_SYN);
44 ck_assert_int_eq(libevdev_event_type_from_code_name("KEY_A"), EV_KEY);
45 ck_assert_int_eq(libevdev_event_type_from_code_name("REL_Z"), EV_REL);
46 ck_assert_int_eq(libevdev_event_type_from_code_name("ABS_Z"), EV_ABS);
47 ck_assert_int_eq(libevdev_event_type_from_code_name("MSC_SERIAL"), EV_MSC);
48 ck_assert_int_eq(libevdev_event_type_from_code_name("SND_TONE"), EV_SND);
49 ck_assert_int_eq(libevdev_event_type_from_code_name("SW_TABLET_MODE"), EV_SW);
50 ck_assert_int_eq(libevdev_event_type_from_code_name("LED_CHARGING"), EV_LED);
51 ck_assert_int_eq(libevdev_event_type_from_code_name("REP_PERIOD"), EV_REP);
52 ck_assert_int_eq(libevdev_event_type_from_code_name("FF_SPRING"), EV_FF);
53 ck_assert_int_eq(libevdev_event_type_from_code_name("FF_STATUS_STOPPED"), EV_FF_STATUS);
54
55 ck_assert_int_eq(libevdev_event_type_from_code_name_n("KEY_1zzzzz", 5), EV_KEY);
56 ck_assert_int_eq(libevdev_event_type_from_code_name_n("ABS_Zooom", 5), EV_ABS);
57
58 ck_assert_int_eq(libevdev_event_type_from_code_name("KEY_MAX"), EV_KEY);
59 ck_assert_int_eq(libevdev_event_type_from_code_name("REL_MAX"), EV_REL);
60 ck_assert_int_eq(libevdev_event_type_from_code_name("ABS_MAX"), EV_ABS);
61 }
62 END_TEST
63
START_TEST(test_type_name_lookup_invalid)64 START_TEST(test_type_name_lookup_invalid)
65 {
66 ck_assert_int_eq(libevdev_event_type_from_name("SYN_REPORTED"), -1);
67 ck_assert_int_eq(libevdev_event_type_from_name("syn_blah"), -1);
68 ck_assert_int_eq(libevdev_event_type_from_name("SYN_"), -1);
69 ck_assert_int_eq(libevdev_event_type_from_name("KEY_BANANA"), -1);
70
71 ck_assert_int_eq(libevdev_event_type_from_name_n("KEY_BA", 6), -1);
72 ck_assert_int_eq(libevdev_event_type_from_name_n("KEY_BLAH", 8), -1);
73 }
74 END_TEST
75
START_TEST(test_code_names)76 START_TEST(test_code_names)
77 {
78 ck_assert_int_eq(libevdev_event_code_from_name(EV_SYN, "SYN_REPORT"), SYN_REPORT);
79 ck_assert_int_eq(libevdev_event_code_from_name(EV_ABS, "ABS_X"), ABS_X);
80 ck_assert_int_eq(libevdev_event_code_from_name(EV_KEY, "BTN_A"), BTN_A);
81 ck_assert_int_eq(libevdev_event_code_from_name(EV_KEY, "KEY_A"), KEY_A);
82 ck_assert_int_eq(libevdev_event_code_from_name(EV_REL, "REL_X"), REL_X);
83 ck_assert_int_eq(libevdev_event_code_from_name(EV_MSC, "MSC_RAW"), MSC_RAW);
84 ck_assert_int_eq(libevdev_event_code_from_name(EV_LED, "LED_KANA"), LED_KANA);
85 ck_assert_int_eq(libevdev_event_code_from_name(EV_SND, "SND_BELL"), SND_BELL);
86 ck_assert_int_eq(libevdev_event_code_from_name(EV_REP, "REP_DELAY"), REP_DELAY);
87 ck_assert_int_eq(libevdev_event_code_from_name(EV_SYN, "SYN_DROPPED"), SYN_DROPPED);
88 ck_assert_int_eq(libevdev_event_code_from_name(EV_KEY, "KEY_RESERVED"), KEY_RESERVED);
89 ck_assert_int_eq(libevdev_event_code_from_name(EV_KEY, "BTN_0"), BTN_0);
90 ck_assert_int_eq(libevdev_event_code_from_name(EV_KEY, "KEY_0"), KEY_0);
91 ck_assert_int_eq(libevdev_event_code_from_name(EV_FF, "FF_GAIN"), FF_GAIN);
92 ck_assert_int_eq(libevdev_event_code_from_name(EV_FF_STATUS, "FF_STATUS_MAX"), FF_STATUS_MAX);
93 ck_assert_int_eq(libevdev_event_code_from_name(EV_SW, "SW_PEN_INSERTED"), SW_PEN_INSERTED);
94
95 ck_assert_int_eq(libevdev_event_code_from_name_n(EV_ABS, "ABS_YXZ", 5), ABS_Y);
96 }
97 END_TEST
98
START_TEST(test_code_name_lookup)99 START_TEST(test_code_name_lookup)
100 {
101 /* Same as test_code_names() but without the type */
102 ck_assert_int_eq(libevdev_event_code_from_code_name("SYN_REPORT"), SYN_REPORT);
103 ck_assert_int_eq(libevdev_event_code_from_code_name("ABS_X"), ABS_X);
104 ck_assert_int_eq(libevdev_event_code_from_code_name("BTN_A"), BTN_A);
105 ck_assert_int_eq(libevdev_event_code_from_code_name("KEY_A"), KEY_A);
106 ck_assert_int_eq(libevdev_event_code_from_code_name("REL_X"), REL_X);
107 ck_assert_int_eq(libevdev_event_code_from_code_name("MSC_RAW"), MSC_RAW);
108 ck_assert_int_eq(libevdev_event_code_from_code_name("LED_KANA"), LED_KANA);
109 ck_assert_int_eq(libevdev_event_code_from_code_name("SND_BELL"), SND_BELL);
110 ck_assert_int_eq(libevdev_event_code_from_code_name("REP_DELAY"), REP_DELAY);
111 ck_assert_int_eq(libevdev_event_code_from_code_name("SYN_DROPPED"), SYN_DROPPED);
112 ck_assert_int_eq(libevdev_event_code_from_code_name("KEY_RESERVED"), KEY_RESERVED);
113 ck_assert_int_eq(libevdev_event_code_from_code_name("BTN_0"), BTN_0);
114 ck_assert_int_eq(libevdev_event_code_from_code_name("KEY_0"), KEY_0);
115 ck_assert_int_eq(libevdev_event_code_from_code_name("FF_GAIN"), FF_GAIN);
116 ck_assert_int_eq(libevdev_event_code_from_code_name("FF_STATUS_MAX"), FF_STATUS_MAX);
117 ck_assert_int_eq(libevdev_event_code_from_code_name("SW_PEN_INSERTED"), SW_PEN_INSERTED);
118
119 ck_assert_int_eq(libevdev_event_code_from_code_name_n("ABS_YXZ", 5), ABS_Y);
120 }
121 END_TEST
122
START_TEST(test_code_names_invalid)123 START_TEST(test_code_names_invalid)
124 {
125 ck_assert_int_eq(libevdev_event_code_from_name(EV_MAX, "MAX_FAKE"), -1);
126 ck_assert_int_eq(libevdev_event_code_from_name(EV_CNT, "CNT_FAKE"), -1);
127 ck_assert_int_eq(libevdev_event_code_from_name(EV_PWR, "PWR_SOMETHING"), -1);
128 ck_assert_int_eq(libevdev_event_code_from_name(EV_ABS, "EV_ABS"), -1);
129 ck_assert_int_eq(libevdev_event_code_from_name(EV_ABS, "ABS_XY"), -1);
130 ck_assert_int_eq(libevdev_event_code_from_name(EV_KEY, "BTN_GAMEPAD"), -1);
131 ck_assert_int_eq(libevdev_event_code_from_name(EV_KEY, "BUS_PCI"), -1);
132 ck_assert_int_eq(libevdev_event_code_from_name(EV_FF_STATUS, "FF_STATUS"), -1);
133 ck_assert_int_eq(libevdev_event_code_from_name(EV_FF_STATUS, "FF_STATUS_"), -1);
134 ck_assert_int_eq(libevdev_event_code_from_name(EV_FF, "FF_STATUS"), -1);
135 ck_assert_int_eq(libevdev_event_code_from_name(EV_FF, "FF_STATUS_"), -1);
136 ck_assert_int_eq(libevdev_event_code_from_name(EV_KEY, "ID_BUS"), -1);
137 ck_assert_int_eq(libevdev_event_code_from_name(EV_SND, "SND_CNT"), -1);
138 ck_assert_int_eq(libevdev_event_code_from_name(EV_SW, "SW_CNT"), -1);
139
140 ck_assert_int_eq(libevdev_event_code_from_name_n(EV_ABS, "ABS_X", 4), -1);
141 }
142 END_TEST
143
START_TEST(test_code_name_lookup_invalid)144 START_TEST(test_code_name_lookup_invalid)
145 {
146 /* Same as test_code_names_invalid() but without the type */
147 ck_assert_int_eq(libevdev_event_code_from_code_name("MAX_FAKE"), -1);
148 ck_assert_int_eq(libevdev_event_code_from_code_name("CNT_FAKE"), -1);
149 ck_assert_int_eq(libevdev_event_code_from_code_name("PWR_SOMETHING"), -1);
150 ck_assert_int_eq(libevdev_event_code_from_code_name("EV_ABS"), -1);
151 ck_assert_int_eq(libevdev_event_code_from_code_name("ABS_XY"), -1);
152 ck_assert_int_eq(libevdev_event_code_from_code_name("BTN_GAMEPAD"), -1);
153 ck_assert_int_eq(libevdev_event_code_from_code_name("BUS_PCI"), -1);
154 ck_assert_int_eq(libevdev_event_code_from_code_name("FF_STATUS"), -1);
155 ck_assert_int_eq(libevdev_event_code_from_code_name("FF_STATUS_"), -1);
156 ck_assert_int_eq(libevdev_event_code_from_code_name("FF_STATUS"), -1);
157 ck_assert_int_eq(libevdev_event_code_from_code_name("FF_STATUS_"), -1);
158 ck_assert_int_eq(libevdev_event_code_from_code_name("ID_BUS"), -1);
159 ck_assert_int_eq(libevdev_event_code_from_code_name("SND_CNT"), -1);
160 ck_assert_int_eq(libevdev_event_code_from_code_name("SW_CNT"), -1);
161
162 ck_assert_int_eq(libevdev_event_code_from_code_name_n("ABS_X", 4), -1);
163 }
164 END_TEST
165
START_TEST(test_code_names_max)166 START_TEST(test_code_names_max)
167 {
168 ck_assert_int_eq(libevdev_event_code_from_name(EV_SYN, "SYN_MAX"), SYN_MAX);
169 ck_assert_int_eq(libevdev_event_code_from_name(EV_KEY, "KEY_MAX"), KEY_MAX);
170 ck_assert_int_eq(libevdev_event_code_from_name(EV_REL, "REL_MAX"), REL_MAX);
171 ck_assert_int_eq(libevdev_event_code_from_name(EV_ABS, "ABS_MAX"), ABS_MAX);
172 ck_assert_int_eq(libevdev_event_code_from_name(EV_MSC, "MSC_MAX"), MSC_MAX);
173 ck_assert_int_eq(libevdev_event_code_from_name(EV_SW, "SW_MAX"), SW_MAX);
174 ck_assert_int_eq(libevdev_event_code_from_name(EV_LED, "LED_MAX"), LED_MAX);
175 ck_assert_int_eq(libevdev_event_code_from_name(EV_SND, "SND_MAX"), SND_MAX);
176 ck_assert_int_eq(libevdev_event_code_from_name(EV_REP, "REP_MAX"), REP_MAX);
177 ck_assert_int_eq(libevdev_event_code_from_name(EV_FF, "FF_MAX"), FF_MAX);
178
179 ck_assert_int_eq(libevdev_event_code_from_code_name("SYN_MAX"), SYN_MAX);
180 ck_assert_int_eq(libevdev_event_code_from_code_name("KEY_MAX"), KEY_MAX);
181 ck_assert_int_eq(libevdev_event_code_from_code_name("REL_MAX"), REL_MAX);
182 ck_assert_int_eq(libevdev_event_code_from_code_name("ABS_MAX"), ABS_MAX);
183 ck_assert_int_eq(libevdev_event_code_from_code_name("MSC_MAX"), MSC_MAX);
184 ck_assert_int_eq(libevdev_event_code_from_code_name("SW_MAX"), SW_MAX);
185 ck_assert_int_eq(libevdev_event_code_from_code_name("LED_MAX"), LED_MAX);
186 ck_assert_int_eq(libevdev_event_code_from_code_name("SND_MAX"), SND_MAX);
187 ck_assert_int_eq(libevdev_event_code_from_code_name("REP_MAX"), REP_MAX);
188 ck_assert_int_eq(libevdev_event_code_from_code_name("FF_MAX"), FF_MAX);
189 }
190 END_TEST
191
START_TEST(test_value_names)192 START_TEST(test_value_names)
193 {
194 ck_assert_int_eq(libevdev_event_value_from_name(EV_ABS, ABS_MT_TOOL_TYPE, "MT_TOOL_PALM"), MT_TOOL_PALM);
195 ck_assert_int_eq(libevdev_event_value_from_name(EV_ABS, ABS_MT_TOOL_TYPE, "MT_TOOL_FINGER"), MT_TOOL_FINGER);
196 ck_assert_int_eq(libevdev_event_value_from_name(EV_ABS, ABS_MT_TOOL_TYPE, "MT_TOOL_PEN"), MT_TOOL_PEN);
197 ck_assert_int_eq(libevdev_event_value_from_name(EV_ABS, ABS_MT_TOOL_TYPE, "MT_TOOL_MAX"), MT_TOOL_MAX);
198 }
199 END_TEST
200
START_TEST(test_value_names_invalid)201 START_TEST(test_value_names_invalid)
202 {
203 ck_assert_int_eq(libevdev_event_value_from_name(EV_SYN, REL_X, "MT_TOOL_PALM"), -1);
204 ck_assert_int_eq(libevdev_event_value_from_name(EV_REL, REL_X, "MT_TOOL_PALM"), -1);
205 ck_assert_int_eq(libevdev_event_value_from_name(EV_ABS, ABS_X, "MT_TOOL_PALM"), -1);
206 ck_assert_int_eq(libevdev_event_value_from_name(EV_ABS, ABS_MT_TOOL_TYPE, "MT_TOOL_"), -1);
207 ck_assert_int_eq(libevdev_event_value_from_name(EV_ABS, ABS_MT_TOOL_TYPE, "MT_TOOL_PALMA"), -1);
208 ck_assert_int_eq(libevdev_event_value_from_name(EV_ABS, ABS_MT_TOOL_TYPE, ""), -1);
209 ck_assert_int_eq(libevdev_event_value_from_name(EV_ABS, ABS_MT_TOOL_TYPE, "EV_ABS"), -1);
210 ck_assert_int_eq(libevdev_event_value_from_name(EV_ABS, ABS_MT_TOOL_TYPE, "ABS_X"), -1);
211 }
212 END_TEST
213
START_TEST(test_properties)214 START_TEST(test_properties)
215 {
216 struct prop {
217 int val;
218 const char *name;
219 } lut[] = {
220 { INPUT_PROP_DIRECT, "INPUT_PROP_DIRECT" },
221 { INPUT_PROP_POINTER, "INPUT_PROP_POINTER" },
222 { INPUT_PROP_MAX, "INPUT_PROP_MAX" },
223 { -1, NULL}
224 };
225 struct prop *p = lut;
226 while (p->val != -1) {
227 ck_assert_int_eq(libevdev_property_from_name(p->name), p->val);
228 p++;
229 }
230 }
231 END_TEST
232
START_TEST(test_properties_invalid)233 START_TEST(test_properties_invalid)
234 {
235 ck_assert_int_eq(libevdev_property_from_name("EV_ABS"), -1);
236 ck_assert_int_eq(libevdev_property_from_name("INPUT_PROP"), -1);
237 ck_assert_int_eq(libevdev_property_from_name("INPUT_PROP_"), -1);
238 ck_assert_int_eq(libevdev_property_from_name("INPUT_PROP_FOO"), -1);
239
240 ck_assert_int_eq(libevdev_property_from_name_n("INPUT_PROP_POINTER", 11), -1);
241 ck_assert_int_eq(libevdev_property_from_name_n("INPUT_PROP_POINTER",
242 strlen("INPUT_PROP_POINTER") - 1), -1);
243 }
244 END_TEST
245
TEST_SUITE(event_code_suite)246 TEST_SUITE(event_code_suite)
247 {
248 Suite *s = suite_create("Event codes");
249
250 add_test(s, test_type_names);
251 add_test(s, test_type_names_invalid);
252 add_test(s, test_type_name_lookup);
253 add_test(s, test_type_name_lookup_invalid);
254
255 add_test(s, test_code_names);
256 add_test(s, test_code_name_lookup);
257 add_test(s, test_code_names_invalid);
258 add_test(s, test_code_name_lookup_invalid);
259 add_test(s, test_code_names_max);
260
261 add_test(s, test_value_names);
262 add_test(s, test_value_names_invalid);
263
264 add_test(s, test_properties);
265 add_test(s, test_properties_invalid);
266
267 return s;
268 }
269