summaryrefslogtreecommitdiff
path: root/test/test-touch.c
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2017-08-28 12:03:54 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2017-08-28 14:25:17 +1000
commit32a671edcf35c6a5450fd850411ec6384588f397 (patch)
tree634d6697ee78ef3e1f69fbd7e167cc7f74967208 /test/test-touch.c
parent7d97bb008789448cdd80eceac0d4072ce05e4006 (diff)
test: add a test for removing a touch device with a finger still down
https://bugs.freedesktop.org/show_bug.cgi?id=102385 Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Diffstat (limited to 'test/test-touch.c')
-rw-r--r--test/test-touch.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/test/test-touch.c b/test/test-touch.c
index c9f78d11..b3a6d0a0 100644
--- a/test/test-touch.c
+++ b/test/test-touch.c
@@ -911,6 +911,40 @@ START_TEST(touch_fuzz)
}
END_TEST
+START_TEST(touch_release_on_unplug)
+{
+ struct litest_device *dev;
+ struct libinput *li;
+ struct libinput_event *ev;
+
+ li = litest_create_context();
+ dev = litest_add_device(li, LITEST_GENERIC_MULTITOUCH_SCREEN);
+ litest_drain_events(li);
+
+ litest_touch_down(dev, 0, 50, 50);
+ litest_touch_move_to(dev, 0, 50, 50, 70, 70, 10, 1);
+ litest_drain_events(li);
+
+ /* Touch is still down when device is removed, espect a release */
+ litest_delete_device(dev);
+ libinput_dispatch(li);
+
+ ev = libinput_get_event(li);
+ litest_is_touch_event(ev, LIBINPUT_EVENT_TOUCH_UP);
+ libinput_event_destroy(ev);
+
+ ev = libinput_get_event(li);
+ litest_is_touch_event(ev, LIBINPUT_EVENT_TOUCH_FRAME);
+ libinput_event_destroy(ev);
+
+ ev = libinput_get_event(li);
+ litest_assert_event_type(ev, LIBINPUT_EVENT_DEVICE_REMOVED);
+ libinput_event_destroy(ev);
+
+ libinput_unref(li);
+}
+END_TEST
+
void
litest_setup_tests_touch(void)
{
@@ -944,4 +978,6 @@ litest_setup_tests_touch(void)
litest_add("touch:time", touch_time_usec, LITEST_TOUCH, LITEST_TOUCHPAD);
litest_add_for_device("touch:fuzz", touch_fuzz, LITEST_MULTITOUCH_FUZZ_SCREEN);
+
+ litest_add_no_device("touch:release", touch_release_on_unplug);
}