#define eo_do_super_ret(eoid, clsid, ret_tmp, func) _eo_do_common_ret(eoid, clsid, EINA_TRUE, ret_tmp, func)
+#define eo_do_part(eoid, part_func, ...) \
+ do { \
+ Eo *__eo_part = eoid; \
+ eo_do(eoid, __eo_part = part_func); \
+ eo_do(__eo_part, __VA_ARGS__); \
+ } while (0)
+
/*****************************************************************************/
/**
return EINA_TRUE;
}
+EO_FUNC_BODYV(simple_part_get, Eo *, NULL, EO_FUNC_CALL(name), const char *name);
+
+static Eo *
+_part_get(Eo *obj, void *class_data EINA_UNUSED, const char *name EINA_UNUSED)
+{
+ /* A normal part get will do something saner, we just create objects. */
+ return eo_add(SIMPLE_CLASS, obj);
+}
+
EO_VOID_FUNC_BODYV(simple_recursive, EO_FUNC_CALL(n), int n);
static void
EO_OP_FUNC(simple_a_print, _a_print, "Print property a"),
EO_OP_CLASS_FUNC(simple_class_hi_print, _class_hi_print, "Print property a"),
EO_OP_FUNC(simple_recursive, _recursive, "Recursive function"),
+ EO_OP_FUNC(simple_part_get, _part_get, "Part getter"),
EO_OP_FUNC(simple_pure_virtual, NULL, "Pure Virtual function"),
EO_OP_SENTINEL
};
EAPI void simple_recursive(int n);
EAPI void simple_pure_virtual(void);
EAPI void simple_no_implementation(void);
+EAPI Eo *simple_part_get(const char *name);
extern const Eo_Event_Description _EV_A_CHANGED;
#define EV_A_CHANGED (&(_EV_A_CHANGED))
}
END_TEST
+START_TEST(eo_parts)
+{
+ int a = 0;
+
+ eo_init();
+
+ Eo *obj = eo_add(SIMPLE_CLASS, NULL);
+
+ eo_do(obj, simple_a_set(3), a = simple_a_get());
+ ck_assert_int_eq(a, 3);
+
+ eo_do_part(obj, simple_part_get("test"),
+ simple_a_set(7),
+ a = simple_a_get()
+ );
+ ck_assert_int_eq(a, 7);
+
+ eo_do(obj, simple_a_set(3), a = simple_a_get());
+ ck_assert_int_eq(a, 3);
+
+ /* Faking a call, just asserting NULL as the part to check default values. */
+ eo_do_part(obj, NULL,
+ simple_a_set(7),
+ a = simple_a_get()
+ );
+ ck_assert_int_eq(a, 0);
+
+ eo_del(obj);
+
+ eo_shutdown();
+}
+END_TEST
+
void eo_test_general(TCase *tc)
{
tcase_add_test(tc, eo_simple);
tcase_add_test(tc, eo_add_do_and_custom);
tcase_add_test(tc, eo_pointers_indirection);
tcase_add_test(tc, eo_add_failures);
+ tcase_add_test(tc, eo_parts);
}