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);
 }

-- 


Reply via email to