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
9START_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}
27END_TEST
28
29START_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}
39END_TEST
40
41START_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}
62END_TEST
63
64START_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}
74END_TEST
75
76START_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}
97END_TEST
98
99START_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}
121END_TEST
122
123START_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}
142END_TEST
143
144START_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}
164END_TEST
165
166START_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}
190END_TEST
191
192START_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}
199END_TEST
200
201START_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}
212END_TEST
213
214START_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}
231END_TEST
232
233START_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}
244END_TEST
245
246TEST_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