diff options
author | Cedric Bail <cedric@osg.samsung.com> | 2016-07-26 12:08:48 -0700 |
---|---|---|
committer | Cedric Bail <cedric@osg.samsung.com> | 2016-08-04 11:00:24 -0700 |
commit | 5f396da732ed8cfa009bcf05a05eb606469cc052 (patch) | |
tree | c6fb851e30206b756f86809e4ca4959c6269f0f7 | |
parent | 53c1d362e54981c1115deb2e31294a63c37d1934 (diff) | |
download | efl-5f396da732ed8cfa009bcf05a05eb606469cc052.tar.gz |
ecore: add tests for efl_future_all.
-rw-r--r-- | src/tests/ecore/ecore_test_promise.c | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/src/tests/ecore/ecore_test_promise.c b/src/tests/ecore/ecore_test_promise.c index c6eaf094e2..8618d0b2a1 100644 --- a/src/tests/ecore/ecore_test_promise.c +++ b/src/tests/ecore/ecore_test_promise.c @@ -988,6 +988,66 @@ START_TEST(efl_test_promise_future_optional_cancel) } END_TEST +static int value[] = { 42, 7, 3 }; + +static void +_then_all(void *data, const Eo_Event *ev) +{ + Future_Ok *fo = data; + Efl_Future_Event_Success *s = ev->info; + Eina_Accessor *ac = s->value; + int *i; + + fail_if(!eina_accessor_data_get(ac, 0, (void**) &i)); + fail_if(i != &value[0]); + fail_if(!eina_accessor_data_get(ac, 1, (void**) &i)); + fail_if(i != &value[1]); + fail_if(!eina_accessor_data_get(ac, 2, (void**) &i)); + fail_if(i != &value[2]); + + fo->then = EINA_TRUE; +} + +START_TEST(efl_test_promise_all) +{ + Efl_Promise *p1, *p2, *p3; + Efl_Future *all = NULL, *f1; + Future_Ok donea = { EINA_FALSE, EINA_FALSE, EINA_FALSE }; + Future_Ok donep1 = { EINA_FALSE, EINA_FALSE, EINA_FALSE }; + + ecore_init(); + + p1 = eo_add(EFL_PROMISE_CLASS, ecore_main_loop_get()); + p2 = eo_add(EFL_PROMISE_CLASS, ecore_main_loop_get()); + p3 = eo_add(EFL_PROMISE_CLASS, ecore_main_loop_get()); + fail_if(!p1 || !p2 || !p3); + + f1 = eo_ref(efl_promise_future_get(p1)); + fail_if(!efl_future_then(f1, _then, _cancel, _progress, &donep1)); + efl_future_use(&all, efl_future_all(f1, efl_promise_future_get(p2), efl_promise_future_get(p3))); + eo_unref(f1); + + fail_if(!efl_future_then(all, _then_all, _cancel, _progress, &donea)); + fail_if(!all); + + efl_promise_value_set(p1, &value[0], NULL); + fail_if(!donep1.then || donep1.cancel || donep1.progress); + fail_if(donea.then || donea.cancel || donea.progress); + + efl_promise_value_set(p2, &value[1], NULL); + efl_promise_value_set(p3, &value[2], NULL); + + fail_if(!donea.then || donea.cancel || donea.progress); + fail_if(all); + + eo_del(p1); + eo_del(p2); + eo_del(p3); + + ecore_shutdown(); +} +END_TEST + void ecore_test_ecore_promise(TCase *tc) { tcase_add_test(tc, ecore_test_promise); @@ -1015,4 +1075,5 @@ void ecore_test_ecore_promise(TCase *tc) tcase_add_test(tc, efl_test_promise_before_future_multi_cancel); tcase_add_test(tc, efl_test_promise_future_optional_success); tcase_add_test(tc, efl_test_promise_future_optional_cancel); + tcase_add_test(tc, efl_test_promise_all); } |