cedric pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=2b7a68eb1be1fe4811cf4ed2762475d6328ef385
commit 2b7a68eb1be1fe4811cf4ed2762475d6328ef385 Author: Cedric BAIL <ced...@osg.samsung.com> Date: Fri Dec 16 14:06:02 2016 -0800 ecore: add test for efl_promise_connect. --- src/tests/ecore/ecore_test_promise.c | 70 ++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/src/tests/ecore/ecore_test_promise.c b/src/tests/ecore/ecore_test_promise.c index 2040095..944331e 100644 --- a/src/tests/ecore/ecore_test_promise.c +++ b/src/tests/ecore/ecore_test_promise.c @@ -26,6 +26,29 @@ _then(void *data, const Efl_Event *ev) } static void +_time_then(void *data, const Efl_Event *ev) +{ + Efl_Future_Event_Success *s = ev->info; + Future_Ok *value = s->value; + Future_Ok *fo = data; + + fail_if(value != fo); + fo->then = EINA_TRUE; + + ecore_main_loop_quit(); +} + +static void +_connected_then(void *data, const Efl_Event *ev) +{ + Efl_Future_Event_Success *s = ev->info; + Efl_Future *f; + + f = efl_loop_timeout(efl_provider_find(ev->object, EFL_LOOP_CLASS), 0.01, data); + efl_promise_connect(s->next, f); +} + +static void _cancel(void *data, const Efl_Event *ev) { Efl_Future_Event_Failure *f = ev->info; @@ -95,6 +118,52 @@ START_TEST(efl_test_promise_future_success) } END_TEST +// Test value set after then +START_TEST(efl_test_promise_future_connected) +{ + Efl_Promise *p; + Efl_Future *chain; + Efl_Future *f; + Future_Ok fo = { EINA_FALSE, EINA_FALSE, EINA_FALSE }; + Eina_Bool deadf = EINA_FALSE, deadp = EINA_FALSE; + int progress = 7; + int value = 42; + + ecore_init(); + + p = efl_add(EFL_PROMISE_CLASS, ecore_main_loop_get()); + fail_if(!p); + + f = efl_promise_future_get(p); + fail_if(!f); + + efl_event_callback_add(f, EFL_EVENT_DEL, _death, &deadf); + efl_event_callback_add(p, EFL_EVENT_DEL, _death, &deadp); + + chain = efl_future_then(f, _connected_then, _cancel, _progress, &fo); + fail_if(!chain); + fail_if(!efl_future_then(chain, _time_then, _cancel, NULL, &fo)); + + fail_if(deadp || deadf); + + efl_promise_progress_set(p, &progress); + efl_promise_value_set(p, &value, NULL); + + ecore_main_loop_begin(); + + ecore_main_loop_iterate(); + + fail_if(!fo.then || fo.cancel || !fo.progress); + fail_if(!deadf || deadp); + + efl_del(p); + + fail_if(!deadp); + + ecore_shutdown(); +} +END_TEST + // Test value set before future_get START_TEST(efl_test_promise_future_success_before_get) { @@ -1033,6 +1102,7 @@ void ecore_test_ecore_promise(TCase *tc) { tcase_add_test(tc, efl_test_promise_future_success); tcase_add_test(tc, efl_test_promise_future_cancel); + tcase_add_test(tc, efl_test_promise_future_connected); tcase_add_test(tc, efl_test_promise_future_chain_success); tcase_add_test(tc, efl_test_promise_future_chain_cancel); tcase_add_test(tc, efl_test_promise_before_future_success); --