[PATCH libinput 3/3] test: implement tests for configurable tap button mappings

Peter Hutterer peter.hutterer at who-t.net
Fri Jul 22 02:46:54 UTC 2016


Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
---
 test/litest.h       |  11 +++
 test/touchpad-tap.c | 210 ++++++++++++++++++++++++++++++++++++++++++++++++----
 2 files changed, 206 insertions(+), 15 deletions(-)

diff --git a/test/litest.h b/test/litest.h
index bf50e8c..0b2d724 100644
--- a/test/litest.h
+++ b/test/litest.h
@@ -698,6 +698,17 @@ litest_disable_tap(struct libinput_device *device)
 }
 
 static inline void
+litest_set_tap_map(struct libinput_device *device,
+		   enum libinput_config_tap_button_map map)
+{
+	enum libinput_config_status status, expected;
+
+	expected = LIBINPUT_CONFIG_STATUS_SUCCESS;
+	status = libinput_device_config_tap_set_button_map(device, map);
+	litest_assert_int_eq(status, expected);
+}
+
+static inline void
 litest_enable_tap_drag(struct libinput_device *device)
 {
 	enum libinput_config_status status, expected;
diff --git a/test/touchpad-tap.c b/test/touchpad-tap.c
index 8383aa9..88a6cfe 100644
--- a/test/touchpad-tap.c
+++ b/test/touchpad-tap.c
@@ -918,8 +918,22 @@ START_TEST(touchpad_2fg_tap)
 {
 	struct litest_device *dev = litest_current_device();
 	struct libinput *li = dev->libinput;
+	enum libinput_config_tap_button_map map = _i; /* ranged test */
+	unsigned int button;
 
 	litest_enable_tap(dev->libinput_device);
+	litest_set_tap_map(dev->libinput_device, map);
+
+	switch (map) {
+	case LIBINPUT_CONFIG_TAP_MAP_LRM:
+		button = BTN_RIGHT;
+		break;
+	case LIBINPUT_CONFIG_TAP_MAP_LMR:
+		button = BTN_MIDDLE;
+		break;
+	default:
+		litest_abort_msg("Invalid map range %d", map);
+	}
 
 	litest_drain_events(dev->libinput);
 
@@ -930,10 +944,10 @@ START_TEST(touchpad_2fg_tap)
 
 	libinput_dispatch(li);
 
-	litest_assert_button_event(li, BTN_RIGHT,
+	litest_assert_button_event(li, button,
 				   LIBINPUT_BUTTON_STATE_PRESSED);
 	litest_timeout_tap();
-	litest_assert_button_event(li, BTN_RIGHT,
+	litest_assert_button_event(li, button,
 				   LIBINPUT_BUTTON_STATE_RELEASED);
 
 	litest_assert_empty_queue(li);
@@ -944,8 +958,22 @@ START_TEST(touchpad_2fg_tap_inverted)
 {
 	struct litest_device *dev = litest_current_device();
 	struct libinput *li = dev->libinput;
+	enum libinput_config_tap_button_map map = _i; /* ranged test */
+	unsigned int button;
 
 	litest_enable_tap(dev->libinput_device);
+	litest_set_tap_map(dev->libinput_device, map);
+
+	switch (map) {
+	case LIBINPUT_CONFIG_TAP_MAP_LRM:
+		button = BTN_RIGHT;
+		break;
+	case LIBINPUT_CONFIG_TAP_MAP_LMR:
+		button = BTN_MIDDLE;
+		break;
+	default:
+		litest_abort_msg("Invalid map range %d", map);
+	}
 
 	litest_drain_events(dev->libinput);
 
@@ -956,10 +984,10 @@ START_TEST(touchpad_2fg_tap_inverted)
 
 	libinput_dispatch(li);
 
-	litest_assert_button_event(li, BTN_RIGHT,
+	litest_assert_button_event(li, button,
 				   LIBINPUT_BUTTON_STATE_PRESSED);
 	litest_timeout_tap();
-	litest_assert_button_event(li, BTN_RIGHT,
+	litest_assert_button_event(li, button,
 				   LIBINPUT_BUTTON_STATE_RELEASED);
 
 	litest_assert_empty_queue(li);
@@ -1333,6 +1361,8 @@ START_TEST(touchpad_3fg_tap)
 	struct litest_device *dev = litest_current_device();
 	struct libinput *li = dev->libinput;
 	struct libinput_event *event;
+	enum libinput_config_tap_button_map map = _i; /* ranged test */
+	unsigned int button;
 	int i;
 
 	if (libevdev_get_abs_maximum(dev->evdev,
@@ -1340,6 +1370,18 @@ START_TEST(touchpad_3fg_tap)
 		return;
 
 	litest_enable_tap(dev->libinput_device);
+	litest_set_tap_map(dev->libinput_device, map);
+
+	switch (map) {
+	case LIBINPUT_CONFIG_TAP_MAP_LRM:
+		button = BTN_MIDDLE;
+		break;
+	case LIBINPUT_CONFIG_TAP_MAP_LMR:
+		button = BTN_RIGHT;
+		break;
+	default:
+		litest_abort_msg("Invalid map range %d", map);
+	}
 
 	for (i = 0; i < 3; i++) {
 		litest_drain_events(li);
@@ -1354,10 +1396,10 @@ START_TEST(touchpad_3fg_tap)
 
 		libinput_dispatch(li);
 
-		litest_assert_button_event(li, BTN_MIDDLE,
+		litest_assert_button_event(li, button,
 					   LIBINPUT_BUTTON_STATE_PRESSED);
 		litest_timeout_tap();
-		litest_assert_button_event(li, BTN_MIDDLE,
+		litest_assert_button_event(li, button,
 					   LIBINPUT_BUTTON_STATE_RELEASED);
 
 		libinput_dispatch(li);
@@ -1411,12 +1453,26 @@ START_TEST(touchpad_3fg_tap_btntool)
 	struct litest_device *dev = litest_current_device();
 	struct libinput *li = dev->libinput;
 	struct libinput_event *event;
+	enum libinput_config_tap_button_map map = _i; /* ranged test */
+	unsigned int button;
 
 	if (libevdev_get_abs_maximum(dev->evdev,
 				     ABS_MT_SLOT) > 2)
 		return;
 
 	litest_enable_tap(dev->libinput_device);
+	litest_set_tap_map(dev->libinput_device, map);
+
+	switch (map) {
+	case LIBINPUT_CONFIG_TAP_MAP_LRM:
+		button = BTN_MIDDLE;
+		break;
+	case LIBINPUT_CONFIG_TAP_MAP_LMR:
+		button = BTN_RIGHT;
+		break;
+	default:
+		litest_abort_msg("Invalid map range %d", map);
+	}
 
 	litest_drain_events(li);
 
@@ -1433,10 +1489,10 @@ START_TEST(touchpad_3fg_tap_btntool)
 
 	libinput_dispatch(li);
 
-	litest_assert_button_event(li, BTN_MIDDLE,
+	litest_assert_button_event(li, button,
 				   LIBINPUT_BUTTON_STATE_PRESSED);
 	litest_timeout_tap();
-	litest_assert_button_event(li, BTN_MIDDLE,
+	litest_assert_button_event(li, button,
 				   LIBINPUT_BUTTON_STATE_RELEASED);
 
 	libinput_dispatch(li);
@@ -1450,12 +1506,26 @@ START_TEST(touchpad_3fg_tap_btntool_inverted)
 	struct litest_device *dev = litest_current_device();
 	struct libinput *li = dev->libinput;
 	struct libinput_event *event;
+	enum libinput_config_tap_button_map map = _i; /* ranged test */
+	unsigned int button;
 
 	if (libevdev_get_abs_maximum(dev->evdev,
 				     ABS_MT_SLOT) > 2)
 		return;
 
 	litest_enable_tap(dev->libinput_device);
+	litest_set_tap_map(dev->libinput_device, map);
+
+	switch (map) {
+	case LIBINPUT_CONFIG_TAP_MAP_LRM:
+		button = BTN_MIDDLE;
+		break;
+	case LIBINPUT_CONFIG_TAP_MAP_LMR:
+		button = BTN_RIGHT;
+		break;
+	default:
+		litest_abort_msg("invalid map range %d", map);
+	}
 
 	litest_drain_events(li);
 
@@ -1472,10 +1542,10 @@ START_TEST(touchpad_3fg_tap_btntool_inverted)
 
 	libinput_dispatch(li);
 
-	litest_assert_button_event(li, BTN_MIDDLE,
+	litest_assert_button_event(li, button,
 				   LIBINPUT_BUTTON_STATE_PRESSED);
 	litest_timeout_tap();
-	litest_assert_button_event(li, BTN_MIDDLE,
+	litest_assert_button_event(li, button,
 				   LIBINPUT_BUTTON_STATE_RELEASED);
 
 	libinput_dispatch(li);
@@ -1723,6 +1793,109 @@ START_TEST(touchpad_tap_invalid)
 }
 END_TEST
 
+START_TEST(touchpad_tap_default_map)
+{
+	struct litest_device *dev = litest_current_device();
+	enum libinput_config_tap_button_map map;
+
+	map = libinput_device_config_tap_get_button_map(dev->libinput_device);
+	ck_assert_int_eq(map, LIBINPUT_CONFIG_TAP_MAP_LRM);
+
+	map = libinput_device_config_tap_get_default_button_map(dev->libinput_device);
+	ck_assert_int_eq(map, LIBINPUT_CONFIG_TAP_MAP_LRM);
+}
+END_TEST
+
+START_TEST(touchpad_tap_set_map)
+{
+	struct litest_device *dev = litest_current_device();
+	struct libinput_device *device = dev->libinput_device;
+	enum libinput_config_tap_button_map map;
+	enum libinput_config_status status;
+
+	map = LIBINPUT_CONFIG_TAP_MAP_LRM;
+	status = libinput_device_config_tap_set_button_map(device, map);
+	ck_assert_int_eq(status, LIBINPUT_CONFIG_STATUS_SUCCESS);
+	map = libinput_device_config_tap_get_button_map(dev->libinput_device);
+	ck_assert_int_eq(map, LIBINPUT_CONFIG_TAP_MAP_LRM);
+
+	map = LIBINPUT_CONFIG_TAP_MAP_LMR;
+	status = libinput_device_config_tap_set_button_map(device, map);
+	ck_assert_int_eq(status, LIBINPUT_CONFIG_STATUS_SUCCESS);
+	map = libinput_device_config_tap_get_button_map(dev->libinput_device);
+	ck_assert_int_eq(map, LIBINPUT_CONFIG_TAP_MAP_LMR);
+
+	map = LIBINPUT_CONFIG_TAP_MAP_LRM - 1;
+	status = libinput_device_config_tap_set_button_map(device, map);
+	ck_assert_int_eq(status, LIBINPUT_CONFIG_STATUS_INVALID);
+
+	map = LIBINPUT_CONFIG_TAP_MAP_LMR + 1;
+	status = libinput_device_config_tap_set_button_map(device, map);
+	ck_assert_int_eq(status, LIBINPUT_CONFIG_STATUS_INVALID);
+}
+END_TEST
+
+START_TEST(touchpad_tap_set_map_no_tapping)
+{
+	struct litest_device *dev = litest_current_device();
+	struct libinput_device *device = dev->libinput_device;
+	enum libinput_config_tap_button_map map;
+	enum libinput_config_status status;
+
+	map = LIBINPUT_CONFIG_TAP_MAP_LRM;
+	status = libinput_device_config_tap_set_button_map(device, map);
+	ck_assert_int_eq(status, LIBINPUT_CONFIG_STATUS_UNSUPPORTED);
+
+	map = LIBINPUT_CONFIG_TAP_MAP_LMR;
+	status = libinput_device_config_tap_set_button_map(device, map);
+	ck_assert_int_eq(status, LIBINPUT_CONFIG_STATUS_UNSUPPORTED);
+
+	map = LIBINPUT_CONFIG_TAP_MAP_LRM - 1;
+	status = libinput_device_config_tap_set_button_map(device, map);
+	ck_assert_int_eq(status, LIBINPUT_CONFIG_STATUS_INVALID);
+
+	map = LIBINPUT_CONFIG_TAP_MAP_LMR + 1;
+	status = libinput_device_config_tap_set_button_map(device, map);
+	ck_assert_int_eq(status, LIBINPUT_CONFIG_STATUS_INVALID);
+}
+END_TEST
+
+START_TEST(touchpad_tap_map_delayed)
+{
+	struct litest_device *dev = litest_current_device();
+	struct libinput *li = dev->libinput;
+	enum libinput_config_tap_button_map map;
+
+	litest_enable_tap(dev->libinput_device);
+	litest_set_tap_map(dev->libinput_device,
+			   LIBINPUT_CONFIG_TAP_MAP_LRM);
+	litest_drain_events(dev->libinput);
+
+	litest_touch_down(dev, 0, 50, 50);
+	litest_touch_down(dev, 1, 70, 70);
+	libinput_dispatch(li);
+
+	litest_set_tap_map(dev->libinput_device,
+			   LIBINPUT_CONFIG_TAP_MAP_LMR);
+	map = libinput_device_config_tap_get_button_map(dev->libinput_device);
+	ck_assert_int_eq(map, LIBINPUT_CONFIG_TAP_MAP_LMR);
+
+	litest_touch_up(dev, 0);
+	litest_touch_up(dev, 1);
+
+	libinput_dispatch(li);
+
+	litest_assert_button_event(li,
+				   BTN_RIGHT,
+				   LIBINPUT_BUTTON_STATE_PRESSED);
+	litest_timeout_tap();
+	litest_assert_button_event(li, BTN_RIGHT,
+				   LIBINPUT_BUTTON_STATE_RELEASED);
+
+	litest_assert_empty_queue(li);
+}
+END_TEST
+
 START_TEST(touchpad_drag_default_disabled)
 {
 	struct litest_device *dev = litest_current_device();
@@ -1962,6 +2135,8 @@ void
 litest_setup_tests(void)
 {
 	struct range multitap_range = {3, 8};
+	struct range tap_map_range = { LIBINPUT_CONFIG_TAP_MAP_LRM,
+				       LIBINPUT_CONFIG_TAP_MAP_LMR + 1 };
 
 	litest_add("tap:1fg", touchpad_1fg_tap, LITEST_TOUCHPAD, LITEST_ANY);
 	litest_add("tap:1fg", touchpad_1fg_doubletap, LITEST_TOUCHPAD, LITEST_ANY);
@@ -1978,8 +2153,8 @@ litest_setup_tests(void)
 	litest_add("tap:2fg", touchpad_2fg_tap_n_drag, LITEST_TOUCHPAD, LITEST_SINGLE_TOUCH);
 	litest_add("tap:2fg", touchpad_2fg_tap_n_drag_3fg_btntool, LITEST_TOUCHPAD, LITEST_SINGLE_TOUCH|LITEST_APPLE_CLICKPAD);
 	litest_add("tap:2fg", touchpad_2fg_tap_n_drag_3fg, LITEST_TOUCHPAD, LITEST_SINGLE_TOUCH);
-	litest_add("tap:2fg", touchpad_2fg_tap, LITEST_TOUCHPAD, LITEST_SINGLE_TOUCH|LITEST_SEMI_MT);
-	litest_add("tap:2fg", touchpad_2fg_tap_inverted, LITEST_TOUCHPAD, LITEST_SINGLE_TOUCH);
+	litest_add_ranged("tap:2fg", touchpad_2fg_tap, LITEST_TOUCHPAD, LITEST_SINGLE_TOUCH|LITEST_SEMI_MT, &tap_map_range);
+	litest_add_ranged("tap:2fg", touchpad_2fg_tap_inverted, LITEST_TOUCHPAD, LITEST_SINGLE_TOUCH, &tap_map_range);
 	litest_add("tap:2fg", touchpad_2fg_tap_n_hold_first, LITEST_TOUCHPAD, LITEST_SINGLE_TOUCH);
 	litest_add("tap:2fg", touchpad_2fg_tap_n_hold_second, LITEST_TOUCHPAD, LITEST_SINGLE_TOUCH);
 	litest_add("tap:2fg", touchpad_2fg_tap_quickrelease, LITEST_TOUCHPAD, LITEST_SINGLE_TOUCH|LITEST_SEMI_MT);
@@ -1991,9 +2166,9 @@ litest_setup_tests(void)
 	litest_add("tap:2fg", touchpad_no_2fg_tap_after_timeout, LITEST_TOUCHPAD, LITEST_SINGLE_TOUCH|LITEST_SEMI_MT);
 	litest_add("tap:2fg", touchpad_no_first_fg_tap_after_move, LITEST_TOUCHPAD, LITEST_SINGLE_TOUCH);
 	litest_add("tap:2fg", touchpad_no_first_fg_tap_after_move, LITEST_TOUCHPAD, LITEST_SINGLE_TOUCH);
-	litest_add("tap:3fg", touchpad_3fg_tap_btntool, LITEST_TOUCHPAD, LITEST_SINGLE_TOUCH);
-	litest_add("tap:3fg", touchpad_3fg_tap_btntool_inverted, LITEST_TOUCHPAD, LITEST_SINGLE_TOUCH);
-	litest_add("tap:3fg", touchpad_3fg_tap, LITEST_TOUCHPAD, LITEST_SINGLE_TOUCH);
+	litest_add_ranged("tap:3fg", touchpad_3fg_tap_btntool, LITEST_TOUCHPAD, LITEST_SINGLE_TOUCH, &tap_map_range);
+	litest_add_ranged("tap:3fg", touchpad_3fg_tap_btntool_inverted, LITEST_TOUCHPAD, LITEST_SINGLE_TOUCH, &tap_map_range);
+	litest_add_ranged("tap:3fg", touchpad_3fg_tap, LITEST_TOUCHPAD, LITEST_SINGLE_TOUCH, &tap_map_range);
 	litest_add("tap:3fg", touchpad_3fg_tap_quickrelease, LITEST_TOUCHPAD, LITEST_SINGLE_TOUCH);
 	litest_add("tap:4fg", touchpad_4fg_tap, LITEST_TOUCHPAD, LITEST_SINGLE_TOUCH|LITEST_SEMI_MT);
 	litest_add("tap:4fg", touchpad_4fg_tap_quickrelease, LITEST_TOUCHPAD, LITEST_SINGLE_TOUCH|LITEST_SEMI_MT);
@@ -2013,6 +2188,11 @@ litest_setup_tests(void)
 	litest_add("tap:config", touchpad_tap_is_available, LITEST_TOUCHPAD, LITEST_ANY);
 	litest_add("tap:config", touchpad_tap_is_not_available, LITEST_ANY, LITEST_TOUCHPAD);
 
+	litest_add("tap:config", touchpad_tap_default_map, LITEST_TOUCHPAD, LITEST_ANY);
+	litest_add("tap:config", touchpad_tap_set_map, LITEST_TOUCHPAD, LITEST_ANY);
+	litest_add("tap:config", touchpad_tap_set_map_no_tapping, LITEST_ANY, LITEST_TOUCHPAD);
+	litest_add("tap:config", touchpad_tap_map_delayed, LITEST_TOUCHPAD, LITEST_SINGLE_TOUCH|LITEST_SEMI_MT);
+
 	litest_add("tap:1fg", clickpad_1fg_tap_click, LITEST_CLICKPAD, LITEST_ANY);
 	litest_add("tap:2fg", clickpad_2fg_tap_click, LITEST_CLICKPAD, LITEST_SINGLE_TOUCH|LITEST_APPLE_CLICKPAD);
 
-- 
2.7.4



More information about the wayland-devel mailing list