felipealmeida pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=2979f8dcef9528f2394adbcf0cfee4fd5650b43a
commit 2979f8dcef9528f2394adbcf0cfee4fd5650b43a Author: Felipe Magno de Almeida <[email protected]> Date: Thu Jul 24 18:53:20 2014 -0300 eolian-cxx: Enhance test for callback use Added test for use of Eolian callbacks in C++. Testing adding callbacks, calling callbacks and deleting them. --- src/tests/eolian_cxx/callback.c | 27 ++++++- src/tests/eolian_cxx/callback.eo | 4 +- src/tests/eolian_cxx/eolian_cxx_test_callback.cc | 91 ++++++++++++++++++++++-- 3 files changed, 116 insertions(+), 6 deletions(-) diff --git a/src/tests/eolian_cxx/callback.c b/src/tests/eolian_cxx/callback.c index dc09118..1371128 100644 --- a/src/tests/eolian_cxx/callback.c +++ b/src/tests/eolian_cxx/callback.c @@ -10,26 +10,51 @@ #include "callback.eo.h" -struct _Callback_Data {}; +struct _Callback_Data +{ + int callbacks; +}; typedef struct _Callback_Data Callback_Data; #define MY_CLASS CALLBACK_CLASS +static Eina_Bool _callback_callback_added(void* data EINA_UNUSED, Eo* obj EINA_UNUSED + , Eo_Event_Description const* e EINA_UNUSED + , void* event_info EINA_UNUSED) +{ + Callback_Data* pd = event_info; + ++pd->callbacks; + eo_event_callback_call(CALLBACK_EVENT_CALL_ON_ADD, &pd->callbacks); + return EINA_TRUE; +} + static void _callback_default_constructor(Eo *obj EINA_UNUSED, Callback_Data *pd EINA_UNUSED) { + pd->callbacks = 0; eo_do_super(obj, MY_CLASS, eo_constructor()); + + eo_event_callback_priority_add(EO_BASE_EVENT_CALLBACK_ADD, EO_CALLBACK_PRIORITY_DEFAULT + , &_callback_callback_added, pd); } static void _callback_constructor(Eo *obj EINA_UNUSED, Callback_Data *pd EINA_UNUSED, Ecore_Cb cb, void *data) { + pd->callbacks = 0; eo_do_super(obj, MY_CLASS, eo_constructor()); + + eo_event_callback_priority_add(EO_BASE_EVENT_CALLBACK_ADD, EO_CALLBACK_PRIORITY_DEFAULT + , &_callback_callback_added, pd); cb(data); } static void _callback_constructor2(Eo *obj EINA_UNUSED, Callback_Data *pd EINA_UNUSED, Ecore_Cb cb, void *data , Ecore_Cb cb2 EINA_UNUSED) { + pd->callbacks = 0; eo_do_super(obj, MY_CLASS, eo_constructor()); + + eo_event_callback_priority_add(EO_BASE_EVENT_CALLBACK_ADD, EO_CALLBACK_PRIORITY_DEFAULT + , &_callback_callback_added, pd); cb(data); } diff --git a/src/tests/eolian_cxx/callback.eo b/src/tests/eolian_cxx/callback.eo index 27befd2..f1825c9 100644 --- a/src/tests/eolian_cxx/callback.eo +++ b/src/tests/eolian_cxx/callback.eo @@ -34,6 +34,8 @@ class Callback (Eo.Base) } } } - + events { + call_on_add; + } } \ No newline at end of file diff --git a/src/tests/eolian_cxx/eolian_cxx_test_callback.cc b/src/tests/eolian_cxx/eolian_cxx_test_callback.cc index de930e7..05ee350 100644 --- a/src/tests/eolian_cxx/eolian_cxx_test_callback.cc +++ b/src/tests/eolian_cxx/eolian_cxx_test_callback.cc @@ -19,8 +19,8 @@ START_TEST(eolian_cxx_test_callback_constructor) bool called1 = false, called2 = false; ::callback c1 (std::bind([&called1] { called1 = true; })); ::callback c2 (std::bind([&called2] { called2 = true; }), &foo); - assert(called1 == true); - assert(called2 == true); + fail_if(!called1); + fail_if(!called2); } END_TEST @@ -35,8 +35,89 @@ START_TEST(eolian_cxx_test_callback_method) c.onecallback(std::bind([&called1] { called1 = true; })); c.twocallback(std::bind([&called2] { called2 = true; }), &foo); - assert(called1 == true); - assert(called2 == true); + fail_if(!called1); + fail_if(!called2); +} +END_TEST + +START_TEST(eolian_cxx_test_callback_event_add) +{ + efl::eo::eo_init i; + + callback c; + + bool called1 = false, called2 = false; + + + c.event_call_on_add_callback_add(std::bind([&called1] { called1 = true; })); + c.event_call_on_add_callback_add(std::bind([&called2] { called2 = true; })); + + fail_if(!called1); + fail_if(!called2); +} +END_TEST + +START_TEST(eolian_cxx_test_callback_event_del) +{ + efl::eo::eo_init i; + + callback c; + + int called1 = 0, called2 = 0, called3 = 0, called4 = 0; + + efl::eo::signal_connection s1 = c.event_call_on_add_callback_add + (std::bind([&] + { + std::cerr << "called1 " << called1 << " called2 " << called2 << " called3 " << called3 + << " called4 " << called4 << " 1" << std::endl; + fail_if(!( (called1 == 0 && called2 == 0 && called3 == 0 && called4 == 0) + || (called1 == 1 && called2 == 1 && called3 == 0 && called4 == 0) + )); + ++called1; + })); + efl::eo::signal_connection s2 = c.event_call_on_add_callback_add + (std::bind([&] + { + std::cerr << "called1 " << called1 << " called2 " << called2 << " called3 " << called3 + << " called4 " << called4 << " 2" << std::endl; + fail_if(!( (called1 == 1 && called2 == 0 && called3 == 0 && called4 == 0) + || (called1 == 1 && called2 == 1 && called3 == 0 && called4 == 0) + || (called1 == 2 && called2 == 1 && called3 == 1 && called4 == 0) + )); + ++called2; + })); + + s1.disconnect(); + + c.event_call_on_add_callback_add + ( + std::bind([&] + { + std::cerr << "called1 " << called1 << " called2 " << called2 << " called3 " << called3 + << " called4 " << called4 << " 3" << std::endl; + fail_if(!( (called1 == 2 && called2 == 1 && called3 == 0 && called4 == 0) + || (called1 == 2 && called2 == 2 && called3 == 1 && called4 == 1) + )); + ++called3; + })); + + s2.disconnect(); + + c.event_call_on_add_callback_add + ( + std::bind([&] + { + std::cerr << "called1 " << called1 << " called2 " << called2 << " called3 " << called3 + << " called4 " << called4 << " 4" << std::endl; + fail_if(!( (called1 == 2 && called2 == 2 && called3 == 1 && called4 == 0) + )); + ++called4; + })); + + fail_if(called1 != 2); + fail_if(called2 != 2); + fail_if(called3 != 2); + fail_if(called4 != 1); } END_TEST @@ -45,4 +126,6 @@ eolian_cxx_test_callback(TCase* tc) { tcase_add_test(tc, eolian_cxx_test_callback_constructor); tcase_add_test(tc, eolian_cxx_test_callback_method); + tcase_add_test(tc, eolian_cxx_test_callback_event_add); + tcase_add_test(tc, eolian_cxx_test_callback_event_del); } --
