diff --git a/test/test-ei-device.c b/test/test-ei-device.c index 5ba1a24..fe6a87d 100644 --- a/test/test-ei-device.c +++ b/test/test-ei-device.c @@ -282,6 +282,55 @@ MUNIT_TEST(test_ei_device_add_remove) return MUNIT_OK; } +MUNIT_TEST(test_ei_device_button_button) +{ + _unref_(peck) *peck = peck_new(); + + peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ACCEPT_ALL); + peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ADD_POINTER); + peck_enable_ei_behavior(peck, PECK_EI_BEHAVIOR_AUTODEVICES); + peck_dispatch_until_stable(peck); + + with_client(peck) { + struct ei_device *device = peck_ei_get_default_pointer(peck); + ei_device_button_button(device, BTN_LEFT, true); + ei_device_frame(device, peck_ei_now(peck)); + ei_device_button_button(device, BTN_RIGHT, true); + ei_device_frame(device, peck_ei_now(peck)); + ei_device_button_button(device, BTN_RIGHT, false); + ei_device_frame(device, peck_ei_now(peck)); + ei_device_button_button(device, BTN_LEFT, false); + ei_device_frame(device, peck_ei_now(peck)); + } + + peck_dispatch_until_stable(peck); + + with_server(peck) { + _unref_(eis_event) *ld = + peck_eis_next_event(eis, EIS_EVENT_BUTTON_BUTTON); + munit_assert_int(eis_event_button_get_button(ld), ==, BTN_LEFT); + munit_assert_true(eis_event_button_get_is_press(ld)); + + _unref_(eis_event) *rd = + peck_eis_next_event(eis, EIS_EVENT_BUTTON_BUTTON); + munit_assert_int(eis_event_button_get_button(rd), ==, BTN_RIGHT); + munit_assert_true(eis_event_button_get_is_press(rd)); + + _unref_(eis_event) *ru = + peck_eis_next_event(eis, EIS_EVENT_BUTTON_BUTTON); + munit_assert_int(eis_event_button_get_button(ru), ==, BTN_RIGHT); + munit_assert_false(eis_event_button_get_is_press(ru)); + + _unref_(eis_event) *lu = + peck_eis_next_event(eis, EIS_EVENT_BUTTON_BUTTON); + munit_assert_int(eis_event_button_get_button(lu), ==, BTN_LEFT); + munit_assert_false(eis_event_button_get_is_press(lu)); + + } + + return MUNIT_OK; +} + MUNIT_TEST(test_ei_device_keyboard_key) { _unref_(peck) *peck = peck_new(); @@ -1448,6 +1497,71 @@ MUNIT_TEST(test_passive_ei_device_stop_emulating_when_removing) return MUNIT_OK; } +/* Same as test_ei_device_button_button() but for a passive context */ +MUNIT_TEST(test_passive_ei_device_button_button) +{ + _unref_(peck) *peck = peck_new_context(PECK_EI_RECEIVER); + + peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ACCEPT_ALL); + peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ADD_POINTER); + peck_enable_ei_behavior(peck, PECK_EI_BEHAVIOR_AUTODEVICES); + peck_dispatch_until_stable(peck); + + uint32_t sequence = 123; + + with_server(peck) { + struct eis_device *device = peck_eis_get_default_pointer(peck); + eis_device_start_emulating(device, sequence); + } + + peck_dispatch_until_stable(peck); + + with_client(peck) { + _unref_(ei_event) *start = + peck_ei_next_event(ei, EI_EVENT_DEVICE_START_EMULATING); + munit_assert_uint(ei_event_emulating_get_sequence(start), ==, sequence); + } + + with_server(peck) { + struct eis_device *device = peck_eis_get_default_pointer(peck); + eis_device_button_button(device, BTN_LEFT, true); + eis_device_frame(device, peck_eis_now(peck)); + eis_device_button_button(device, BTN_RIGHT, true); + eis_device_frame(device, peck_eis_now(peck)); + eis_device_button_button(device, BTN_RIGHT, false); + eis_device_frame(device, peck_eis_now(peck)); + eis_device_button_button(device, BTN_LEFT, false); + eis_device_frame(device, peck_eis_now(peck)); + } + + peck_dispatch_until_stable(peck); + + with_client(peck) { + _unref_(ei_event) *ld = + peck_ei_next_event(ei, EI_EVENT_BUTTON_BUTTON); + munit_assert_int(ei_event_button_get_button(ld), ==, BTN_LEFT); + munit_assert_true(ei_event_button_get_is_press(ld)); + + _unref_(ei_event) *rd = + peck_ei_next_event(ei, EI_EVENT_BUTTON_BUTTON); + munit_assert_int(ei_event_button_get_button(rd), ==, BTN_RIGHT); + munit_assert_true(ei_event_button_get_is_press(rd)); + + _unref_(ei_event) *ru = + peck_ei_next_event(ei, EI_EVENT_BUTTON_BUTTON); + munit_assert_int(ei_event_button_get_button(ru), ==, BTN_RIGHT); + munit_assert_false(ei_event_button_get_is_press(ru)); + + _unref_(ei_event) *lu = + peck_ei_next_event(ei, EI_EVENT_BUTTON_BUTTON); + munit_assert_int(ei_event_button_get_button(lu), ==, BTN_LEFT); + munit_assert_false(ei_event_button_get_is_press(lu)); + + } + + return MUNIT_OK; +} + /* Same as test_passive_ei_device_pointer_rel() but for a passive context */ MUNIT_TEST(test_passive_ei_device_keyboard_key) {