9 #include "class_simple.h"
11 START_TEST(eo_incomplete_desc)
15 const Eo_Class *klass;
16 static Eo_Op TMP_BASE_ID = EO_NOOP;
24 static const Eo_Op_Description op_desc[] = {
25 EO_OP_DESCRIPTION(TEST_SUB_ID_FOO, "Foo"),
26 EO_OP_DESCRIPTION(TEST_SUB_ID_FOO2, "Foo2"),
27 EO_OP_DESCRIPTION_SENTINEL
30 static const Eo_Op_Description op_desc_wrong[] = {
31 EO_OP_DESCRIPTION(TEST_SUB_ID_FOO2, "Foo2"),
32 EO_OP_DESCRIPTION(TEST_SUB_ID_FOO, "Foo"),
33 EO_OP_DESCRIPTION_SENTINEL
36 /* XXX: In real life this should be const, this is just for testing. */
37 static Eo_Class_Description class_desc = {
40 EO_CLASS_TYPE_REGULAR,
41 EO_CLASS_DESCRIPTION_OPS(NULL, op_desc, 1),
48 klass = eo_class_new(&class_desc, NULL, NULL);
51 class_desc.ops.base_op_id = &TMP_BASE_ID;
52 class_desc.ops.descs = NULL;
54 klass = eo_class_new(&class_desc, NULL, NULL);
57 class_desc.ops.descs = op_desc;
58 class_desc.ops.count = TEST_SUB_ID_LAST + 1;
60 klass = eo_class_new(&class_desc, NULL, NULL);
63 class_desc.ops.count = 0;
65 klass = eo_class_new(&class_desc, NULL, NULL);
68 class_desc.ops.count = TEST_SUB_ID_LAST;
69 class_desc.ops.descs = op_desc_wrong;
71 klass = eo_class_new(&class_desc, NULL, NULL);
74 class_desc.ops.descs = op_desc;
75 class_desc.name = NULL;
77 klass = eo_class_new(&class_desc, NULL, NULL);
80 class_desc.name = "Simple";
83 klass = eo_class_new(NULL, NULL, NULL);
86 /* Should create a class. */
87 klass = eo_class_new(&class_desc, EO_BASE_CLASS, NULL);
96 START_TEST(eo_inherit_errors)
100 const Eo_Class *klass;
101 const Eo_Class *klass_mixin;
102 const Eo_Class *klass_simple;
104 static const Eo_Class_Description class_desc_simple = {
107 EO_CLASS_TYPE_REGULAR,
108 EO_CLASS_DESCRIPTION_OPS(NULL, NULL, 0),
115 static const Eo_Class_Description class_desc_mixin = {
119 EO_CLASS_DESCRIPTION_OPS(NULL, NULL, 0),
126 static Eo_Class_Description class_desc = {
130 EO_CLASS_DESCRIPTION_OPS(NULL, NULL, 0),
137 klass_mixin = eo_class_new(&class_desc_mixin, NULL, NULL);
138 fail_if(!klass_mixin);
140 klass_simple = eo_class_new(&class_desc_simple, EO_BASE_CLASS, NULL);
141 fail_if(!klass_simple);
143 klass = eo_class_new(&class_desc, klass_simple, NULL);
146 class_desc.type = EO_CLASS_TYPE_REGULAR;
148 klass = eo_class_new(&class_desc, klass_mixin, NULL);
157 START_TEST(eo_inconsistent_mro)
161 const Eo_Class *klass;
162 const Eo_Class *klass_mixin;
163 const Eo_Class *klass_mixin2;
164 const Eo_Class *klass_mixin3;
166 static const Eo_Class_Description class_desc_simple = {
169 EO_CLASS_TYPE_REGULAR,
170 EO_CLASS_DESCRIPTION_OPS(NULL, NULL, 0),
177 static const Eo_Class_Description class_desc_mixin = {
181 EO_CLASS_DESCRIPTION_OPS(NULL, NULL, 0),
188 static const Eo_Class_Description class_desc_mixin2 = {
192 EO_CLASS_DESCRIPTION_OPS(NULL, NULL, 0),
199 static const Eo_Class_Description class_desc_mixin3 = {
203 EO_CLASS_DESCRIPTION_OPS(NULL, NULL, 0),
210 klass_mixin = eo_class_new(&class_desc_mixin, NULL, NULL);
211 fail_if(!klass_mixin);
213 klass_mixin2 = eo_class_new(&class_desc_mixin2, klass_mixin, NULL);
214 fail_if(!klass_mixin2);
216 klass_mixin3 = eo_class_new(&class_desc_mixin3, klass_mixin, NULL);
217 fail_if(!klass_mixin3);
219 klass = eo_class_new(&class_desc_simple, EO_BASE_CLASS, klass_mixin, klass_mixin2, NULL);
222 klass = eo_class_new(&class_desc_simple, EO_BASE_CLASS, klass_mixin2, klass_mixin, NULL);
225 klass = eo_class_new(&class_desc_simple, EO_BASE_CLASS, klass_mixin2, klass_mixin3, NULL);
232 static void _stub_class_constructor(Eo_Class *klass EINA_UNUSED) {}
234 START_TEST(eo_bad_interface)
238 const Eo_Class *klass;
240 static Eo_Class_Description class_desc = {
243 EO_CLASS_TYPE_INTERFACE,
244 EO_CLASS_DESCRIPTION_OPS(NULL, NULL, 0),
251 klass = eo_class_new(&class_desc, NULL, NULL);
254 class_desc.data_size = 0;
255 class_desc.class_constructor = _stub_class_constructor;
257 klass = eo_class_new(&class_desc, NULL, NULL);
260 class_desc.class_constructor = NULL;
261 class_desc.class_destructor = _stub_class_constructor;
263 klass = eo_class_new(&class_desc, NULL, NULL);
266 class_desc.class_destructor = NULL;
268 klass = eo_class_new(&class_desc, NULL, NULL);
275 static int _const_ops_counter = 0;
278 _const_ops_a_set(Eo *obj EINA_UNUSED, void *class_data EINA_UNUSED, va_list *list)
280 int a = va_arg(*list, int);
282 _const_ops_counter++;
286 _const_ops_a_print(Eo *obj EINA_UNUSED, void *class_data EINA_UNUSED, va_list *list EINA_UNUSED)
288 _const_ops_counter++;
292 _const_ops_class_hi_print(Eo *obj EINA_UNUSED, void *class_data EINA_UNUSED, va_list *list EINA_UNUSED)
294 _const_ops_counter++;
298 _const_ops_class_constructor(Eo_Class *klass)
300 const Eo_Op_Func_Description func_desc[] = {
301 EO_OP_FUNC(SIMPLE_ID(SIMPLE_SUB_ID_A_SET), (eo_op_func_type) _const_ops_a_set),
302 EO_OP_FUNC(SIMPLE_ID(SIMPLE_SUB_ID_A_PRINT), (eo_op_func_type) _const_ops_a_print),
303 EO_OP_FUNC_CLASS(SIMPLE_ID(SIMPLE_SUB_ID_A_SET), (eo_op_func_type_class) _const_ops_a_set),
304 EO_OP_FUNC_CLASS(SIMPLE_ID(SIMPLE_SUB_ID_A_PRINT), (eo_op_func_type_class) _const_ops_a_print),
305 EO_OP_FUNC(SIMPLE_ID(SIMPLE_SUB_ID_CLASS_HI_PRINT), (eo_op_func_type) _const_ops_class_hi_print),
306 EO_OP_FUNC(SIMPLE_ID(SIMPLE_SUB_ID_CLASS_HI_PRINT), (eo_op_func_type) _const_ops_class_hi_print),
310 eo_class_funcs_set(klass, func_desc);
313 START_TEST(eo_op_types)
317 const Eo_Class *klass;
319 static Eo_Class_Description class_desc = {
322 EO_CLASS_TYPE_REGULAR,
323 EO_CLASS_DESCRIPTION_OPS(NULL, NULL, 0),
326 _const_ops_class_constructor,
330 klass = eo_class_new(&class_desc, SIMPLE_CLASS, NULL);
333 /* Add class checks here... */
334 Eo *obj = eo_add(klass, NULL);
335 eo_do(obj, simple_a_set(7), simple_a_print(), simple_class_hi_print());
343 void eo_test_class_errors(TCase *tc)
345 tcase_add_test(tc, eo_incomplete_desc);
346 tcase_add_test(tc, eo_inherit_errors);
347 tcase_add_test(tc, eo_inconsistent_mro);
348 tcase_add_test(tc, eo_bad_interface);
349 tcase_add_test(tc, eo_op_types);