forked from enlightenment/efl
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:
parent
0001b65783
commit
2979f8dcef
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -34,6 +34,8 @@ class Callback (Eo.Base)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
events {
|
||||
call_on_add;
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue