test: expand the tablet mode switch test to check for fake key releases

If a key is still down when the tablet mode switch goes on, make sure we
release the key before the switch goes in effect.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
Peter Hutterer 2023-07-14 12:57:58 +10:00
parent 9bd0604ea3
commit 3fb876a49d
3 changed files with 39 additions and 4 deletions

View file

@ -3995,6 +3995,21 @@ litest_is_switch_event(struct libinput_event *event,
return swev; return swev;
} }
void
litest_assert_switch_event(struct libinput *li,
enum libinput_switch sw,
enum libinput_switch_state state)
{
struct libinput_event *event;
litest_wait_for_event(li);
event = libinput_get_event(li);
litest_is_switch_event(event, sw, state);
libinput_event_destroy(event);
}
void void
litest_assert_pad_button_event(struct libinput *li, litest_assert_pad_button_event(struct libinput *li,
unsigned int button, unsigned int button,

View file

@ -837,6 +837,11 @@ litest_assert_button_event(struct libinput *li,
unsigned int button, unsigned int button,
enum libinput_button_state state); enum libinput_button_state state);
void
litest_assert_switch_event(struct libinput *li,
enum libinput_switch sw,
enum libinput_switch_state state);
void void
litest_assert_scroll(struct libinput *li, litest_assert_scroll(struct libinput *li,
enum libinput_event_type axis_type, enum libinput_event_type axis_type,

View file

@ -1097,13 +1097,23 @@ START_TEST(tablet_mode_disable_keyboard)
litest_keyboard_key(keyboard, KEY_A, true); litest_keyboard_key(keyboard, KEY_A, true);
litest_keyboard_key(keyboard, KEY_A, false); litest_keyboard_key(keyboard, KEY_A, false);
litest_assert_only_typed_events(li, LIBINPUT_EVENT_KEYBOARD_KEY); litest_keyboard_key(keyboard, KEY_B, true); /* KEY_B down but not up */
libinput_dispatch(li);
litest_assert_key_event(li, KEY_A, LIBINPUT_KEY_STATE_PRESSED);
litest_assert_key_event(li, KEY_A, LIBINPUT_KEY_STATE_RELEASED);
litest_assert_key_event(li, KEY_B, LIBINPUT_KEY_STATE_PRESSED); /* KEY_B down but not up */
litest_switch_action(sw, litest_switch_action(sw,
LIBINPUT_SWITCH_TABLET_MODE, LIBINPUT_SWITCH_TABLET_MODE,
LIBINPUT_SWITCH_STATE_ON); LIBINPUT_SWITCH_STATE_ON);
litest_drain_events(li);
/* The key currently down must be released */
litest_assert_key_event(li, KEY_B, LIBINPUT_KEY_STATE_RELEASED);
litest_assert_switch_event(li, LIBINPUT_SWITCH_TABLET_MODE, LIBINPUT_SWITCH_STATE_ON);
litest_assert_empty_queue(li);
litest_keyboard_key(keyboard, KEY_B, false); /* release the kernel device */
litest_keyboard_key(keyboard, KEY_A, true); litest_keyboard_key(keyboard, KEY_A, true);
litest_keyboard_key(keyboard, KEY_A, false); litest_keyboard_key(keyboard, KEY_A, false);
litest_assert_empty_queue(li); litest_assert_empty_queue(li);
@ -1111,11 +1121,16 @@ START_TEST(tablet_mode_disable_keyboard)
litest_switch_action(sw, litest_switch_action(sw,
LIBINPUT_SWITCH_TABLET_MODE, LIBINPUT_SWITCH_TABLET_MODE,
LIBINPUT_SWITCH_STATE_OFF); LIBINPUT_SWITCH_STATE_OFF);
litest_assert_only_typed_events(li, LIBINPUT_EVENT_SWITCH_TOGGLE); litest_assert_switch_event(li, LIBINPUT_SWITCH_TABLET_MODE, LIBINPUT_SWITCH_STATE_OFF);
litest_keyboard_key(keyboard, KEY_A, true); litest_keyboard_key(keyboard, KEY_A, true);
litest_keyboard_key(keyboard, KEY_A, false); litest_keyboard_key(keyboard, KEY_A, false);
litest_assert_only_typed_events(li, LIBINPUT_EVENT_KEYBOARD_KEY); litest_keyboard_key(keyboard, KEY_B, true);
litest_keyboard_key(keyboard, KEY_B, false);
litest_assert_key_event(li, KEY_A, LIBINPUT_KEY_STATE_PRESSED);
litest_assert_key_event(li, KEY_A, LIBINPUT_KEY_STATE_RELEASED);
litest_assert_key_event(li, KEY_B, LIBINPUT_KEY_STATE_PRESSED);
litest_assert_key_event(li, KEY_B, LIBINPUT_KEY_STATE_RELEASED);
litest_delete_device(keyboard); litest_delete_device(keyboard);
} }