#include <stdio.h>
-#include "eo_suite.h"
#include "Eo.h"
-
+#include "eo_suite.h"
#include "class_simple.h"
START_TEST(eo_simple)
/* Usually should be const, not const only for the test... */
static Eo_Class_Description class_desc = {
+ EO_VERSION,
"Simple2",
EO_CLASS_TYPE_REGULAR,
EO_CLASS_DESCRIPTION_OPS(NULL, NULL, 0),
NULL
};
- const Eo_Class *klass = eo_class_new(&class_desc, 0, EO_BASE_CLASS, NULL);
+ const Eo_Class *klass = eo_class_new(&class_desc, EO_BASE_CLASS, NULL);
fail_if(!klass);
Eo *obj = eo_add(klass, NULL);
eo_unref(obj);
class_desc.data_size = 0;
- klass = eo_class_new(&class_desc, 0, EO_BASE_CLASS, NULL);
+ klass = eo_class_new(&class_desc, EO_BASE_CLASS, NULL);
fail_if(!klass);
obj = eo_add(klass, NULL);
}
END_TEST
-START_TEST(eo_composite_tests)
+START_TEST(eo_isa_tests)
{
eo_init();
- Eo *obj = eo_add(SIMPLE_CLASS, NULL);
- fail_if(!obj);
- Eo *obj2 = eo_add(SIMPLE_CLASS, NULL);
- fail_if(!obj2);
+ const Eo_Class *klass, *iface, *mixin;
- eo_composite_object_attach(obj, obj2);
- eo_parent_set(obj2, NULL);
- fail_if(eo_composite_is(obj2));
+ {
+ /* Usually should be const, not const only for the test... */
+ static Eo_Class_Description class_desc = {
+ EO_VERSION,
+ "Iface",
+ EO_CLASS_TYPE_INTERFACE,
+ EO_CLASS_DESCRIPTION_OPS(NULL, NULL, 0),
+ NULL,
+ 0,
+ NULL,
+ NULL
+ };
+
+ iface = eo_class_new(&class_desc, NULL, NULL);
+ fail_if(!iface);
+ }
- eo_unref(obj2);
+ {
+ /* Usually should be const, not const only for the test... */
+ static Eo_Class_Description class_desc = {
+ EO_VERSION,
+ "Mixin",
+ EO_CLASS_TYPE_MIXIN,
+ EO_CLASS_DESCRIPTION_OPS(NULL, NULL, 0),
+ NULL,
+ 0,
+ NULL,
+ NULL
+ };
+
+ mixin = eo_class_new(&class_desc, NULL, NULL);
+ fail_if(!mixin);
+ }
+
+ {
+ /* Usually should be const, not const only for the test... */
+ static Eo_Class_Description class_desc = {
+ EO_VERSION,
+ "Simple2",
+ EO_CLASS_TYPE_REGULAR,
+ EO_CLASS_DESCRIPTION_OPS(NULL, NULL, 0),
+ NULL,
+ 10,
+ NULL,
+ NULL
+ };
+
+ klass = eo_class_new(&class_desc, EO_BASE_CLASS, iface, mixin, NULL);
+ fail_if(!klass);
+ }
+
+ Eo *obj = eo_add(klass, NULL);
+ fail_if(!obj);
+ fail_if(eo_isa(obj, SIMPLE_CLASS));
+ fail_if(!eo_isa(obj, iface));
+ fail_if(!eo_isa(obj, mixin));
+ fail_if(!eo_isa(obj, klass));
+ fail_if(!eo_isa(obj, EO_BASE_CLASS));
+ eo_unref(obj);
+
+ obj = eo_add(SIMPLE_CLASS, NULL);
+ fail_if(!obj);
+ fail_if(eo_isa(obj, klass));
+ fail_if(eo_isa(obj, iface));
+ fail_if(eo_isa(obj, mixin));
+ fail_if(!eo_isa(obj, SIMPLE_CLASS));
+ fail_if(!eo_isa(obj, EO_BASE_CLASS));
eo_unref(obj);
eo_shutdown();
}
END_TEST
-START_TEST(eo_static_classes)
+
+START_TEST(eo_composite_tests)
{
eo_init();
- static const Eo_Op_Description op_desc[] = {
- EO_OP_DESCRIPTION(SIMPLE_SUB_ID_A_SET, "Set property A"),
- EO_OP_DESCRIPTION_SENTINEL
- };
-
- /* Usually should be const, not const only for the test... */
- static Eo_Class_Description class_desc = {
- "Simple2",
- EO_CLASS_TYPE_REGULAR,
- EO_CLASS_DESCRIPTION_OPS(NULL, op_desc, 1),
- NULL,
- 0,
- NULL,
- NULL
- };
-
- const Eo_Class *klass = eo_class_new(&class_desc, 1, EO_BASE_CLASS, NULL);
- fail_if(klass);
+ Eo *obj = eo_add(SIMPLE_CLASS, NULL);
+ fail_if(!obj);
+ Eo *obj2 = eo_add(SIMPLE_CLASS, NULL);
+ fail_if(!obj2);
- klass = eo_class_new(&class_desc, 1000, EO_BASE_CLASS, NULL);
- fail_if(klass);
+ eo_composite_attach(obj2, obj);
+ eo_parent_set(obj2, NULL);
+ fail_if(eo_composite_is(obj2));
- klass = eo_class_new(&class_desc, 2, EO_BASE_CLASS, NULL);
- fail_if(!klass);
+ eo_unref(obj2);
+ eo_unref(obj);
eo_shutdown();
}
const Eo_Op_Func_Description func_desc[] = {
EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_CONSTRUCTOR), _man_con),
EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_DESTRUCTOR), _man_des),
+ EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_DESTRUCTOR), _man_des),
EO_OP_FUNC_SENTINEL
};
/* Usually should be const, not const only for the test... */
static Eo_Class_Description class_desc = {
+ EO_VERSION,
"Simple2",
EO_CLASS_TYPE_REGULAR,
EO_CLASS_DESCRIPTION_OPS(NULL, NULL, 0),
NULL
};
- const Eo_Class *klass = eo_class_new(&class_desc, 0, EO_BASE_CLASS, NULL);
+ const Eo_Class *klass = eo_class_new(&class_desc, EO_BASE_CLASS, NULL);
fail_if(!klass);
Eo *obj = eo_add(klass, NULL);
eo_unref(obj);
_man_should_des = EINA_FALSE;
- klass = eo_class_new(&class_desc, 0, EO_BASE_CLASS, NULL);
+ klass = eo_class_new(&class_desc, EO_BASE_CLASS, NULL);
fail_if(!klass);
obj = eo_add(klass, NULL);
eo_manual_free(obj);
_man_should_con = EINA_FALSE;
- klass = eo_class_new(&class_desc, 0, EO_BASE_CLASS, NULL);
+ klass = eo_class_new(&class_desc, EO_BASE_CLASS, NULL);
fail_if(!klass);
obj = eo_add(klass, NULL);
eo_unref(obj);
eo_manual_free(obj);
+ obj = eo_add(klass, NULL);
+ fail_if(!obj);
+ eo_manual_free_set(obj, EINA_TRUE);
+ eo_unref(obj);
+ eo_ref(obj);
+ eo_unref(obj);
+ eo_unref(obj);
+ eo_unref(obj);
+ eo_unref(obj);
+ eo_manual_free(obj);
+
eo_shutdown();
}
END_TEST
eo_init();
static const Eo_Class_Description class_desc = {
+ EO_VERSION,
"Simple",
EO_CLASS_TYPE_REGULAR,
EO_CLASS_DESCRIPTION_OPS(NULL, NULL, 0),
NULL
};
- const Eo_Class *klass = eo_class_new(&class_desc, 0, SIMPLE_CLASS, NULL);
+ const Eo_Class *klass = eo_class_new(&class_desc, SIMPLE_CLASS, NULL);
fail_if(!klass);
Eo *obj = eo_add(klass, NULL);
obj = eo_add(SIMPLE_CLASS, NULL);
fail_if(!eo_do(obj, simple_a_print()));
- fail_if(!eo_query(obj, simple_a_print()));
- fail_if(eo_query(obj, simple_a_set(1)));
+ fail_if(!eo_do(obj, simple_a_print()));
+ fail_if(!eo_do(obj, simple_a_set(1)));
eo_unref(obj);
eo_shutdown();
eo_class_do((Eo_Class *) buf, NULL);
eo_class_do_super((Eo_Class *) buf, EO_NOOP);
- fail_if(eo_class_new(NULL, 0, (Eo_Class *) buf), NULL);
+ fail_if(eo_class_new(NULL, (Eo_Class *) buf), NULL);
eo_xref(obj, (Eo *) buf);
eo_xunref(obj, (Eo *) buf);
eo_unref((Eo *) buf);
eo_del((Eo *) buf);
+ eo_isa((Eo *) buf, SIMPLE_CLASS);
+ eo_isa(obj, (Eo_Class *) buf);
+
fail_if(0 != eo_ref_get((Eo *) buf));
Eo *wref = NULL;
fail_if(eo_data_get((Eo *) buf, SIMPLE_CLASS));
- eo_composite_object_attach((Eo *) buf, obj);
- eo_composite_object_attach(obj, (Eo *) buf);
- eo_composite_object_detach((Eo *) buf, obj);
- eo_composite_object_detach(obj, (Eo *) buf);
+ eo_composite_attach((Eo *) buf, obj);
+ eo_composite_attach(obj, (Eo *) buf);
+ eo_composite_detach((Eo *) buf, obj);
+ eo_composite_detach(obj, (Eo *) buf);
eo_composite_is((Eo *) buf);
eo_do(obj, eo_event_callback_forwarder_add(NULL, (Eo *) buf));
}
END_TEST
+/* MULTI */
+static Eo_Op MULTI_BASE_ID;
+#define MULTI_ID(sub_id) (MULTI_BASE_ID + sub_id)
+#define multi_a_print() MULTI_ID(MULTI_SUB_ID_A_PRINT)
+#define multi_class_hi_print() MULTI_ID(MULTI_SUB_ID_CLASS_HI_PRINT)
+
+static void
+_a_print(Eo *obj EINA_UNUSED, void *class_data EINA_UNUSED, va_list *list EINA_UNUSED)
+{
+ printf("Hey\n");
+}
+
+static void
+_class_hi_print(const Eo_Class *klass EINA_UNUSED, va_list *list EINA_UNUSED)
+{
+ printf("Hi\n");
+}
+
+enum {
+ MULTI_SUB_ID_A_PRINT,
+ MULTI_SUB_ID_CLASS_HI_PRINT,
+ MULTI_SUB_ID_LAST
+};
+
+static void
+_eo_multiple_do_class_constructor(Eo_Class *klass)
+{
+ const Eo_Op_Func_Description func_desc[] = {
+ EO_OP_FUNC(MULTI_ID(MULTI_SUB_ID_A_PRINT), _a_print),
+ EO_OP_FUNC_CLASS(MULTI_ID(MULTI_SUB_ID_CLASS_HI_PRINT), _class_hi_print),
+ EO_OP_FUNC_SENTINEL
+ };
+
+ eo_class_funcs_set(klass, func_desc);
+}
+
+static const Eo_Op_Description _eo_multiple_do_op_desc[] = {
+ EO_OP_DESCRIPTION(MULTI_SUB_ID_A_PRINT, "Print property A"),
+ EO_OP_DESCRIPTION_CLASS(MULTI_SUB_ID_CLASS_HI_PRINT, "Print Hi"),
+ EO_OP_DESCRIPTION_SENTINEL
+};
+
+
+START_TEST(eo_multiple_do)
+{
+ eo_init();
+
+ /* Usually should be const, not const only for the test... */
+ static Eo_Class_Description class_desc = {
+ EO_VERSION,
+ "Inherit",
+ EO_CLASS_TYPE_REGULAR,
+ EO_CLASS_DESCRIPTION_OPS(&MULTI_BASE_ID, _eo_multiple_do_op_desc, MULTI_SUB_ID_LAST),
+ NULL,
+ 0,
+ _eo_multiple_do_class_constructor,
+ NULL
+ };
+
+ const Eo_Class *klass = eo_class_new(&class_desc, SIMPLE_CLASS, NULL);
+ fail_if(!klass);
+
+ Eo *obj = eo_add(klass, NULL);
+ fail_if(!obj);
+
+ fail_if(!eo_do(obj, simple_a_print(), multi_a_print(), multi_a_print()));
+ fail_if(!eo_class_do(klass, simple_class_hi_print(), multi_class_hi_print(), multi_class_hi_print()));
+
+ eo_unref(obj);
+
+ eo_shutdown();
+}
+END_TEST
+
+START_TEST(eo_add_do_and_custom)
+{
+ Simple_Public_Data *pd = NULL;
+ Eo *obj = NULL;
+ eo_init();
+
+ obj = eo_add_custom(SIMPLE_CLASS, NULL, eo_constructor());
+ fail_if(!obj);
+ eo_unref(obj);
+
+ obj = eo_add(SIMPLE_CLASS, NULL, simple_a_set(7));
+ fail_if(!obj);
+ pd = eo_data_get(obj, SIMPLE_CLASS);
+ fail_if(pd->a != 7);
+ eo_unref(obj);
+
+ obj = eo_add_custom(SIMPLE_CLASS, NULL, eo_constructor(), simple_a_set(7));
+ fail_if(!obj);
+ pd = eo_data_get(obj, SIMPLE_CLASS);
+ fail_if(pd->a != 7);
+ eo_unref(obj);
+
+ eo_shutdown();
+}
+END_TEST
+
void eo_test_general(TCase *tc)
{
tcase_add_test(tc, eo_generic_data);
tcase_add_test(tc, eo_magic_checks);
tcase_add_test(tc, eo_data_fetch);
tcase_add_test(tc, eo_man_free);
- tcase_add_test(tc, eo_static_classes);
tcase_add_test(tc, eo_composite_tests);
+ tcase_add_test(tc, eo_isa_tests);
+ tcase_add_test(tc, eo_multiple_do);
+ tcase_add_test(tc, eo_add_do_and_custom);
}