summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNiclas Zeising <zeising@daemonic.se>2020-08-11 23:50:53 +0200
committerNiclas Zeising <zeising@daemonic.se>2020-08-14 17:50:56 +0200
commit419402312246de14cd491dbf2f45e8d4efd99294 (patch)
treeaaaa9ddbb43f5f5ad6c1e9642006d84233f867c3
parent0af8c4054d44e186c6440f13d7f547532821ccae (diff)
downloadlibevdev-419402312246de14cd491dbf2f45e8d4efd99294.tar.gz
tests: Add FreeBSD specific tests
Add two FreeBSD specific tests: test_uinput_check_devnode_bsd checks that libevdev_uinput_get_devnode() returns something sensible. This is modelled on the Linux test test_uinput_check_syspath_name, but uses devnode instead of syspath, since reeBSD doesn't have sysfs. test_uinput_check_syspath_bsd checks that libevdev_uinput_get_syspath() always returns NULL. Signed-off-by: Niclas Zeising <zeising@daemonic.se>
-rw-r--r--test/test-uinput.c94
1 files changed, 94 insertions, 0 deletions
diff --git a/test/test-uinput.c b/test/test-uinput.c
index 01710f2..de4688b 100644
--- a/test/test-uinput.c
+++ b/test/test-uinput.c
@@ -164,6 +164,93 @@ START_TEST(test_uinput_create_device_from_fd)
}
END_TEST
+#ifdef __FreeBSD__
+START_TEST(test_uinput_check_devnode_bsd)
+{
+ struct libevdev *dev;
+ struct libevdev_uinput *uidev, *uidev2;
+ const char *devnode, *devnode2;
+ int fd, fd2;
+ int rc;
+
+ 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_code(dev, EV_REL, REL_X, NULL);
+ libevdev_enable_event_code(dev, EV_REL, REL_Y, NULL);
+
+ fd = open(UINPUT_NODE, O_RDWR);
+ ck_assert_int_gt(fd, -1);
+ fd2 = open(UINPUT_NODE, O_RDWR);
+ ck_assert_int_gt(fd2, -1);
+
+ rc = libevdev_uinput_create_from_device(dev, fd, &uidev);
+ ck_assert_int_eq(rc, 0);
+
+ /* create a second one */
+ libevdev_set_name(dev, TEST_DEVICE_NAME " 2");
+ rc = libevdev_uinput_create_from_device(dev, fd2, &uidev2);
+ ck_assert_int_eq(rc, 0);
+
+ devnode = libevdev_uinput_get_devnode(uidev);
+ ck_assert(devnode != NULL);
+
+ /* get syspath twice returns same pointer */
+ devnode2 = libevdev_uinput_get_devnode(uidev);
+ ck_assert(devnode == devnode2);
+
+ /* second dev has different devnode */
+ devnode2 = libevdev_uinput_get_devnode(uidev2);
+ ck_assert(strcmp(devnode, devnode2) != 0);
+
+ libevdev_uinput_destroy(uidev2);
+ libevdev_uinput_destroy(uidev);
+
+ close(fd2);
+ close(fd);
+
+ libevdev_free(dev);
+}
+END_TEST
+
+START_TEST(test_uinput_check_syspath_bsd)
+{
+ struct libevdev *dev;
+ struct libevdev_uinput *uidev;
+ const char *syspath;
+ int fd;
+ int rc;
+
+ 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_code(dev, EV_REL, REL_X, NULL);
+ libevdev_enable_event_code(dev, EV_REL, REL_Y, 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);
+
+ syspath = libevdev_uinput_get_syspath(uidev);
+ /* FreeBSD should always return NULL for libevdev_unput_get_syspath() */
+ ck_assert(syspath == NULL);
+
+ libevdev_uinput_destroy(uidev);
+
+ close(fd);
+
+ libevdev_free(dev);
+}
+END_TEST
+
+#else /* !__FreeBSD__ */
+
START_TEST(test_uinput_check_syspath_time)
{
struct libevdev *dev;
@@ -269,6 +356,8 @@ START_TEST(test_uinput_check_syspath_name)
}
END_TEST
+#endif /* __FreeBSD __ */
+
START_TEST(test_uinput_events)
{
struct libevdev *dev;
@@ -375,8 +464,13 @@ TEST_SUITE_ROOT_PRIVILEGES(uinput_suite)
add_test(s, test_uinput_create_device);
add_test(s, test_uinput_create_device_invalid);
add_test(s, test_uinput_create_device_from_fd);
+#ifdef __FreeBSD__
+ add_test(s, test_uinput_check_devnode_bsd);
+ add_test(s, test_uinput_check_syspath_bsd);
+#else
add_test(s, test_uinput_check_syspath_time);
add_test(s, test_uinput_check_syspath_name);
+#endif
add_test(s, test_uinput_events);