diff options
author | Tom Hacohen <tom@stosb.com> | 2016-06-20 17:57:52 +0100 |
---|---|---|
committer | Tom Hacohen <tom@stosb.com> | 2016-06-20 18:02:00 +0100 |
commit | 6998f3a8d24a4f408a3233674651fb2d3aaeff10 (patch) | |
tree | efba4bc5cc7374d9e49672e76e1fd7cb903aa573 | |
parent | 6202cc7485a54dea6f02a2668e7c907247902dd1 (diff) | |
download | efl-6998f3a8d24a4f408a3233674651fb2d3aaeff10.tar.gz |
Eo event: Add a test for stopping callbacks within another callback.
This tests that stopping callbacks is correctly preserved inside the
call and does not affect any surrounding callback calls.
-rw-r--r-- | src/tests/eo/suite/eo_test_general.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/tests/eo/suite/eo_test_general.c b/src/tests/eo/suite/eo_test_general.c index 51d0d6714d..2e2698d729 100644 --- a/src/tests/eo/suite/eo_test_general.c +++ b/src/tests/eo/suite/eo_test_general.c @@ -130,6 +130,14 @@ _eo_signals_a_changed_cb2(void *_data EINA_UNUSED, const Eo_Event *event EINA_UN } static void +_eo_signals_a_changed_within_cb(void *_data EINA_UNUSED, const Eo_Event *event) +{ + int a = 3; + eo_event_callback_call(event->object, EV_A_CHANGED, &a); + _eo_signals_cb_flag = 0x8; +} + +static void _eo_signals_a_changed_never(void *_data EINA_UNUSED, const Eo_Event *event EINA_UNUSED) { /* This one should never be called. */ @@ -211,6 +219,7 @@ START_TEST(eo_signals) /* Call Eo event with legacy and non-legacy callbacks. */ _eo_signals_cb_current = 0; eo_event_callback_priority_add(obj, EV_A_CHANGED2, -1000, _eo_signals_a_changed_never, (void *) 1); + eo_event_callback_priority_add(obj, EV_A_CHANGED2, 0, _eo_signals_a_changed_within_cb, NULL); eo_event_callback_priority_add(obj, EV_A_CHANGED, -100, _eo_signals_a_changed_cb, (void *) 1); eo_event_callback_add(obj, a_desc, _eo_signals_a_changed_cb2, NULL); simple_a_set(obj, 1); @@ -219,6 +228,9 @@ START_TEST(eo_signals) /* We don't need this one anymore. */ r = eo_event_callback_del(obj, EV_A_CHANGED2, _eo_signals_a_changed_never, (void *) 1); fail_if(!r); + r = eo_event_callback_del(obj, a_desc, _eo_signals_a_changed_cb2, NULL); + fail_if(!r); + eo_event_callback_add(obj, EV_A_CHANGED, _eo_signals_a_changed_cb2, NULL); /* Call legacy event with legacy and non-legacy callbacks. */ int a = 3; @@ -226,6 +238,13 @@ START_TEST(eo_signals) _eo_signals_cb_flag = 0; eo_event_callback_call(obj, a_desc, &a); ck_assert_int_eq(_eo_signals_cb_flag, 0x3); + + /* Stop event within event. */ + _eo_signals_cb_current = 0; + _eo_signals_cb_flag = 0; + fail_if(!eo_event_callback_call(obj, EV_A_CHANGED2, &a)); + ck_assert_int_eq(_eo_signals_cb_flag, 0x8); + fail_if(!r); } eo_unref(obj); |