tablet: tighten the test for tablet button releases on proximity out

Make sure we check the expected sequence more stringent and change the x/y
coordinates on prox in so the kernel doesn't filter them.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
Peter Hutterer 2019-04-08 10:17:23 +10:00
parent 2cdda41a3b
commit f45a8c9ed7

View file

@ -1050,19 +1050,20 @@ START_TEST(proximity_out_clear_buttons)
struct libinput_event_tablet_tool *tablet_event; struct libinput_event_tablet_tool *tablet_event;
struct libinput_event *event; struct libinput_event *event;
uint32_t button; uint32_t button;
struct axis_replacement axes[] = { struct axis_replacement axes[] = {
{ ABS_DISTANCE, 10 }, { ABS_DISTANCE, 10 },
{ ABS_PRESSURE, 0 }, { ABS_PRESSURE, 0 },
{ -1, -1 } { -1, -1 }
}; };
bool have_proximity = false;
double x = 50, y = 50;
litest_drain_events(li); litest_drain_events(li);
/* Test that proximity out events send button releases for any currently /* Test that proximity out events send button releases for any currently
* pressed stylus buttons * pressed stylus buttons
*/ */
for (button = BTN_TOUCH + 1; button <= BTN_STYLUS2; button++) { for (button = BTN_STYLUS; button <= BTN_STYLUS2; button++) {
bool button_released = false; bool button_released = false;
uint32_t event_button = 0; uint32_t event_button = 0;
enum libinput_button_state state; enum libinput_button_state state;
@ -1070,7 +1071,9 @@ START_TEST(proximity_out_clear_buttons)
if (!libevdev_has_event_code(dev->evdev, EV_KEY, button)) if (!libevdev_has_event_code(dev->evdev, EV_KEY, button))
continue; continue;
litest_tablet_proximity_in(dev, 10, 10, axes); litest_tablet_proximity_in(dev, x++, y++, axes);
litest_drain_events(li);
litest_event(dev, EV_KEY, button, 1); litest_event(dev, EV_KEY, button, 1);
litest_event(dev, EV_SYN, SYN_REPORT, 0); litest_event(dev, EV_SYN, SYN_REPORT, 0);
litest_tablet_proximity_out(dev); litest_tablet_proximity_out(dev);
@ -1079,9 +1082,17 @@ START_TEST(proximity_out_clear_buttons)
litest_timeout_tablet_proxout(); litest_timeout_tablet_proxout();
libinput_dispatch(li); libinput_dispatch(li);
while ((event = libinput_get_event(li))) { event = libinput_get_event(li);
ck_assert_notnull(event);
do {
tablet_event = libinput_event_get_tablet_tool_event(event); tablet_event = libinput_event_get_tablet_tool_event(event);
if (libinput_event_get_type(event) ==
LIBINPUT_EVENT_TABLET_TOOL_PROXIMITY) {
have_proximity = true;
break;
}
if (libinput_event_get_type(event) == if (libinput_event_get_type(event) ==
LIBINPUT_EVENT_TABLET_TOOL_BUTTON) { LIBINPUT_EVENT_TABLET_TOOL_BUTTON) {
@ -1094,15 +1105,15 @@ START_TEST(proximity_out_clear_buttons)
} }
libinput_event_destroy(event); libinput_event_destroy(event);
} } while ((event = libinput_get_event(li)));
ck_assert_msg(button_released, ck_assert_msg(button_released,
"Button %s (%d) was not released.", "Button %s (%d) was not released.",
libevdev_event_code_get_name(EV_KEY, button), libevdev_event_code_get_name(EV_KEY, button),
event_button); event_button);
litest_assert(have_proximity);
litest_assert_empty_queue(li);
} }
litest_assert_empty_queue(li);
} }
END_TEST END_TEST