cedric pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=b7635be57d80299d674b0754eda40c966c2580bd

commit b7635be57d80299d674b0754eda40c966c2580bd
Author: Cedric BAIL <ced...@osg.samsung.com>
Date:   Fri Dec 16 13:11:29 2016 -0800

    ecore: add tests for new promise delayed behavior.
---
 src/tests/ecore/ecore_test_promise.c | 140 +++++++++++++++++++++++++++++++++++
 1 file changed, 140 insertions(+)

diff --git a/src/tests/ecore/ecore_test_promise.c 
b/src/tests/ecore/ecore_test_promise.c
index fada926..2040095 100644
--- a/src/tests/ecore/ecore_test_promise.c
+++ b/src/tests/ecore/ecore_test_promise.c
@@ -442,6 +442,49 @@ START_TEST(efl_test_promise_future_multi_success)
 }
 END_TEST
 
+START_TEST(efl_test_promise_future_multi_success_noref)
+{
+   Efl_Promise *p;
+   Efl_Future *f;
+   Future_Ok fo1 = { EINA_FALSE, EINA_FALSE, EINA_FALSE };
+   Future_Ok fo2 = { 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);
+
+   fail_if(!efl_future_then(f, _then, _cancel, _progress, &fo1));
+   fail_if(!efl_future_then(f, _then, _cancel, _progress, &fo2));
+
+   fail_if(deadp || deadf);
+
+   efl_promise_progress_set(p, &progress);
+   efl_promise_value_set(p, &value, NULL);
+
+   ecore_main_loop_iterate();
+
+   fail_if(!fo1.then || fo1.cancel || !fo1.progress);
+   fail_if(!fo2.then || fo2.cancel || !fo2.progress);
+   fail_if(!deadf || deadp);
+
+   efl_del(p);
+
+   fail_if(!deadp);
+
+   ecore_shutdown();
+}
+END_TEST
+
 START_TEST(efl_test_promise_future_multi_cancel)
 {
    Efl_Promise *p;
@@ -533,6 +576,47 @@ START_TEST(efl_test_promise_before_future_multi_success)
 }
 END_TEST
 
+START_TEST(efl_test_promise_before_future_multi_success_noref)
+{
+   Efl_Promise *p;
+   Efl_Future *f;
+   Future_Ok fo1 = { EINA_FALSE, EINA_FALSE, EINA_FALSE };
+   Future_Ok fo2 = { 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);
+
+   efl_promise_progress_set(p, &progress);
+   efl_promise_value_set(p, &value, NULL);
+
+   fail_if(!efl_future_then(f, _then, _cancel, _progress, &fo1));
+   fail_if(!efl_future_then(f, _then, _cancel, _progress, &fo2));
+
+   ecore_main_loop_iterate();
+
+   fail_if(deadp || !deadf);
+   fail_if(!fo1.then || fo1.cancel || fo1.progress);
+   fail_if(!fo2.then || fo2.cancel || fo2.progress);
+
+   efl_del(p);
+
+   fail_if(!deadp);
+
+   ecore_shutdown();
+}
+END_TEST
+
 START_TEST(efl_test_promise_before_future_multi_cancel)
 {
    Efl_Promise *p;
@@ -585,6 +669,58 @@ START_TEST(efl_test_promise_before_future_multi_cancel)
 }
 END_TEST
 
+START_TEST(efl_test_promise_before_future_multi_cancel_noref)
+{
+   Efl_Promise *p;
+   Efl_Future *f;
+   Future_Ok fo1 = { EINA_FALSE, EINA_FALSE, EINA_FALSE };
+   Future_Ok fo2 = { EINA_FALSE, EINA_FALSE, EINA_FALSE };
+   Future_Ok fo3 = { EINA_FALSE, EINA_FALSE, EINA_FALSE };
+   Eina_Bool deadf = EINA_FALSE, deadp = EINA_FALSE, none = EINA_FALSE;
+   int progress = 7;
+   int value = 42;
+
+   ecore_init();
+
+   p = efl_add(EFL_PROMISE_CLASS, ecore_main_loop_get());
+   fail_if(!p);
+
+   efl_future_use(&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);
+   efl_event_callback_add(p, EFL_PROMISE_EVENT_FUTURE_NONE, _death, &none);
+
+   efl_promise_progress_set(p, &progress);
+
+   fail_if(!efl_future_then(f, _then, _cancel, _progress, &fo1));
+   fail_if(!efl_future_then(f, _then, _cancel, _progress, &fo2));
+
+   // efl_future_cancel is not delayed, only operation on promise are.
+   efl_future_cancel(f);
+
+   fail_if(efl_future_then(f, _then, _cancel, _progress, &fo3));
+
+   fail_if(deadp || !deadf);
+
+   efl_promise_value_set(p, &value, NULL);
+
+   ecore_main_loop_iterate();
+
+   fail_if(fo1.then || !fo1.cancel || fo1.progress);
+   fail_if(fo2.then || !fo2.cancel || fo2.progress);
+   fail_if(fo3.then || fo3.cancel || fo3.progress);
+   fail_if(!none);
+
+   efl_del(p);
+
+   fail_if(!deadp);
+
+   ecore_shutdown();
+}
+END_TEST
+
 static Eina_Bool cleanup = EINA_FALSE;
 
 static void
@@ -902,9 +1038,13 @@ void ecore_test_ecore_promise(TCase *tc)
    tcase_add_test(tc, efl_test_promise_before_future_success);
    tcase_add_test(tc, efl_test_promise_before_future_cancel);
    tcase_add_test(tc, efl_test_promise_future_multi_success);
+   tcase_add_test(tc, efl_test_promise_future_multi_success_noref);
    tcase_add_test(tc, efl_test_promise_future_multi_cancel);
    tcase_add_test(tc, efl_test_promise_before_future_multi_success);
+   tcase_add_test(tc, efl_test_promise_before_future_multi_success_noref);
    tcase_add_test(tc, efl_test_promise_before_future_multi_cancel);
+   tcase_add_test(tc, efl_test_promise_before_future_multi_success_noref);
+   tcase_add_test(tc, efl_test_promise_before_future_multi_cancel_noref);
    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);

-- 


Reply via email to