test: handle frame events in passive ei contexts by default

This is a copy of the EIS handling of frame events where we largely skip
over them to make the tests more sensible.
This commit is contained in:
Peter Hutterer 2022-04-29 09:54:44 +10:00
parent 9831b4c98b
commit e25586a96c
2 changed files with 28 additions and 0 deletions

View file

@ -344,6 +344,7 @@ peck_new_context(enum peck_ei_mode ei_mode)
peck_enable_ei_behavior(peck, PECK_EI_BEHAVIOR_AUTOCONNECT);
peck_enable_ei_behavior(peck, PECK_EI_BEHAVIOR_AUTOSEAT);
peck_enable_ei_behavior(peck, PECK_EI_BEHAVIOR_AUTOSTART);
peck_enable_ei_behavior(peck, PECK_EI_BEHAVIOR_HANDLE_FRAME);
peck->logger = logger_new("peck", peck);
logger_set_handler(peck->logger, peck_log_handler);
@ -442,6 +443,7 @@ peck_enable_ei_behavior(struct peck *peck, enum peck_ei_behavior behavior)
case PECK_EI_BEHAVIOR_HANDLE_ADDED_POINTER_ABSOLUTE:
case PECK_EI_BEHAVIOR_HANDLE_ADDED_KEYBOARD:
case PECK_EI_BEHAVIOR_HANDLE_ADDED_TOUCH:
case PECK_EI_BEHAVIOR_HANDLE_FRAME:
flag_set(peck->ei_behavior, behavior);
break;
case PECK_EI_BEHAVIOR_HANDLE_RESUMED:
@ -802,6 +804,10 @@ _peck_dispatch_ei(struct peck *peck, int lineno)
if (flag_is_set(peck->ei_behavior, PECK_EI_BEHAVIOR_HANDLE_PAUSED))
process_event = tristate_yes;
break;
case EI_EVENT_FRAME:
if (flag_is_set(peck->ei_behavior, PECK_EI_BEHAVIOR_HANDLE_FRAME))
process_event = tristate_yes;
break;
default:
break;
}
@ -929,11 +935,20 @@ peck_drain_ei(struct ei *ei)
void
peck_assert_no_ei_events(struct ei *ei)
{
struct peck *peck = ei_get_user_data(ei);
ei_dispatch(ei);
while (true) {
_unref_(ei_event) *e = ei_get_event(ei);
if (!e)
return;
if (peck && flag_is_set(peck->ei_behavior, PECK_EI_BEHAVIOR_HANDLE_FRAME) &&
ei_event_get_type(e) == EI_EVENT_FRAME) {
log_debug(peck, "Skipping over frame event\n");
continue;
}
munit_errorf("Expected empty event queue, have: %s\n",
peck_ei_event_name(e));
}
@ -967,6 +982,14 @@ _peck_ei_next_event(struct ei *ei, enum ei_event_type type, int lineno)
struct ei_event *event = ei_get_event(ei);
struct peck *peck = ei_get_user_data(ei);
if (flag_is_set(peck->ei_behavior, PECK_EI_BEHAVIOR_HANDLE_FRAME)) {
while (event && ei_event_get_type(event) == EI_EVENT_FRAME) {
ei_event_unref(event);
log_debug(peck, "Skipping over frame event\n");
event = ei_get_event(ei);
}
}
if (!event)
munit_errorf("Expected ei event type %s, got none, line %d\n",
peck_ei_event_type_name(type),

View file

@ -127,6 +127,11 @@ enum peck_ei_behavior {
PECK_EI_BEHAVIOR_HANDLE_RESUMED,
PECK_EI_BEHAVIOR_HANDLE_PAUSED,
/**
* Handle frame events. This behavior is enabled by default.
*/
PECK_EI_BEHAVIOR_HANDLE_FRAME,
};
struct peck;