diff --git a/src/Makefile_Eo.am b/src/Makefile_Eo.am index f41c09f3c9..bd5dcba9d4 100644 --- a/src/Makefile_Eo.am +++ b/src/Makefile_Eo.am @@ -119,6 +119,8 @@ tests/eo/suite/eo_test_class_simple.c \ tests/eo/suite/eo_test_class_simple.h \ tests/eo/suite/eo_test_class_singleton.c \ tests/eo/suite/eo_test_class_singleton.h \ +tests/eo/suite/eo_test_domain.c \ +tests/eo/suite/eo_test_domain.h \ tests/eo/suite/eo_suite.c \ tests/eo/suite/eo_suite.h \ tests/eo/suite/eo_error_msgs.h \ diff --git a/src/tests/eo/suite/eo_test_domain.c b/src/tests/eo/suite/eo_test_domain.c new file mode 100644 index 0000000000..9ed5f9a277 --- /dev/null +++ b/src/tests/eo/suite/eo_test_domain.c @@ -0,0 +1,89 @@ +#ifdef HAVE_CONFIG_H +# include +#endif + +#include "Eina.h" +#include "Eo.h" +#include "eo_test_domain.h" + +#define MY_CLASS DOMAIN_CLASS + +EAPI const Efl_Event_Description _EV_DOMAIN_A_CHANGED = + EFL_EVENT_DESCRIPTION("domain,a,changed"); + +static void +_a_set(Eo *obj EINA_UNUSED, void *class_data, int a) +{ + Domain_Public_Data *pd = class_data; + printf("Set Begin\n"); + pd->a = a; + sleep(1); + printf("Set End\n"); + printf("Call Events\n"); + efl_event_callback_legacy_call(obj, EV_DOMAIN_A_CHANGED, &pd->a); + printf("Call Events End\n"); +} + +static int +_a_get(Eo *obj EINA_UNUSED, void *class_data) +{ + Domain_Public_Data *pd = class_data; + printf("Get Begin\n"); + return pd->a; +} + +//return obj = efl_add(DOMAIN_CLASS, NULL); + +EFL_VOID_FUNC_BODYV(domain_recursive, EFL_FUNC_CALL(n), int n); + +static void +_recursive(Eo *obj, void *class_data EINA_UNUSED, int n) +{ + static int count = 0; + + if (count < n) + { + count++; + domain_recursive(obj, n); + } + else + count = 0; +} + +static void +_dbg_info_get(Eo *eo_obj, void *_pd EINA_UNUSED, Efl_Dbg_Info *root) +{ + efl_dbg_info_get(efl_super(eo_obj, MY_CLASS), root); + Efl_Dbg_Info *group = EFL_DBG_INFO_LIST_APPEND(root, "Test list"); + EFL_DBG_INFO_APPEND(group, "Test", EINA_VALUE_TYPE_INT, 8); +} + +EFL_VOID_FUNC_BODYV(domain_a_set, EFL_FUNC_CALL(a), int a); +EFL_FUNC_BODY(domain_a_get, int, 0); +EFL_FUNC_BODY(domain_a_print, Eina_Bool, EINA_FALSE); +EFL_FUNC_BODY_CONST(domain_class_hi_print, Eina_Bool, EINA_FALSE); +EFL_VOID_FUNC_BODY(domain_pure_virtual); +EFL_VOID_FUNC_BODY(domain_no_implementation); + +static Eina_Bool +_class_initializer(Efl_Class *klass) +{ + EFL_OPS_DEFINE(ops, + EFL_OBJECT_OP_FUNC(domain_a_set, _a_set), + EFL_OBJECT_OP_FUNC(domain_a_get, _a_get), + EFL_OBJECT_OP_FUNC(domain_recursive, _recursive) + ); + return efl_class_functions_set(klass, &ops); +} + +static const Efl_Class_Description class_desc = { + EO_VERSION, + "Domain", + EFL_CLASS_TYPE_REGULAR, + sizeof(Domain_Public_Data), + _class_initializer, + NULL, + NULL +}; + +EFL_DEFINE_CLASS(domain_class_get, &class_desc, EO_CLASS, NULL) diff --git a/src/tests/eo/suite/eo_test_domain.h b/src/tests/eo/suite/eo_test_domain.h new file mode 100644 index 0000000000..ac7428534a --- /dev/null +++ b/src/tests/eo/suite/eo_test_domain.h @@ -0,0 +1,19 @@ +#ifndef DOMAIN_H +#define DOMAIN_H + +typedef struct +{ + int a; +} Domain_Public_Data; + +EAPI void domain_a_set(Eo *obj, int a); +EAPI int domain_a_get(Eo *obj); +EAPI void domain_recursive(Eo *obj, int n); + +extern const Efl_Event_Description _EV_DOMAIN_A_CHANGED; +#define EV_DOMAIN_A_CHANGED (&(_EV_DOMAIN_A_CHANGED)) + +#define DOMAIN_CLASS domain_class_get() +const Efl_Class *domain_class_get(void); + +#endif diff --git a/src/tests/eo/suite/eo_test_general.c b/src/tests/eo/suite/eo_test_general.c index 95ab0b7d6d..9be6de54d2 100644 --- a/src/tests/eo/suite/eo_test_general.c +++ b/src/tests/eo/suite/eo_test_general.c @@ -9,6 +9,7 @@ #include "eo_suite.h" #include "eo_test_class_simple.h" #include "eo_test_class_singleton.h" +#include "eo_test_domain.h" /* Loading this internal header for testing purposes. */ #include "eo_ptr_indirection.h" @@ -1354,6 +1355,71 @@ START_TEST(eo_rec_interface) } END_TEST +START_TEST(eo_domain) +{ + Eo *obj, *objs; + + printf("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n"); + efl_object_init(); + + fail_if(efl_domain_get() != EFL_ID_DOMAIN_MAIN); + + fail_if(efl_domain_switch(EFL_ID_DOMAIN_THREAD) != EINA_TRUE); + + fail_if(efl_domain_get() != EFL_ID_DOMAIN_THREAD); + + fail_if(efl_domain_switch(EFL_ID_DOMAIN_MAIN) != EINA_TRUE); + + fail_if(efl_domain_get() != EFL_ID_DOMAIN_MAIN); + + fail_if(efl_domain_current_get() != EFL_ID_DOMAIN_MAIN); + + fail_if(efl_domain_current_set(EFL_ID_DOMAIN_SHARED) != EINA_TRUE); + + fail_if(efl_domain_current_get() != EFL_ID_DOMAIN_SHARED); + + fail_if(efl_domain_current_set(EFL_ID_DOMAIN_MAIN) != EINA_TRUE); + + fail_if(efl_domain_current_get() != EFL_ID_DOMAIN_MAIN); + + fail_if(efl_domain_current_push(EFL_ID_DOMAIN_SHARED) != EINA_TRUE); + + fail_if(efl_domain_current_get() != EFL_ID_DOMAIN_SHARED); + + fail_if(efl_domain_current_push(EFL_ID_DOMAIN_THREAD) != EINA_TRUE); + + fail_if(efl_domain_current_get() != EFL_ID_DOMAIN_THREAD); + + efl_domain_current_pop(); + + fail_if(efl_domain_current_get() != EFL_ID_DOMAIN_SHARED); + + efl_domain_current_pop(); + + fail_if(efl_domain_current_get() != EFL_ID_DOMAIN_MAIN); + + objs = efl_add(DOMAIN_CLASS, NULL); + + efl_domain_current_push(EFL_ID_DOMAIN_SHARED); + obj = efl_add(DOMAIN_CLASS, NULL); + efl_domain_current_pop(); + + fail_if(efl_compatible(objs, obj) == EINA_TRUE); + + domain_a_set(obj, 1234); + fail_if(domain_a_get(obj) != 1234); + + domain_a_set(objs, 1234); + fail_if(domain_a_get(objs) != 1234); + + efl_del(obj); + efl_del(objs); + + efl_object_shutdown(); + printf("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n"); +} +END_TEST + void eo_test_general(TCase *tc) { tcase_add_test(tc, eo_simple); @@ -1376,4 +1442,5 @@ void eo_test_general(TCase *tc) tcase_add_test(tc, efl_name); tcase_add_test(tc, eo_comment); tcase_add_test(tc, eo_rec_interface); + tcase_add_test(tc, eo_domain); }