eolian-cxx: Enhance test for callback use

Added test for use of Eolian callbacks in C++. Testing adding
callbacks, calling callbacks and deleting them.
This commit is contained in:
Felipe Magno de Almeida 2014-07-24 18:53:20 -03:00
parent 0001b65783
commit 2979f8dcef
3 changed files with 116 additions and 6 deletions

View File

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

View File

@ -34,6 +34,8 @@ class Callback (Eo.Base)
}
}
}
events {
call_on_add;
}
}

View File

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