summaryrefslogtreecommitdiff
path: root/test/test-libevdev-init.c
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2013-09-12 13:42:24 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2013-09-13 09:28:00 +1000
commit1e81ac1e28b8e709b2e58a72605a1bdd54cd6758 (patch)
tree8a58b4eb083395c807fe0dec76defe7c1da66fe2 /test/test-libevdev-init.c
parentc299ab3c5eeb912e7952510383f49ba9a9478085 (diff)
downloadlibevdev-1e81ac1e28b8e709b2e58a72605a1bdd54cd6758.tar.gz
wrap EVIOCSCLOCKID into an API call
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
Diffstat (limited to 'test/test-libevdev-init.c')
-rw-r--r--test/test-libevdev-init.c108
1 files changed, 108 insertions, 0 deletions
diff --git a/test/test-libevdev-init.c b/test/test-libevdev-init.c
index 243da23..7d4376d 100644
--- a/test/test-libevdev-init.c
+++ b/test/test-libevdev-init.c
@@ -23,7 +23,12 @@
#include <config.h>
#include <errno.h>
#include <unistd.h>
+#include <time.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <libevdev/libevdev-uinput.h>
#include "test-common.h"
START_TEST(test_new_device)
@@ -260,6 +265,104 @@ START_TEST(test_device_grab)
}
END_TEST
+START_TEST(test_set_clock_id)
+{
+ struct uinput_device* uidev;
+ struct libevdev *dev;
+ int rc;
+
+ rc = test_create_device(&uidev, &dev,
+ EV_SYN, SYN_REPORT,
+ EV_REL, REL_X,
+ EV_REL, REL_Y,
+ EV_REL, REL_WHEEL,
+ EV_KEY, BTN_LEFT,
+ EV_KEY, BTN_MIDDLE,
+ EV_KEY, BTN_RIGHT,
+ -1);
+ ck_assert_msg(rc == 0, "Failed to create device: %s", strerror(-rc));
+
+ rc = libevdev_set_clock_id(dev, CLOCK_REALTIME);
+ ck_assert_int_eq(rc, 0);
+
+ rc = libevdev_set_clock_id(dev, CLOCK_MONOTONIC);
+ ck_assert_int_eq(rc, 0);
+
+ rc = libevdev_set_clock_id(dev, CLOCK_MONOTONIC_RAW);
+ ck_assert_int_eq(rc, -EINVAL);
+
+ uinput_device_free(uidev);
+ libevdev_free(dev);
+}
+END_TEST
+
+START_TEST(test_clock_id_events)
+{
+ struct uinput_device* uidev;
+ struct libevdev *dev, *dev2;
+ int rc, fd;
+ struct input_event ev1, ev2;
+ struct timespec t1_real, t2_real;
+ struct timespec t1_mono, t2_mono;
+
+ rc = test_create_device(&uidev, &dev,
+ EV_SYN, SYN_REPORT,
+ EV_REL, REL_X,
+ EV_REL, REL_Y,
+ EV_REL, REL_WHEEL,
+ EV_KEY, BTN_LEFT,
+ EV_KEY, BTN_MIDDLE,
+ EV_KEY, BTN_RIGHT,
+ -1);
+ ck_assert_msg(rc == 0, "Failed to create device: %s", strerror(-rc));
+
+ fd = open(uinput_device_get_devnode(uidev), O_RDONLY);
+ ck_assert_int_gt(fd, -1);
+
+ rc = libevdev_new_from_fd(fd, &dev2);
+ ck_assert_msg(rc == 0, "Failed to create second device: %s", strerror(-rc));
+
+ rc = libevdev_set_clock_id(dev2, CLOCK_MONOTONIC);
+ ck_assert_int_eq(rc, 0);
+
+ clock_gettime(CLOCK_REALTIME, &t1_real);
+ clock_gettime(CLOCK_MONOTONIC, &t1_mono);
+ uinput_device_event(uidev, EV_REL, REL_X, 1);
+ uinput_device_event(uidev, EV_SYN, SYN_REPORT, 0);
+ clock_gettime(CLOCK_REALTIME, &t2_real);
+ clock_gettime(CLOCK_MONOTONIC, &t2_mono);
+
+ rc = libevdev_next_event(dev, LIBEVDEV_READ_FLAG_NORMAL, &ev1);
+ ck_assert_int_eq(rc, LIBEVDEV_READ_STATUS_SUCCESS);
+
+ rc = libevdev_next_event(dev2, LIBEVDEV_READ_FLAG_NORMAL, &ev2);
+ ck_assert_int_eq(rc, LIBEVDEV_READ_STATUS_SUCCESS);
+
+ ck_assert_int_eq(ev1.type, ev2.type);
+ ck_assert_int_eq(ev1.code, ev2.code);
+ ck_assert_int_eq(ev1.value, ev2.value);
+
+ ck_assert_int_ne(ev1.time.tv_sec, ev2.time.tv_sec);
+ ck_assert_int_ne(ev1.time.tv_usec, ev2.time.tv_usec);
+
+ ck_assert_int_ge(ev1.time.tv_sec, t1_real.tv_sec);
+ ck_assert_int_ge(ev1.time.tv_usec, t1_real.tv_nsec/1000);
+ ck_assert_int_le(ev1.time.tv_sec, t2_real.tv_sec);
+ ck_assert_int_le(ev1.time.tv_usec, t2_real.tv_nsec/1000);
+
+ ck_assert_int_ge(ev2.time.tv_sec, t1_mono.tv_sec);
+ ck_assert_int_ge(ev2.time.tv_usec, t1_mono.tv_nsec/1000);
+ ck_assert_int_le(ev2.time.tv_sec, t2_mono.tv_sec);
+ ck_assert_int_le(ev2.time.tv_usec, t2_mono.tv_nsec/1000);
+
+ uinput_device_free(uidev);
+ libevdev_free(dev);
+ libevdev_free(dev2);
+ close(fd);
+}
+END_TEST
+
+
Suite *
libevdev_init_test(void)
{
@@ -286,5 +389,10 @@ libevdev_init_test(void)
tcase_add_test(tc, test_device_grab);
suite_add_tcase(s, tc);
+ tc = tcase_create("clock id");
+ tcase_add_test(tc, test_set_clock_id);
+ tcase_add_test(tc, test_clock_id_events);
+ suite_add_tcase(s, tc);
+
return s;
}