summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2013-08-09 13:21:28 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2013-08-15 10:32:40 +1000
commit4d4293a65b604e0bf8d02dc729803f142fc665aa (patch)
tree5673340dea0205a4bd473feae44caa9565eae4ee /test
parentbfb6c1c6c59bf1bb3a9bbab0ff26b962a4efc922 (diff)
downloadlibevdev-4d4293a65b604e0bf8d02dc729803f142fc665aa.tar.gz
Add functions to toggle LEDs on the device
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
Diffstat (limited to 'test')
-rw-r--r--test/test-libevdev-has-event.c153
1 files changed, 153 insertions, 0 deletions
diff --git a/test/test-libevdev-has-event.c b/test/test-libevdev-has-event.c
index 307ea58..31a46ab 100644
--- a/test/test-libevdev-has-event.c
+++ b/test/test-libevdev-has-event.c
@@ -923,6 +923,153 @@ START_TEST(test_device_kernel_change_axis_invalid)
}
END_TEST
+START_TEST(test_led_valid)
+{
+ struct uinput_device* uidev;
+ struct libevdev *dev;
+ int rc;
+
+ rc = test_create_device(&uidev, &dev,
+ EV_LED, LED_NUML,
+ EV_LED, LED_CAPSL,
+ EV_LED, LED_COMPOSE,
+ -1);
+ ck_assert_msg(rc == 0, "Failed to create device: %s", strerror(-rc));
+
+ rc = libevdev_kernel_set_led_value(dev, LED_NUML, LIBEVDEV_LED_ON);
+ ck_assert_int_eq(rc, 0);
+ rc = libevdev_kernel_set_led_value(dev, LED_NUML, LIBEVDEV_LED_OFF);
+ ck_assert_int_eq(rc, 0);
+
+ rc = libevdev_kernel_set_led_values(dev,
+ LED_NUML, LIBEVDEV_LED_OFF,
+ LED_CAPSL, LIBEVDEV_LED_ON,
+ LED_COMPOSE, LIBEVDEV_LED_OFF,
+ -1);
+ ck_assert_int_eq(rc, 0);
+ ck_assert_int_eq(0, libevdev_get_event_value(dev, EV_LED, LED_NUML));
+ ck_assert_int_eq(1, libevdev_get_event_value(dev, EV_LED, LED_CAPSL));
+ ck_assert_int_eq(0, libevdev_get_event_value(dev, EV_LED, LED_COMPOSE));
+
+ rc = libevdev_kernel_set_led_values(dev,
+ LED_NUML, LIBEVDEV_LED_ON,
+ LED_CAPSL, LIBEVDEV_LED_OFF,
+ LED_COMPOSE, LIBEVDEV_LED_ON,
+ -1);
+ ck_assert_int_eq(rc, 0);
+ ck_assert_int_eq(1, libevdev_get_event_value(dev, EV_LED, LED_NUML));
+ ck_assert_int_eq(0, libevdev_get_event_value(dev, EV_LED, LED_CAPSL));
+ ck_assert_int_eq(1, libevdev_get_event_value(dev, EV_LED, LED_COMPOSE));
+
+ /* make sure we ignore unset leds */
+ rc = libevdev_kernel_set_led_values(dev,
+ LED_NUML, LIBEVDEV_LED_ON,
+ LED_CAPSL, LIBEVDEV_LED_OFF,
+ LED_SCROLLL, LIBEVDEV_LED_OFF,
+ LED_COMPOSE, LIBEVDEV_LED_ON,
+ -1);
+ ck_assert_int_eq(rc, 0);
+ ck_assert_int_eq(1, libevdev_get_event_value(dev, EV_LED, LED_NUML));
+ ck_assert_int_eq(0, libevdev_get_event_value(dev, EV_LED, LED_CAPSL));
+ ck_assert_int_eq(1, libevdev_get_event_value(dev, EV_LED, LED_COMPOSE));
+
+ libevdev_free(dev);
+ uinput_device_free(uidev);
+}
+END_TEST
+
+START_TEST(test_led_invalid)
+{
+ struct uinput_device* uidev;
+ struct libevdev *dev;
+ int rc;
+
+ rc = test_create_device(&uidev, &dev,
+ EV_LED, LED_NUML,
+ EV_LED, LED_CAPSL,
+ EV_LED, LED_COMPOSE,
+ -1);
+ ck_assert_msg(rc == 0, "Failed to create device: %s", strerror(-rc));
+
+ rc = libevdev_kernel_set_led_value(dev, LED_MAX + 1, LIBEVDEV_LED_ON);
+ ck_assert_int_eq(rc, -EINVAL);
+
+ rc = libevdev_kernel_set_led_value(dev, LED_NUML, LIBEVDEV_LED_OFF + 1);
+ ck_assert_int_eq(rc, -EINVAL);
+
+ rc = libevdev_kernel_set_led_value(dev, LED_SCROLLL, LIBEVDEV_LED_ON);
+ ck_assert_int_eq(rc, 0);
+
+ rc = libevdev_kernel_set_led_values(dev,
+ LED_NUML, LIBEVDEV_LED_OFF + 1,
+ -1);
+ ck_assert_int_eq(rc, -EINVAL);
+
+ rc = libevdev_kernel_set_led_values(dev,
+ LED_MAX + 1, LIBEVDEV_LED_ON,
+ LED_NUML, LIBEVDEV_LED_OFF + 1,
+ -1);
+ ck_assert_int_eq(rc, -EINVAL);
+
+ rc = libevdev_kernel_set_led_values(dev,
+ LED_SCROLLL, LIBEVDEV_LED_OFF,
+ -1);
+ ck_assert_int_eq(rc, 0);
+
+ libevdev_free(dev);
+ uinput_device_free(uidev);
+}
+END_TEST
+
+START_TEST(test_led_same)
+{
+ struct uinput_device* uidev;
+ struct libevdev *dev;
+ int rc;
+
+ rc = test_create_device(&uidev, &dev,
+ EV_LED, LED_NUML,
+ EV_LED, LED_CAPSL,
+ EV_LED, LED_COMPOSE,
+ -1);
+ ck_assert_msg(rc == 0, "Failed to create device: %s", strerror(-rc));
+
+ rc = libevdev_kernel_set_led_values(dev,
+ LED_NUML, LIBEVDEV_LED_OFF,
+ LED_NUML, LIBEVDEV_LED_ON,
+ LED_NUML, LIBEVDEV_LED_OFF,
+ LED_NUML, LIBEVDEV_LED_ON,
+ LED_NUML, LIBEVDEV_LED_OFF,
+ LED_NUML, LIBEVDEV_LED_ON,
+ LED_NUML, LIBEVDEV_LED_OFF,
+ LED_NUML, LIBEVDEV_LED_ON,
+ LED_NUML, LIBEVDEV_LED_OFF,
+ LED_NUML, LIBEVDEV_LED_ON,
+ LED_NUML, LIBEVDEV_LED_OFF,
+ LED_NUML, LIBEVDEV_LED_ON,
+ LED_NUML, LIBEVDEV_LED_OFF,
+ LED_NUML, LIBEVDEV_LED_ON,
+ LED_NUML, LIBEVDEV_LED_OFF,
+ LED_NUML, LIBEVDEV_LED_ON,
+ LED_NUML, LIBEVDEV_LED_OFF,
+ LED_NUML, LIBEVDEV_LED_ON,
+ LED_NUML, LIBEVDEV_LED_OFF,
+ LED_NUML, LIBEVDEV_LED_ON,
+ LED_NUML, LIBEVDEV_LED_OFF,
+ LED_NUML, LIBEVDEV_LED_ON,
+ LED_NUML, LIBEVDEV_LED_OFF,
+ LED_NUML, LIBEVDEV_LED_ON,
+ /* more than LED_CNT */
+ -1);
+ ck_assert_int_eq(rc, 0);
+ ck_assert_int_eq(1, libevdev_get_event_value(dev, EV_LED, LED_NUML));
+ ck_assert_int_eq(0, libevdev_get_event_value(dev, EV_LED, LED_CAPSL));
+ ck_assert_int_eq(0, libevdev_get_event_value(dev, EV_LED, LED_COMPOSE));
+
+ libevdev_free(dev);
+ uinput_device_free(uidev);
+}
+END_TEST
Suite *
libevdev_has_event_test(void)
{
@@ -971,6 +1118,12 @@ libevdev_has_event_test(void)
tcase_add_test(tc, test_device_kernel_change_axis_invalid);
suite_add_tcase(s, tc);
+ tc = tcase_create("led manipulation");
+ tcase_add_test(tc, test_led_valid);
+ tcase_add_test(tc, test_led_invalid);
+ tcase_add_test(tc, test_led_same);
+ suite_add_tcase(s, tc);
+
return s;
}