Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net>
---
 test/touchpad.c | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 67 insertions(+)

diff --git a/test/touchpad.c b/test/touchpad.c
index be9c566..4651b7a 100644
--- a/test/touchpad.c
+++ b/test/touchpad.c
@@ -3924,6 +3924,72 @@ START_TEST(touchpad_tool_tripletap_touch_count)
 }
 END_TEST
 
+START_TEST(touchpad_t450_motion_drops)
+{
+       struct litest_device *dev = litest_current_device();
+       struct libinput *li = dev->libinput;
+       struct libinput_event *event;
+       struct libinput_event_pointer *ptrev;
+       int i;
+       double d;
+
+       /* In some areas on the touchpad we only get pressure events.
+        * https://bugs.freedesktop.org/show_bug.cgi?id=94379
+        */
+       litest_drain_events(li);
+
+       litest_touch_down(dev, 0, 50, 50);
+
+       for (i = 0; i < 10; i++) {
+               litest_event(dev, EV_ABS, ABS_MT_SLOT, 0);
+               litest_event(dev, EV_ABS, ABS_MT_POSITION_X, 3000 - i);
+               litest_event(dev, EV_ABS, ABS_MT_POSITION_Y, 3000 - i);
+               litest_event(dev, EV_ABS, ABS_MT_PRESSURE, 30);
+               litest_event(dev, EV_ABS, ABS_X, 3000 - i);
+               litest_event(dev, EV_ABS, ABS_Y, 3000 - i);
+               litest_event(dev, EV_ABS, ABS_PRESSURE, 30);
+               litest_event(dev, EV_SYN, SYN_REPORT, 0);
+               litest_drain_events(li);
+       }
+
+       /* several pressure-only events */
+
+       for (i = 0; i< 20; i++) {
+               litest_event(dev, EV_ABS, ABS_MT_PRESSURE, 30 + i % 2);
+               litest_event(dev, EV_ABS, ABS_PRESSURE, 30 + i % 2);
+               litest_event(dev, EV_SYN, SYN_REPORT, 0);
+               litest_assert_empty_queue(li);
+       }
+
+       /* a 100 unit jump followed by fine-grained motion, we expect small
+        * motions without the jump */
+
+       for (i = 0; i < 10; i++) {
+               litest_event(dev, EV_ABS, ABS_MT_SLOT, 0);
+               litest_event(dev, EV_ABS, ABS_MT_POSITION_X, 3100 + i);
+               litest_event(dev, EV_ABS, ABS_MT_POSITION_Y, 3100 + i);
+               litest_event(dev, EV_ABS, ABS_X, 3100 + i);
+               litest_event(dev, EV_ABS, ABS_Y, 3100 + i);
+               litest_event(dev, EV_ABS, ABS_PRESSURE, 30);
+               litest_event(dev, EV_SYN, SYN_REPORT, 0);
+               libinput_dispatch(li);
+       }
+
+       event = libinput_get_event(li);
+       ck_assert_notnull(event);
+       while (event) {
+               ptrev = litest_is_motion_event(event);
+               d = libinput_event_pointer_get_dx(ptrev);
+               litest_assert_double_lt(d, 1.0);
+               d = libinput_event_pointer_get_dy(ptrev);
+               litest_assert_double_lt(d, 1.0);
+               libinput_event_destroy(event);
+
+               event = libinput_get_event(li);
+       }
+}
+END_TEST
+
 START_TEST(touchpad_time_usec)
 {
        struct litest_device *dev = litest_current_device();
@@ -4075,6 +4141,7 @@ litest_setup_tests(void)
        litest_add("touchpad:thumb", touchpad_thumb_tap_hold_2ndfg_tap, 
LITEST_CLICKPAD, LITEST_SINGLE_TOUCH);
 
        litest_add_for_device("touchpad:bugs", 
touchpad_tool_tripletap_touch_count, LITEST_SYNAPTICS_TOPBUTTONPAD);
+       litest_add_for_device("touchpad:bugs", touchpad_t450_motion_drops, 
LITEST_SYNAPTICS_TRACKPOINT_BUTTONS);
 
        litest_add("touchpad:time", touchpad_time_usec, LITEST_TOUCHPAD, 
LITEST_ANY);
 }
-- 
2.5.0

_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to