[PATCH libevdev 5/6] test: add test for sending uinput events
Peter Hutterer
peter.hutterer at who-t.net
Tue Aug 13 03:39:54 PDT 2013
Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
---
test/test-uinput.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 64 insertions(+)
diff --git a/test/test-uinput.c b/test/test-uinput.c
index de5f3f8..c1ffc3a 100644
--- a/test/test-uinput.c
+++ b/test/test-uinput.c
@@ -25,6 +25,7 @@
#include <linux/input.h>
#include <errno.h>
#include <unistd.h>
+#include <stdlib.h>
#include <fcntl.h>
#include <libevdev/libevdev-uinput.h>
@@ -161,6 +162,65 @@ START_TEST(test_uinput_check_syspath_name)
}
END_TEST
+START_TEST(test_uinput_events)
+{
+ struct libevdev *dev;
+ struct libevdev_uinput *uidev;
+ int fd, fd2;
+ int rc;
+ char *devnode;
+ int i;
+ const int nevents = 5;
+ struct input_event events[] = { {{0, 0}, EV_REL, REL_X, 1},
+ {{0, 0}, EV_REL, REL_Y, -1},
+ {{0, 0}, EV_SYN, SYN_REPORT, 0},
+ {{0, 0}, EV_KEY, BTN_LEFT, 1},
+ {{0, 0}, EV_SYN, SYN_REPORT, 0}};
+ struct input_event events_read[nevents];
+
+ dev = libevdev_new();
+ ck_assert(dev != NULL);
+ libevdev_set_name(dev, TEST_DEVICE_NAME);
+ libevdev_enable_event_type(dev, EV_SYN);
+ libevdev_enable_event_type(dev, EV_REL);
+ libevdev_enable_event_type(dev, EV_KEY);
+ libevdev_enable_event_code(dev, EV_REL, REL_X, NULL);
+ libevdev_enable_event_code(dev, EV_REL, REL_Y, NULL);
+ libevdev_enable_event_code(dev, EV_KEY, BTN_LEFT, NULL);
+
+ fd = open(UINPUT_NODE, O_RDWR);
+ ck_assert_int_gt(fd, -1);
+
+ rc = libevdev_uinput_create_from_device(dev, fd, &uidev);
+ ck_assert_int_eq(rc, 0);
+ ck_assert(uidev != NULL);
+
+ devnode = uinput_devnode_from_syspath(libevdev_uinput_get_syspath(uidev));
+ ck_assert(devnode != NULL);
+
+ fd2 = open(devnode, O_RDONLY);
+
+ for (i = 0; i < nevents; i++)
+ libevdev_uinput_write_event(uidev, events[i].type, events[i].code, events[i].value);
+
+ rc = read(fd2, events_read, sizeof(events_read));
+ ck_assert_int_eq(rc, sizeof(events_read));
+
+ for (i = 0; i < nevents; i++) {
+ ck_assert_int_eq(events[i].type, events_read[i].type);
+ ck_assert_int_eq(events[i].code, events_read[i].code);
+ ck_assert_int_eq(events[i].value, events_read[i].value);
+ }
+
+
+ free(devnode);
+ libevdev_free(dev);
+ libevdev_uinput_destroy(uidev);
+ close(fd);
+ close(fd2);
+}
+END_TEST
+
Suite *
uinput_suite(void)
{
@@ -172,5 +232,9 @@ uinput_suite(void)
tcase_add_test(tc, test_uinput_check_syspath_name);
suite_add_tcase(s, tc);
+ tc = tcase_create("device events");
+ tcase_add_test(tc, test_uinput_events);
+ suite_add_tcase(s, tc);
+
return s;
}
--
1.8.2.1
More information about the Input-tools
mailing list