summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorJosé Expósito <jose.exposito89@gmail.com>2021-05-27 19:20:11 +0200
committerPeter Hutterer <peter.hutterer@who-t.net>2021-06-09 01:18:58 +0000
commitc99b24e5a36c7fc6d702a1bb692ef6b5e9c1cc29 (patch)
tree2d8aeda78751a0f0bbf63483d3b2f6cbb91482f5 /test
parent8a180b52d63087646236e69b12446cab5962285a (diff)
tests: move existing gesture tests to functions to be able to reuse them
Signed-off-by: José Expósito <jose.exposito89@gmail.com>
Diffstat (limited to 'test')
-rw-r--r--test/test-gestures.c676
1 files changed, 359 insertions, 317 deletions
diff --git a/test/test-gestures.c b/test/test-gestures.c
index 21f53baf..85edcea3 100644
--- a/test/test-gestures.c
+++ b/test/test-gestures.c
@@ -34,38 +34,14 @@ enum cardinal {
N, NE, E, SE, S, SW, W, NW, NCARDINALS
};
-START_TEST(gestures_cap)
-{
- struct litest_device *dev = litest_current_device();
- struct libinput_device *device = dev->libinput_device;
-
- if (libevdev_has_property(dev->evdev, INPUT_PROP_SEMI_MT))
- ck_assert(!libinput_device_has_capability(device,
- LIBINPUT_DEVICE_CAP_GESTURE));
- else
- ck_assert(libinput_device_has_capability(device,
- LIBINPUT_DEVICE_CAP_GESTURE));
-}
-END_TEST
-
-START_TEST(gestures_nocap)
-{
- struct litest_device *dev = litest_current_device();
- struct libinput_device *device = dev->libinput_device;
-
- ck_assert(!libinput_device_has_capability(device,
- LIBINPUT_DEVICE_CAP_GESTURE));
-}
-END_TEST
-
-START_TEST(gestures_swipe_3fg)
+static void
+test_gesture_swipe_3fg(int cardinal)
{
struct litest_device *dev = litest_current_device();
struct libinput *li = dev->libinput;
struct libinput_event *event;
struct libinput_event_gesture *gevent;
double dx, dy;
- int cardinal = _i; /* ranged test */
double dir_x, dir_y;
int cardinals[NCARDINALS][2] = {
{ 0, 30 },
@@ -155,169 +131,15 @@ START_TEST(gestures_swipe_3fg)
ck_assert(!libinput_event_gesture_get_cancelled(gevent));
libinput_event_destroy(event);
}
-END_TEST
-
-START_TEST(gestures_swipe_3fg_btntool)
-{
- struct litest_device *dev = litest_current_device();
- struct libinput *li = dev->libinput;
- struct libinput_event *event;
- struct libinput_event_gesture *gevent;
- double dx, dy;
- int cardinal = _i; /* ranged test */
- double dir_x, dir_y;
- int cardinals[NCARDINALS][2] = {
- { 0, 30 },
- { 30, 30 },
- { 30, 0 },
- { 30, -30 },
- { 0, -30 },
- { -30, -30 },
- { -30, 0 },
- { -30, 30 },
- };
-
- if (litest_slot_count(dev) > 2 ||
- !libevdev_has_event_code(dev->evdev, EV_KEY, BTN_TOOL_TRIPLETAP) ||
- !libinput_device_has_capability(dev->libinput_device,
- LIBINPUT_DEVICE_CAP_GESTURE))
- return;
-
- dir_x = cardinals[cardinal][0];
- dir_y = cardinals[cardinal][1];
-
- litest_drain_events(li);
-
- litest_touch_down(dev, 0, 40, 40);
- litest_touch_down(dev, 1, 50, 40);
- litest_event(dev, EV_KEY, BTN_TOOL_DOUBLETAP, 0);
- litest_event(dev, EV_KEY, BTN_TOOL_TRIPLETAP, 1);
- litest_event(dev, EV_SYN, SYN_REPORT, 0);
-
- libinput_dispatch(li);
- litest_touch_move_two_touches(dev, 40, 40, 50, 40, dir_x, dir_y, 10);
- libinput_dispatch(li);
-
- event = libinput_get_event(li);
- gevent = litest_is_gesture_event(event,
- LIBINPUT_EVENT_GESTURE_SWIPE_BEGIN,
- 3);
- dx = libinput_event_gesture_get_dx(gevent);
- dy = libinput_event_gesture_get_dy(gevent);
- ck_assert(dx == 0.0);
- ck_assert(dy == 0.0);
- libinput_event_destroy(event);
-
- while ((event = libinput_get_event(li)) != NULL) {
- gevent = litest_is_gesture_event(event,
- LIBINPUT_EVENT_GESTURE_SWIPE_UPDATE,
- 3);
-
- dx = libinput_event_gesture_get_dx(gevent);
- dy = libinput_event_gesture_get_dy(gevent);
- if (dir_x == 0.0)
- ck_assert(dx == 0.0);
- else if (dir_x < 0.0)
- ck_assert(dx < 0.0);
- else if (dir_x > 0.0)
- ck_assert(dx > 0.0);
-
- if (dir_y == 0.0)
- ck_assert(dy == 0.0);
- else if (dir_y < 0.0)
- ck_assert(dy < 0.0);
- else if (dir_y > 0.0)
- ck_assert(dy > 0.0);
-
- dx = libinput_event_gesture_get_dx_unaccelerated(gevent);
- dy = libinput_event_gesture_get_dy_unaccelerated(gevent);
- if (dir_x == 0.0)
- ck_assert(dx == 0.0);
- else if (dir_x < 0.0)
- ck_assert(dx < 0.0);
- else if (dir_x > 0.0)
- ck_assert(dx > 0.0);
-
- if (dir_y == 0.0)
- ck_assert(dy == 0.0);
- else if (dir_y < 0.0)
- ck_assert(dy < 0.0);
- else if (dir_y > 0.0)
- ck_assert(dy > 0.0);
-
- libinput_event_destroy(event);
- }
-
- litest_touch_up(dev, 0);
- litest_touch_up(dev, 1);
- libinput_dispatch(li);
- event = libinput_get_event(li);
- gevent = litest_is_gesture_event(event,
- LIBINPUT_EVENT_GESTURE_SWIPE_END,
- 3);
- ck_assert(!libinput_event_gesture_get_cancelled(gevent));
- libinput_event_destroy(event);
-}
-END_TEST
-
-START_TEST(gestures_swipe_3fg_btntool_pinch_like)
-{
- struct litest_device *dev = litest_current_device();
- struct libinput *li = dev->libinput;
- struct libinput_event *event;
- struct libinput_event_gesture *gevent;
-
- if (litest_slot_count(dev) > 2 ||
- !libevdev_has_event_code(dev->evdev, EV_KEY, BTN_TOOL_TRIPLETAP) ||
- !libinput_device_has_capability(dev->libinput_device,
- LIBINPUT_DEVICE_CAP_GESTURE))
- return;
-
- litest_drain_events(li);
-
- /* Technically a pinch position + pinch movement, but expect swipe
- * for nfingers > nslots */
- litest_touch_down(dev, 0, 20, 60);
- litest_touch_down(dev, 1, 50, 20);
- litest_event(dev, EV_KEY, BTN_TOOL_DOUBLETAP, 0);
- litest_event(dev, EV_KEY, BTN_TOOL_TRIPLETAP, 1);
- litest_event(dev, EV_SYN, SYN_REPORT, 0);
-
- libinput_dispatch(li);
- litest_touch_move_to(dev, 0, 20, 60, 10, 80, 20);
- libinput_dispatch(li);
-
- event = libinput_get_event(li);
- litest_is_gesture_event(event, LIBINPUT_EVENT_GESTURE_SWIPE_BEGIN, 3);
- libinput_event_destroy(event);
-
- while ((event = libinput_get_event(li)) != NULL) {
- litest_is_gesture_event(event,
- LIBINPUT_EVENT_GESTURE_SWIPE_UPDATE,
- 3);
- libinput_event_destroy(event);
- }
-
- litest_touch_up(dev, 0);
- litest_touch_up(dev, 1);
- libinput_dispatch(li);
- event = libinput_get_event(li);
- gevent = litest_is_gesture_event(event,
- LIBINPUT_EVENT_GESTURE_SWIPE_END,
- 3);
- ck_assert(!libinput_event_gesture_get_cancelled(gevent));
- libinput_event_destroy(event);
-}
-END_TEST
-START_TEST(gestures_swipe_4fg)
+static void
+test_gesture_swipe_4fg(int cardinal)
{
struct litest_device *dev = litest_current_device();
struct libinput *li = dev->libinput;
struct libinput_event *event;
struct libinput_event_gesture *gevent;
double dx, dy;
- int cardinal = _i; /* ranged test */
double dir_x, dir_y;
int cardinals[NCARDINALS][2] = {
{ 0, 3 },
@@ -435,119 +257,15 @@ START_TEST(gestures_swipe_4fg)
ck_assert(!libinput_event_gesture_get_cancelled(gevent));
libinput_event_destroy(event);
}
-END_TEST
-
-START_TEST(gestures_swipe_4fg_btntool)
-{
- struct litest_device *dev = litest_current_device();
- struct libinput *li = dev->libinput;
- struct libinput_event *event;
- struct libinput_event_gesture *gevent;
- double dx, dy;
- int cardinal = _i; /* ranged test */
- double dir_x, dir_y;
- int cardinals[NCARDINALS][2] = {
- { 0, 30 },
- { 30, 30 },
- { 30, 0 },
- { 30, -30 },
- { 0, -30 },
- { -30, -30 },
- { -30, 0 },
- { -30, 30 },
- };
-
- if (litest_slot_count(dev) > 2 ||
- !libevdev_has_event_code(dev->evdev, EV_KEY, BTN_TOOL_QUADTAP) ||
- !libinput_device_has_capability(dev->libinput_device,
- LIBINPUT_DEVICE_CAP_GESTURE))
- return;
-
- dir_x = cardinals[cardinal][0];
- dir_y = cardinals[cardinal][1];
-
- litest_drain_events(li);
-
- litest_touch_down(dev, 0, 40, 40);
- litest_touch_down(dev, 1, 50, 40);
- litest_event(dev, EV_KEY, BTN_TOOL_DOUBLETAP, 0);
- litest_event(dev, EV_KEY, BTN_TOOL_QUADTAP, 1);
- litest_event(dev, EV_SYN, SYN_REPORT, 0);
-
- libinput_dispatch(li);
- litest_touch_move_two_touches(dev, 40, 40, 50, 40, dir_x, dir_y, 10);
- libinput_dispatch(li);
-
- event = libinput_get_event(li);
- gevent = litest_is_gesture_event(event,
- LIBINPUT_EVENT_GESTURE_SWIPE_BEGIN,
- 4);
- dx = libinput_event_gesture_get_dx(gevent);
- dy = libinput_event_gesture_get_dy(gevent);
- ck_assert(dx == 0.0);
- ck_assert(dy == 0.0);
- libinput_event_destroy(event);
-
- while ((event = libinput_get_event(li)) != NULL) {
- gevent = litest_is_gesture_event(event,
- LIBINPUT_EVENT_GESTURE_SWIPE_UPDATE,
- 4);
-
- dx = libinput_event_gesture_get_dx(gevent);
- dy = libinput_event_gesture_get_dy(gevent);
- if (dir_x == 0.0)
- ck_assert(dx == 0.0);
- else if (dir_x < 0.0)
- ck_assert(dx < 0.0);
- else if (dir_x > 0.0)
- ck_assert(dx > 0.0);
-
- if (dir_y == 0.0)
- ck_assert(dy == 0.0);
- else if (dir_y < 0.0)
- ck_assert(dy < 0.0);
- else if (dir_y > 0.0)
- ck_assert(dy > 0.0);
-
- dx = libinput_event_gesture_get_dx_unaccelerated(gevent);
- dy = libinput_event_gesture_get_dy_unaccelerated(gevent);
- if (dir_x == 0.0)
- ck_assert(dx == 0.0);
- else if (dir_x < 0.0)
- ck_assert(dx < 0.0);
- else if (dir_x > 0.0)
- ck_assert(dx > 0.0);
-
- if (dir_y == 0.0)
- ck_assert(dy == 0.0);
- else if (dir_y < 0.0)
- ck_assert(dy < 0.0);
- else if (dir_y > 0.0)
- ck_assert(dy > 0.0);
-
- libinput_event_destroy(event);
- }
-
- litest_touch_up(dev, 0);
- litest_touch_up(dev, 1);
- libinput_dispatch(li);
- event = libinput_get_event(li);
- gevent = litest_is_gesture_event(event,
- LIBINPUT_EVENT_GESTURE_SWIPE_END,
- 4);
- ck_assert(!libinput_event_gesture_get_cancelled(gevent));
- libinput_event_destroy(event);
-}
-END_TEST
-START_TEST(gestures_pinch)
+static void
+test_gesture_pinch_2fg(int cardinal)
{
struct litest_device *dev = litest_current_device();
struct libinput *li = dev->libinput;
struct libinput_event *event;
struct libinput_event_gesture *gevent;
double dx, dy;
- int cardinal = _i; /* ranged test */
double dir_x, dir_y;
int i;
double scale, oldscale;
@@ -650,16 +368,15 @@ START_TEST(gestures_pinch)
ck_assert(!libinput_event_gesture_get_cancelled(gevent));
libinput_event_destroy(event);
}
-END_TEST
-START_TEST(gestures_pinch_3fg)
+static void
+test_gesture_pinch_3fg(int cardinal)
{
struct litest_device *dev = litest_current_device();
struct libinput *li = dev->libinput;
struct libinput_event *event;
struct libinput_event_gesture *gevent;
double dx, dy;
- int cardinal = _i; /* ranged test */
double dir_x, dir_y;
int i;
double scale, oldscale;
@@ -755,16 +472,15 @@ START_TEST(gestures_pinch_3fg)
ck_assert(!libinput_event_gesture_get_cancelled(gevent));
libinput_event_destroy(event);
}
-END_TEST
-START_TEST(gestures_pinch_4fg)
+static void
+test_gesture_pinch_4fg(int cardinal)
{
struct litest_device *dev = litest_current_device();
struct libinput *li = dev->libinput;
struct libinput_event *event;
struct libinput_event_gesture *gevent;
double dx, dy;
- int cardinal = _i; /* ranged test */
double dir_x, dir_y;
int i;
double scale, oldscale;
@@ -866,16 +582,15 @@ START_TEST(gestures_pinch_4fg)
ck_assert(!libinput_event_gesture_get_cancelled(gevent));
libinput_event_destroy(event);
}
-END_TEST
-START_TEST(gestures_spread)
+static void
+test_gesture_spread(int cardinal)
{
struct litest_device *dev = litest_current_device();
struct libinput *li = dev->libinput;
struct libinput_event *event;
struct libinput_event_gesture *gevent;
double dx, dy;
- int cardinal = _i; /* ranged test */
double dir_x, dir_y;
int i;
double scale, oldscale;
@@ -976,63 +691,390 @@ START_TEST(gestures_spread)
ck_assert(!libinput_event_gesture_get_cancelled(gevent));
libinput_event_destroy(event);
}
+
+static void
+test_gesture_3fg_buttonarea_scroll(void)
+{
+ struct litest_device *dev = litest_current_device();
+ struct libinput *li = dev->libinput;
+
+ if (litest_slot_count(dev) < 3)
+ return;
+
+ litest_enable_buttonareas(dev);
+ litest_enable_2fg_scroll(dev);
+ litest_drain_events(li);
+
+ litest_touch_down(dev, 0, 40, 20);
+ litest_touch_down(dev, 1, 30, 20);
+ /* third finger in btnarea */
+ litest_touch_down(dev, 2, 50, 99);
+ libinput_dispatch(li);
+ litest_touch_move_two_touches(dev, 40, 20, 30, 20, 0, 40, 10);
+
+ litest_touch_up(dev, 0);
+ litest_touch_up(dev, 1);
+ libinput_dispatch(li);
+ litest_assert_scroll(li, LIBINPUT_POINTER_AXIS_SCROLL_VERTICAL, 4);
+}
+
+START_TEST(gestures_cap)
+{
+ struct litest_device *dev = litest_current_device();
+ struct libinput_device *device = dev->libinput_device;
+
+ if (libevdev_has_property(dev->evdev, INPUT_PROP_SEMI_MT))
+ ck_assert(!libinput_device_has_capability(device,
+ LIBINPUT_DEVICE_CAP_GESTURE));
+ else
+ ck_assert(libinput_device_has_capability(device,
+ LIBINPUT_DEVICE_CAP_GESTURE));
+}
END_TEST
-START_TEST(gestures_time_usec)
+START_TEST(gestures_nocap)
+{
+ struct litest_device *dev = litest_current_device();
+ struct libinput_device *device = dev->libinput_device;
+
+ ck_assert(!libinput_device_has_capability(device,
+ LIBINPUT_DEVICE_CAP_GESTURE));
+}
+END_TEST
+
+START_TEST(gestures_swipe_3fg)
+{
+ int cardinal = _i; /* ranged test */
+ test_gesture_swipe_3fg(cardinal);
+}
+END_TEST
+
+START_TEST(gestures_swipe_3fg_btntool)
{
struct litest_device *dev = litest_current_device();
struct libinput *li = dev->libinput;
struct libinput_event *event;
struct libinput_event_gesture *gevent;
- uint64_t time_usec;
+ double dx, dy;
+ int cardinal = _i; /* ranged test */
+ double dir_x, dir_y;
+ int cardinals[NCARDINALS][2] = {
+ { 0, 30 },
+ { 30, 30 },
+ { 30, 0 },
+ { 30, -30 },
+ { 0, -30 },
+ { -30, -30 },
+ { -30, 0 },
+ { -30, 30 },
+ };
- if (litest_slot_count(dev) < 3)
+ if (litest_slot_count(dev) > 2 ||
+ !libevdev_has_event_code(dev->evdev, EV_KEY, BTN_TOOL_TRIPLETAP) ||
+ !libinput_device_has_capability(dev->libinput_device,
+ LIBINPUT_DEVICE_CAP_GESTURE))
return;
+ dir_x = cardinals[cardinal][0];
+ dir_y = cardinals[cardinal][1];
+
litest_drain_events(li);
litest_touch_down(dev, 0, 40, 40);
litest_touch_down(dev, 1, 50, 40);
- litest_touch_down(dev, 2, 60, 40);
- libinput_dispatch(li);
- litest_touch_move_three_touches(dev, 40, 40, 50, 40, 60, 40, 0, 30,
- 30);
+ litest_event(dev, EV_KEY, BTN_TOOL_DOUBLETAP, 0);
+ litest_event(dev, EV_KEY, BTN_TOOL_TRIPLETAP, 1);
+ litest_event(dev, EV_SYN, SYN_REPORT, 0);
libinput_dispatch(li);
+ litest_touch_move_two_touches(dev, 40, 40, 50, 40, dir_x, dir_y, 10);
+ libinput_dispatch(li);
+
event = libinput_get_event(li);
gevent = litest_is_gesture_event(event,
LIBINPUT_EVENT_GESTURE_SWIPE_BEGIN,
3);
- time_usec = libinput_event_gesture_get_time_usec(gevent);
- ck_assert_int_eq(libinput_event_gesture_get_time(gevent),
- (uint32_t) (time_usec / 1000));
+ dx = libinput_event_gesture_get_dx(gevent);
+ dy = libinput_event_gesture_get_dy(gevent);
+ ck_assert(dx == 0.0);
+ ck_assert(dy == 0.0);
+ libinput_event_destroy(event);
+
+ while ((event = libinput_get_event(li)) != NULL) {
+ gevent = litest_is_gesture_event(event,
+ LIBINPUT_EVENT_GESTURE_SWIPE_UPDATE,
+ 3);
+
+ dx = libinput_event_gesture_get_dx(gevent);
+ dy = libinput_event_gesture_get_dy(gevent);
+ if (dir_x == 0.0)
+ ck_assert(dx == 0.0);
+ else if (dir_x < 0.0)
+ ck_assert(dx < 0.0);
+ else if (dir_x > 0.0)
+ ck_assert(dx > 0.0);
+
+ if (dir_y == 0.0)
+ ck_assert(dy == 0.0);
+ else if (dir_y < 0.0)
+ ck_assert(dy < 0.0);
+ else if (dir_y > 0.0)
+ ck_assert(dy > 0.0);
+
+ dx = libinput_event_gesture_get_dx_unaccelerated(gevent);
+ dy = libinput_event_gesture_get_dy_unaccelerated(gevent);
+ if (dir_x == 0.0)
+ ck_assert(dx == 0.0);
+ else if (dir_x < 0.0)
+ ck_assert(dx < 0.0);
+ else if (dir_x > 0.0)
+ ck_assert(dx > 0.0);
+
+ if (dir_y == 0.0)
+ ck_assert(dy == 0.0);
+ else if (dir_y < 0.0)
+ ck_assert(dy < 0.0);
+ else if (dir_y > 0.0)
+ ck_assert(dy > 0.0);
+
+ libinput_event_destroy(event);
+ }
+
+ litest_touch_up(dev, 0);
+ litest_touch_up(dev, 1);
+ libinput_dispatch(li);
+ event = libinput_get_event(li);
+ gevent = litest_is_gesture_event(event,
+ LIBINPUT_EVENT_GESTURE_SWIPE_END,
+ 3);
+ ck_assert(!libinput_event_gesture_get_cancelled(gevent));
libinput_event_destroy(event);
}
END_TEST
-START_TEST(gestures_3fg_buttonarea_scroll)
+START_TEST(gestures_swipe_3fg_btntool_pinch_like)
{
struct litest_device *dev = litest_current_device();
struct libinput *li = dev->libinput;
+ struct libinput_event *event;
+ struct libinput_event_gesture *gevent;
- if (litest_slot_count(dev) < 3)
+ if (litest_slot_count(dev) > 2 ||
+ !libevdev_has_event_code(dev->evdev, EV_KEY, BTN_TOOL_TRIPLETAP) ||
+ !libinput_device_has_capability(dev->libinput_device,
+ LIBINPUT_DEVICE_CAP_GESTURE))
return;
- litest_enable_buttonareas(dev);
- litest_enable_2fg_scroll(dev);
litest_drain_events(li);
- litest_touch_down(dev, 0, 40, 20);
- litest_touch_down(dev, 1, 30, 20);
- /* third finger in btnarea */
- litest_touch_down(dev, 2, 50, 99);
+ /* Technically a pinch position + pinch movement, but expect swipe
+ * for nfingers > nslots */
+ litest_touch_down(dev, 0, 20, 60);
+ litest_touch_down(dev, 1, 50, 20);
+ litest_event(dev, EV_KEY, BTN_TOOL_DOUBLETAP, 0);
+ litest_event(dev, EV_KEY, BTN_TOOL_TRIPLETAP, 1);
+ litest_event(dev, EV_SYN, SYN_REPORT, 0);
+
+ libinput_dispatch(li);
+ litest_touch_move_to(dev, 0, 20, 60, 10, 80, 20);
libinput_dispatch(li);
- litest_touch_move_two_touches(dev, 40, 20, 30, 20, 0, 40, 10);
+
+ event = libinput_get_event(li);
+ litest_is_gesture_event(event, LIBINPUT_EVENT_GESTURE_SWIPE_BEGIN, 3);
+ libinput_event_destroy(event);
+
+ while ((event = libinput_get_event(li)) != NULL) {
+ litest_is_gesture_event(event,
+ LIBINPUT_EVENT_GESTURE_SWIPE_UPDATE,
+ 3);
+ libinput_event_destroy(event);
+ }
litest_touch_up(dev, 0);
litest_touch_up(dev, 1);
libinput_dispatch(li);
- litest_assert_scroll(li, LIBINPUT_POINTER_AXIS_SCROLL_VERTICAL, 4);
+ event = libinput_get_event(li);
+ gevent = litest_is_gesture_event(event,
+ LIBINPUT_EVENT_GESTURE_SWIPE_END,
+ 3);
+ ck_assert(!libinput_event_gesture_get_cancelled(gevent));
+ libinput_event_destroy(event);
+}
+END_TEST
+
+START_TEST(gestures_swipe_4fg)
+{
+ int cardinal = _i; /* ranged test */
+ test_gesture_swipe_4fg(cardinal);
+}
+END_TEST
+
+START_TEST(gestures_swipe_4fg_btntool)
+{
+ struct litest_device *dev = litest_current_device();
+ struct libinput *li = dev->libinput;
+ struct libinput_event *event;
+ struct libinput_event_gesture *gevent;
+ double dx, dy;
+ int cardinal = _i; /* ranged test */
+ double dir_x, dir_y;
+ int cardinals[NCARDINALS][2] = {
+ { 0, 30 },
+ { 30, 30 },
+ { 30, 0 },
+ { 30, -30 },
+ { 0, -30 },
+ { -30, -30 },
+ { -30, 0 },
+ { -30, 30 },
+ };
+
+ if (litest_slot_count(dev) > 2 ||
+ !libevdev_has_event_code(dev->evdev, EV_KEY, BTN_TOOL_QUADTAP) ||
+ !libinput_device_has_capability(dev->libinput_device,
+ LIBINPUT_DEVICE_CAP_GESTURE))
+ return;
+
+ dir_x = cardinals[cardinal][0];
+ dir_y = cardinals[cardinal][1];
+
+ litest_drain_events(li);
+
+ litest_touch_down(dev, 0, 40, 40);
+ litest_touch_down(dev, 1, 50, 40);
+ litest_event(dev, EV_KEY, BTN_TOOL_DOUBLETAP, 0);
+ litest_event(dev, EV_KEY, BTN_TOOL_QUADTAP, 1);
+ litest_event(dev, EV_SYN, SYN_REPORT, 0);
+
+ libinput_dispatch(li);
+ litest_touch_move_two_touches(dev, 40, 40, 50, 40, dir_x, dir_y, 10);
+ libinput_dispatch(li);
+
+ event = libinput_get_event(li);
+ gevent = litest_is_gesture_event(event,
+ LIBINPUT_EVENT_GESTURE_SWIPE_BEGIN,
+ 4);
+ dx = libinput_event_gesture_get_dx(gevent);
+ dy = libinput_event_gesture_get_dy(gevent);
+ ck_assert(dx == 0.0);
+ ck_assert(dy == 0.0);
+ libinput_event_destroy(event);
+
+ while ((event = libinput_get_event(li)) != NULL) {
+ gevent = litest_is_gesture_event(event,
+ LIBINPUT_EVENT_GESTURE_SWIPE_UPDATE,
+ 4);
+
+ dx = libinput_event_gesture_get_dx(gevent);
+ dy = libinput_event_gesture_get_dy(gevent);
+ if (dir_x == 0.0)
+ ck_assert(dx == 0.0);
+ else if (dir_x < 0.0)
+ ck_assert(dx < 0.0);
+ else if (dir_x > 0.0)
+ ck_assert(dx > 0.0);
+
+ if (dir_y == 0.0)
+ ck_assert(dy == 0.0);
+ else if (dir_y < 0.0)
+ ck_assert(dy < 0.0);
+ else if (dir_y > 0.0)
+ ck_assert(dy > 0.0);
+
+ dx = libinput_event_gesture_get_dx_unaccelerated(gevent);
+ dy = libinput_event_gesture_get_dy_unaccelerated(gevent);
+ if (dir_x == 0.0)
+ ck_assert(dx == 0.0);
+ else if (dir_x < 0.0)
+ ck_assert(dx < 0.0);
+ else if (dir_x > 0.0)
+ ck_assert(dx > 0.0);
+
+ if (dir_y == 0.0)
+ ck_assert(dy == 0.0);
+ else if (dir_y < 0.0)
+ ck_assert(dy < 0.0);
+ else if (dir_y > 0.0)
+ ck_assert(dy > 0.0);
+
+ libinput_event_destroy(event);
+ }
+
+ litest_touch_up(dev, 0);
+ litest_touch_up(dev, 1);
+ libinput_dispatch(li);
+ event = libinput_get_event(li);
+ gevent = litest_is_gesture_event(event,
+ LIBINPUT_EVENT_GESTURE_SWIPE_END,
+ 4);
+ ck_assert(!libinput_event_gesture_get_cancelled(gevent));
+ libinput_event_destroy(event);
+}
+END_TEST
+
+START_TEST(gestures_pinch)
+{
+ int cardinal = _i; /* ranged test */
+ test_gesture_pinch_2fg(cardinal);
+}
+END_TEST
+
+START_TEST(gestures_pinch_3fg)
+{
+ int cardinal = _i; /* ranged test */
+ test_gesture_pinch_3fg(cardinal);
+}
+END_TEST
+
+START_TEST(gestures_pinch_4fg)
+{
+ int cardinal = _i; /* ranged test */
+ test_gesture_pinch_4fg(cardinal);
+}
+END_TEST
+
+START_TEST(gestures_spread)
+{
+ int cardinal = _i; /* ranged test */
+ test_gesture_spread(cardinal);
+}
+END_TEST
+
+START_TEST(gestures_time_usec)
+{
+ struct litest_device *dev = litest_current_device();
+ struct libinput *li = dev->libinput;
+ struct libinput_event *event;
+ struct libinput_event_gesture *gevent;
+ uint64_t time_usec;
+
+ if (litest_slot_count(dev) < 3)
+ return;
+
+ litest_drain_events(li);
+
+ litest_touch_down(dev, 0, 40, 40);
+ litest_touch_down(dev, 1, 50, 40);
+ litest_touch_down(dev, 2, 60, 40);
+ libinput_dispatch(li);
+ litest_touch_move_three_touches(dev, 40, 40, 50, 40, 60, 40, 0, 30,
+ 30);
+
+ libinput_dispatch(li);
+ event = libinput_get_event(li);
+ gevent = litest_is_gesture_event(event,
+ LIBINPUT_EVENT_GESTURE_SWIPE_BEGIN,
+ 3);
+ time_usec = libinput_event_gesture_get_time_usec(gevent);
+ ck_assert_int_eq(libinput_event_gesture_get_time(gevent),
+ (uint32_t) (time_usec / 1000));
+ libinput_event_destroy(event);
+}
+END_TEST
+
+START_TEST(gestures_3fg_buttonarea_scroll)
+{
+ test_gesture_3fg_buttonarea_scroll();
}
END_TEST