[RFC libinput 2/3] litest: Add a litest_touch_move_two_touches helper function

Hans de Goede hdegoede at redhat.com
Thu Mar 12 12:05:25 PDT 2015


Currently all the touchpad 2fg tests move the 2 fingers 1 at a time,
causing a finger motion which looks more like a pinch zoom in followed by
a zoom outthen an actual 2fg scroll gesture. Add a helper function which
can move 2 fingers at the same time (more or less), and use this were relevant.

Signed-off-by: Hans de Goede <hdegoede at redhat.com>
---
 test/litest.c   | 22 ++++++++++++++++++++++
 test/litest.h   |  5 +++++
 test/touchpad.c | 17 ++++++-----------
 3 files changed, 33 insertions(+), 11 deletions(-)

diff --git a/test/litest.c b/test/litest.c
index 3646446..fc4b1fb 100644
--- a/test/litest.c
+++ b/test/litest.c
@@ -904,6 +904,28 @@ litest_touch_move_to(struct litest_device *d,
 }
 
 void
+litest_touch_move_two_touches(struct litest_device *d,
+			      double x0, double y0,
+			      double x1, double y1,
+			      double dx, double dy,
+			      int steps, int sleep_ms)
+{
+	for (int i = 0; i < steps - 1; i++) {
+		litest_touch_move(d, 0, x0 + dx / steps * i,
+					y0 + dy / steps * i);
+		litest_touch_move(d, 1, x1 + dx / steps * i,
+					y1 + dy / steps * i);
+		if (sleep_ms) {
+			libinput_dispatch(d->libinput);
+			msleep(sleep_ms);
+			libinput_dispatch(d->libinput);
+		}
+	}
+	litest_touch_move(d, 0, x0 + dx, y0 + dy);
+	litest_touch_move(d, 1, x1 + dx, y1 + dy);
+}
+
+void
 litest_button_click(struct litest_device *d, unsigned int button, bool is_press)
 {
 
diff --git a/test/litest.h b/test/litest.h
index e85b511..a48daf4 100644
--- a/test/litest.h
+++ b/test/litest.h
@@ -150,6 +150,11 @@ void litest_touch_move_to(struct litest_device *d,
 			  double x_from, double y_from,
 			  double x_to, double y_to,
 			  int steps, int sleep_ms);
+void litest_touch_move_two_touches(struct litest_device *d,
+				   double x0, double y0,
+				   double x1, double y1,
+				   double dx, double dy,
+				   int steps, int sleep_ms);
 void litest_button_click(struct litest_device *d,
 			 unsigned int button,
 			 bool is_press);
diff --git a/test/touchpad.c b/test/touchpad.c
index 36fe6e4..140d770 100644
--- a/test/touchpad.c
+++ b/test/touchpad.c
@@ -1820,8 +1820,7 @@ test_2fg_scroll(struct litest_device *dev, double dx, double dy, int want_sleep)
 	litest_touch_down(dev, 0, 47, 50);
 	litest_touch_down(dev, 1, 53, 50);
 
-	litest_touch_move_to(dev, 0, 47, 50, 47 + dx, 50 + dy, 5, 0);
-	litest_touch_move_to(dev, 1, 53, 50, 53 + dx, 50 + dy, 5, 0);
+	litest_touch_move_two_touches(dev, 47, 50, 53, 50, dx, dy, 5, 0);
 
 	/* Avoid a small scroll being seen as a tap */
 	if (want_sleep) {
@@ -1880,8 +1879,7 @@ START_TEST(touchpad_2fg_scroll_slow_distance)
 
 	litest_touch_down(dev, 0, 20, 30);
 	litest_touch_down(dev, 1, 40, 30);
-	litest_touch_move_to(dev, 0, 20, 30, 20, 30 + y_move, 70, 10);
-	litest_touch_move_to(dev, 1, 40, 30, 40, 30 + y_move, 70, 10);
+	litest_touch_move_two_touches(dev, 20, 30, 40, 30, 0, y_move, 70, 10);
 	litest_touch_up(dev, 1);
 	litest_touch_up(dev, 0);
 	libinput_dispatch(li);
@@ -1951,8 +1949,7 @@ START_TEST(touchpad_2fg_scroll_return_to_motion)
 
 	/* 2fg scroll */
 	litest_touch_down(dev, 1, 53, 50);
-	litest_touch_move_to(dev, 0, 47, 50, 47, 70, 5, 0);
-	litest_touch_move_to(dev, 1, 53, 50, 53, 70, 5, 0);
+	litest_touch_move_two_touches(dev, 47, 50, 53, 50, 0, 20, 5, 0);
 	litest_touch_up(dev, 1);
 	libinput_dispatch(li);
 	litest_timeout_finger_switch();
@@ -1963,9 +1960,8 @@ START_TEST(touchpad_2fg_scroll_return_to_motion)
 	litest_assert_only_typed_events(li, LIBINPUT_EVENT_POINTER_MOTION);
 
 	/* back to 2fg scroll, lifting the other finger */
-	litest_touch_down(dev, 1, 50, 50);
-	litest_touch_move_to(dev, 0, 47, 50, 47, 70, 5, 0);
-	litest_touch_move_to(dev, 1, 53, 50, 53, 70, 5, 0);
+	litest_touch_down(dev, 1, 53, 50);
+	litest_touch_move_two_touches(dev, 47, 50, 53, 50, 0, 20, 5, 0);
 	litest_touch_up(dev, 0);
 	libinput_dispatch(li);
 	litest_timeout_finger_switch();
@@ -3273,8 +3269,7 @@ START_TEST(touchpad_trackpoint_buttons_2fg_scroll)
 
 	litest_touch_down(touchpad, 0, 40, 70);
 	litest_touch_down(touchpad, 1, 60, 70);
-	litest_touch_move_to(touchpad, 0, 40, 70, 40, 30, 10, 0);
-	litest_touch_move_to(touchpad, 1, 60, 70, 60, 30, 10, 0);
+	litest_touch_move_two_touches(touchpad, 40, 70, 60, 70, 0, -40, 10, 0);
 
 	libinput_dispatch(li);
 	litest_wait_for_event(li);
-- 
2.3.1



More information about the wayland-devel mailing list