From: Peter Hutterer <[email protected]>

Signed-off-by: Peter Hutterer <[email protected]>
Reviewed-by: Hans de Goede <[email protected]>
---
 test/touchpad.c | 293 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 293 insertions(+)

diff --git a/test/touchpad.c b/test/touchpad.c
index fca7b5c..fbfce08 100644
--- a/test/touchpad.c
+++ b/test/touchpad.c
@@ -850,6 +850,198 @@ START_TEST(touchpad_2fg_clickfinger)
 }
 END_TEST
 
+START_TEST(touchpad_clickfinger_to_area_method)
+{
+       struct litest_device *dev = litest_current_device();
+       enum libinput_config_status status;
+       struct libinput *li = dev->libinput;
+
+       litest_drain_events(li);
+
+       status = libinput_device_config_click_set_method(dev->libinput_device,
+                                                        
LIBINPUT_CONFIG_CLICK_METHOD_BUTTON_AREAS);
+       ck_assert_int_eq(status, LIBINPUT_CONFIG_STATUS_SUCCESS);
+
+       litest_touch_down(dev, 0, 90, 90);
+       litest_event(dev, EV_KEY, BTN_LEFT, 1);
+       litest_event(dev, EV_SYN, SYN_REPORT, 0);
+       litest_event(dev, EV_KEY, BTN_LEFT, 0);
+       litest_event(dev, EV_SYN, SYN_REPORT, 0);
+       litest_touch_up(dev, 0);
+       libinput_dispatch(li);
+
+       litest_assert_button_event(li, BTN_RIGHT,
+                                  LIBINPUT_BUTTON_STATE_PRESSED);
+       litest_assert_button_event(li, BTN_RIGHT,
+                                  LIBINPUT_BUTTON_STATE_RELEASED);
+
+       status = libinput_device_config_click_set_method(dev->libinput_device,
+                                                        
LIBINPUT_CONFIG_CLICK_METHOD_CLICKFINGER);
+       ck_assert_int_eq(status, LIBINPUT_CONFIG_STATUS_SUCCESS);
+
+       litest_drain_events(li);
+
+       /* use bottom right corner to catch accidental softbutton right */
+       litest_touch_down(dev, 0, 90, 90);
+       litest_event(dev, EV_KEY, BTN_LEFT, 1);
+       litest_event(dev, EV_SYN, SYN_REPORT, 0);
+       litest_event(dev, EV_KEY, BTN_LEFT, 0);
+       litest_event(dev, EV_SYN, SYN_REPORT, 0);
+       litest_touch_up(dev, 0);
+       libinput_dispatch(li);
+
+       litest_assert_button_event(li, BTN_LEFT,
+                                  LIBINPUT_BUTTON_STATE_PRESSED);
+       litest_assert_button_event(li, BTN_LEFT,
+                                  LIBINPUT_BUTTON_STATE_RELEASED);
+
+}
+END_TEST
+
+START_TEST(touchpad_clickfinger_to_area_method_while_down)
+{
+       struct litest_device *dev = litest_current_device();
+       enum libinput_config_status status;
+       struct libinput *li = dev->libinput;
+
+       litest_drain_events(li);
+
+       status = libinput_device_config_click_set_method(dev->libinput_device,
+                                                        
LIBINPUT_CONFIG_CLICK_METHOD_BUTTON_AREAS);
+       ck_assert_int_eq(status, LIBINPUT_CONFIG_STATUS_SUCCESS);
+
+       litest_touch_down(dev, 0, 90, 90);
+       litest_event(dev, EV_KEY, BTN_LEFT, 1);
+       litest_event(dev, EV_SYN, SYN_REPORT, 0);
+       libinput_dispatch(li);
+       litest_assert_button_event(li, BTN_RIGHT,
+                                  LIBINPUT_BUTTON_STATE_PRESSED);
+
+       status = libinput_device_config_click_set_method(dev->libinput_device,
+                                                        
LIBINPUT_CONFIG_CLICK_METHOD_CLICKFINGER);
+       ck_assert_int_eq(status, LIBINPUT_CONFIG_STATUS_SUCCESS);
+
+       litest_event(dev, EV_KEY, BTN_LEFT, 0);
+       litest_event(dev, EV_SYN, SYN_REPORT, 0);
+       litest_touch_up(dev, 0);
+       libinput_dispatch(li);
+
+       litest_assert_button_event(li, BTN_RIGHT,
+                                  LIBINPUT_BUTTON_STATE_RELEASED);
+
+
+       litest_drain_events(li);
+
+       /* use bottom right corner to catch accidental softbutton right */
+       litest_touch_down(dev, 0, 90, 90);
+       litest_event(dev, EV_KEY, BTN_LEFT, 1);
+       litest_event(dev, EV_SYN, SYN_REPORT, 0);
+       litest_event(dev, EV_KEY, BTN_LEFT, 0);
+       litest_event(dev, EV_SYN, SYN_REPORT, 0);
+       litest_touch_up(dev, 0);
+       libinput_dispatch(li);
+
+       litest_assert_button_event(li, BTN_LEFT,
+                                  LIBINPUT_BUTTON_STATE_PRESSED);
+       litest_assert_button_event(li, BTN_LEFT,
+                                  LIBINPUT_BUTTON_STATE_RELEASED);
+
+}
+END_TEST
+
+START_TEST(touchpad_area_to_clickfinger_method)
+{
+       struct litest_device *dev = litest_current_device();
+       enum libinput_config_status status;
+       struct libinput *li = dev->libinput;
+
+       status = libinput_device_config_click_set_method(dev->libinput_device,
+                                                        
LIBINPUT_CONFIG_CLICK_METHOD_CLICKFINGER);
+       ck_assert_int_eq(status, LIBINPUT_CONFIG_STATUS_SUCCESS);
+
+       litest_drain_events(li);
+
+       /* use bottom right corner to catch accidental softbutton right */
+       litest_touch_down(dev, 0, 90, 90);
+       litest_event(dev, EV_KEY, BTN_LEFT, 1);
+       litest_event(dev, EV_SYN, SYN_REPORT, 0);
+       litest_event(dev, EV_KEY, BTN_LEFT, 0);
+       litest_event(dev, EV_SYN, SYN_REPORT, 0);
+       litest_touch_up(dev, 0);
+       libinput_dispatch(li);
+
+       litest_assert_button_event(li, BTN_LEFT,
+                                  LIBINPUT_BUTTON_STATE_PRESSED);
+       litest_assert_button_event(li, BTN_LEFT,
+                                  LIBINPUT_BUTTON_STATE_RELEASED);
+
+       status = libinput_device_config_click_set_method(dev->libinput_device,
+                                                        
LIBINPUT_CONFIG_CLICK_METHOD_BUTTON_AREAS);
+       ck_assert_int_eq(status, LIBINPUT_CONFIG_STATUS_SUCCESS);
+
+       litest_touch_down(dev, 0, 90, 90);
+       litest_event(dev, EV_KEY, BTN_LEFT, 1);
+       litest_event(dev, EV_SYN, SYN_REPORT, 0);
+       litest_event(dev, EV_KEY, BTN_LEFT, 0);
+       litest_event(dev, EV_SYN, SYN_REPORT, 0);
+       litest_touch_up(dev, 0);
+       libinput_dispatch(li);
+
+       litest_assert_button_event(li, BTN_RIGHT,
+                                  LIBINPUT_BUTTON_STATE_PRESSED);
+       litest_assert_button_event(li, BTN_RIGHT,
+                                  LIBINPUT_BUTTON_STATE_RELEASED);
+
+}
+END_TEST
+
+START_TEST(touchpad_area_to_clickfinger_method_while_down)
+{
+       struct litest_device *dev = litest_current_device();
+       enum libinput_config_status status;
+       struct libinput *li = dev->libinput;
+
+       status = libinput_device_config_click_set_method(dev->libinput_device,
+                                                        
LIBINPUT_CONFIG_CLICK_METHOD_CLICKFINGER);
+       ck_assert_int_eq(status, LIBINPUT_CONFIG_STATUS_SUCCESS);
+
+       litest_drain_events(li);
+
+       /* use bottom right corner to catch accidental softbutton right */
+       litest_touch_down(dev, 0, 90, 90);
+       litest_event(dev, EV_KEY, BTN_LEFT, 1);
+       litest_event(dev, EV_SYN, SYN_REPORT, 0);
+       litest_assert_button_event(li, BTN_LEFT,
+                                  LIBINPUT_BUTTON_STATE_PRESSED);
+
+       status = libinput_device_config_click_set_method(dev->libinput_device,
+                                                        
LIBINPUT_CONFIG_CLICK_METHOD_BUTTON_AREAS);
+       ck_assert_int_eq(status, LIBINPUT_CONFIG_STATUS_SUCCESS);
+
+       litest_event(dev, EV_KEY, BTN_LEFT, 0);
+       litest_event(dev, EV_SYN, SYN_REPORT, 0);
+       litest_touch_up(dev, 0);
+       libinput_dispatch(li);
+
+       litest_assert_button_event(li, BTN_LEFT,
+                                  LIBINPUT_BUTTON_STATE_RELEASED);
+
+       litest_touch_down(dev, 0, 90, 90);
+       litest_event(dev, EV_KEY, BTN_LEFT, 1);
+       litest_event(dev, EV_SYN, SYN_REPORT, 0);
+       litest_event(dev, EV_KEY, BTN_LEFT, 0);
+       litest_event(dev, EV_SYN, SYN_REPORT, 0);
+       litest_touch_up(dev, 0);
+       libinput_dispatch(li);
+
+       litest_assert_button_event(li, BTN_RIGHT,
+                                  LIBINPUT_BUTTON_STATE_PRESSED);
+       litest_assert_button_event(li, BTN_RIGHT,
+                                  LIBINPUT_BUTTON_STATE_RELEASED);
+
+}
+END_TEST
+
 START_TEST(touchpad_btn_left)
 {
        struct litest_device *dev = litest_current_device();
@@ -1458,6 +1650,99 @@ START_TEST(clickpad_topsoftbuttons_move_out_ignore)
 }
 END_TEST
 
+START_TEST(clickpad_topsoftbuttons_clickfinger)
+{
+       struct litest_device *dev = litest_current_device();
+       struct libinput *li = dev->libinput;
+
+       libinput_device_config_click_set_method(dev->libinput_device,
+                                               
LIBINPUT_CONFIG_CLICK_METHOD_CLICKFINGER);
+       litest_drain_events(li);
+
+       litest_touch_down(dev, 0, 90, 5);
+       litest_event(dev, EV_KEY, BTN_LEFT, 1);
+       litest_event(dev, EV_SYN, SYN_REPORT, 0);
+       litest_event(dev, EV_KEY, BTN_LEFT, 0);
+       litest_event(dev, EV_SYN, SYN_REPORT, 0);
+       litest_touch_up(dev, 0);
+
+       litest_assert_button_event(li,
+                                  BTN_LEFT,
+                                  LIBINPUT_BUTTON_STATE_PRESSED);
+       litest_assert_button_event(li,
+                                  BTN_LEFT,
+                                  LIBINPUT_BUTTON_STATE_RELEASED);
+
+       litest_assert_empty_queue(li);
+
+       litest_touch_down(dev, 0, 90, 5);
+       litest_touch_down(dev, 1, 10, 5);
+       litest_event(dev, EV_KEY, BTN_LEFT, 1);
+       litest_event(dev, EV_SYN, SYN_REPORT, 0);
+       litest_event(dev, EV_KEY, BTN_LEFT, 0);
+       litest_event(dev, EV_SYN, SYN_REPORT, 0);
+       litest_touch_up(dev, 0);
+       litest_touch_up(dev, 1);
+
+       litest_assert_button_event(li,
+                                  BTN_RIGHT,
+                                  LIBINPUT_BUTTON_STATE_PRESSED);
+       litest_assert_button_event(li,
+                                  BTN_RIGHT,
+                                  LIBINPUT_BUTTON_STATE_RELEASED);
+}
+END_TEST
+
+START_TEST(clickpad_topsoftbuttons_clickfinger_dev_disabled)
+{
+       struct litest_device *dev = litest_current_device();
+       struct libinput *li = dev->libinput;
+       struct litest_device *trackpoint = litest_add_device(li,
+                                                            LITEST_TRACKPOINT);
+
+       libinput_device_config_click_set_method(dev->libinput_device,
+                                               
LIBINPUT_CONFIG_CLICK_METHOD_CLICKFINGER);
+       libinput_device_config_send_events_set_mode(dev->libinput_device,
+                                                   
LIBINPUT_CONFIG_SEND_EVENTS_DISABLED);
+       litest_drain_events(li);
+
+       litest_touch_down(dev, 0, 90, 5);
+       litest_event(dev, EV_KEY, BTN_LEFT, 1);
+       litest_event(dev, EV_SYN, SYN_REPORT, 0);
+       litest_event(dev, EV_KEY, BTN_LEFT, 0);
+       litest_event(dev, EV_SYN, SYN_REPORT, 0);
+       litest_touch_up(dev, 0);
+
+       litest_assert_button_event(li,
+                                  BTN_RIGHT,
+                                  LIBINPUT_BUTTON_STATE_PRESSED);
+       litest_assert_button_event(li,
+                                  BTN_RIGHT,
+                                  LIBINPUT_BUTTON_STATE_RELEASED);
+
+       litest_assert_empty_queue(li);
+
+       litest_touch_down(dev, 0, 90, 5);
+       litest_touch_down(dev, 1, 10, 5);
+       litest_event(dev, EV_KEY, BTN_LEFT, 1);
+       litest_event(dev, EV_SYN, SYN_REPORT, 0);
+       litest_event(dev, EV_KEY, BTN_LEFT, 0);
+       litest_event(dev, EV_SYN, SYN_REPORT, 0);
+       litest_touch_up(dev, 0);
+       litest_touch_up(dev, 1);
+
+       litest_assert_button_event(li,
+                                  BTN_MIDDLE,
+                                  LIBINPUT_BUTTON_STATE_PRESSED);
+       litest_assert_button_event(li,
+                                  BTN_MIDDLE,
+                                  LIBINPUT_BUTTON_STATE_RELEASED);
+
+       litest_delete_device(trackpoint);
+}
+END_TEST
+
+
 static void
 test_2fg_scroll(struct litest_device *dev, double dx, double dy, int 
want_sleep)
 {
@@ -2333,6 +2618,12 @@ int main(int argc, char **argv) {
 
        litest_add("touchpad:clickfinger", touchpad_1fg_clickfinger, 
LITEST_CLICKPAD, LITEST_ANY);
        litest_add("touchpad:clickfinger", touchpad_2fg_clickfinger, 
LITEST_CLICKPAD, LITEST_ANY);
+       litest_add("touchpad:clickfinger", touchpad_clickfinger_to_area_method, 
LITEST_CLICKPAD, LITEST_ANY);
+       litest_add("touchpad:clickfinger",
+                  touchpad_clickfinger_to_area_method_while_down, 
LITEST_CLICKPAD, LITEST_ANY);
+       litest_add("touchpad:clickfinger", touchpad_area_to_clickfinger_method, 
LITEST_CLICKPAD, LITEST_ANY);
+       litest_add("touchpad:clickfinger",
+                  touchpad_area_to_clickfinger_method_while_down, 
LITEST_CLICKPAD, LITEST_ANY);
 
        litest_add("touchpad:click", touchpad_click_defaults_clickfinger, 
LITEST_APPLE_CLICKPAD, LITEST_ANY);
        litest_add("touchpad:click", touchpad_click_defaults_btnarea, 
LITEST_CLICKPAD, LITEST_APPLE_CLICKPAD);
@@ -2355,6 +2646,8 @@ int main(int argc, char **argv) {
        litest_add("touchpad:topsoftbuttons", clickpad_topsoftbuttons_right, 
LITEST_TOPBUTTONPAD, LITEST_ANY);
        litest_add("touchpad:topsoftbuttons", clickpad_topsoftbuttons_middle, 
LITEST_TOPBUTTONPAD, LITEST_ANY);
        litest_add("touchpad:topsoftbuttons", 
clickpad_topsoftbuttons_move_out_ignore, LITEST_TOPBUTTONPAD, LITEST_ANY);
+       litest_add("touchpad:topsoftbuttons", 
clickpad_topsoftbuttons_clickfinger, LITEST_TOPBUTTONPAD, LITEST_ANY);
+       litest_add("touchpad:topsoftbuttons", 
clickpad_topsoftbuttons_clickfinger_dev_disabled, LITEST_TOPBUTTONPAD, 
LITEST_ANY);
 
        litest_add("touchpad:scroll", touchpad_2fg_scroll, LITEST_TOUCHPAD, 
LITEST_SINGLE_TOUCH);
        litest_add("touchpad:scroll", touchpad_2fg_scroll_slow_distance, 
LITEST_TOUCHPAD, LITEST_SINGLE_TOUCH);
-- 
2.1.0

_______________________________________________
wayland-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to