diff --git a/src/libeis.c b/src/libeis.c index 6996114..94ab83b 100644 --- a/src/libeis.c +++ b/src/libeis.c @@ -345,6 +345,7 @@ eis_queue_device_start_emulating_event(struct eis_device *device, uint32_t seque { struct eis_event *e = eis_event_new_for_device(device); e->type = EIS_EVENT_DEVICE_START_EMULATING; + e->start_emulating.sequence = sequence; eis_queue_event(e); } diff --git a/test/test-eis.c b/test/test-eis.c index 5fab4e9..f6b3b25 100644 --- a/test/test-eis.c +++ b/test/test-eis.c @@ -401,6 +401,47 @@ MUNIT_TEST(eistest_multiple_emulating) return MUNIT_OK; } +MUNIT_TEST(eistest_device_start_emulating_sequence) +{ + _unref_(peck) *peck = peck_new(); + + peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ACCEPT_CLIENT); + peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_DEFAULT_SEAT); + peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_HANDLE_BIND_SEAT); + peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ADD_POINTER); + peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_RESUME_DEVICE); + peck_enable_ei_behavior(peck, PECK_EI_BEHAVIOR_HANDLE_ADDED); + peck_dispatch_until_stable(peck); + + with_client(peck) { + _unref_(ei_event) *resumed = + peck_ei_next_event(ei, EI_EVENT_DEVICE_RESUMED); + } + + for (int i = 0; i < 10; i++) { + uint32_t sequence = munit_rand_uint32(); + + with_client(peck) { + struct ei_device *device = peck_ei_get_default_pointer(peck); + ei_device_start_emulating(device, sequence); + ei_device_stop_emulating(device); + } + + peck_dispatch_until_stable(peck); + + with_server(peck) { + _unref_(eis_event) *start = + peck_eis_next_event(eis, EIS_EVENT_DEVICE_START_EMULATING); + munit_assert_uint32(eis_event_emulating_get_sequence(start), ==, sequence); + _unref_(eis_event) *stop = + peck_eis_next_event(eis, EIS_EVENT_DEVICE_STOP_EMULATING); + peck_assert_no_eis_events(eis); + } + } + + return MUNIT_OK; +} + MUNIT_TEST(eistest_socket_overflow) { _unref_(peck) *peck = peck_new_context("mode", PECK_EI_RECEIVER);