5 #include "eobj_suite.h"
8 #include "class_simple.h"
10 START_TEST(eobj_incomplete_desc)
14 const Eobj_Class *klass;
15 static Eobj_Op TMP_BASE_ID = EOBJ_NOOP;
23 static const Eobj_Op_Description op_desc[] = {
24 EOBJ_OP_DESCRIPTION(TEST_SUB_ID_FOO, "i", "Foo"),
25 EOBJ_OP_DESCRIPTION(TEST_SUB_ID_FOO2, "i", "Foo2"),
26 EOBJ_OP_DESCRIPTION_SENTINEL
29 static const Eobj_Op_Description op_desc_wrong[] = {
30 EOBJ_OP_DESCRIPTION(TEST_SUB_ID_FOO2, "i", "Foo2"),
31 EOBJ_OP_DESCRIPTION(TEST_SUB_ID_FOO, "i", "Foo"),
32 EOBJ_OP_DESCRIPTION_SENTINEL
35 /* XXX: In real life this should be const, this is just for testing. */
36 static Eobj_Class_Description class_desc = {
38 EOBJ_CLASS_TYPE_REGULAR,
39 EOBJ_CLASS_DESCRIPTION_OPS(NULL, op_desc, 1),
48 klass = eobj_class_new(&class_desc, NULL, NULL);
51 class_desc.ops.base_op_id = &TMP_BASE_ID;
52 class_desc.ops.descs = NULL;
54 klass = eobj_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 = eobj_class_new(&class_desc, NULL, NULL);
63 class_desc.ops.count = 0;
65 klass = eobj_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 = eobj_class_new(&class_desc, NULL, NULL);
74 class_desc.ops.descs = op_desc;
75 class_desc.name = NULL;
77 klass = eobj_class_new(&class_desc, NULL, NULL);
80 class_desc.name = "Simple";
83 klass = eobj_class_new(NULL, NULL, NULL);
86 /* Should create a class. */
87 klass = eobj_class_new(&class_desc, NULL, NULL);
96 START_TEST(eobj_inherit_errors)
100 const Eobj_Class *klass;
101 const Eobj_Class *klass_mixin;
102 const Eobj_Class *klass_simple;
104 static const Eobj_Class_Description class_desc_simple = {
106 EOBJ_CLASS_TYPE_REGULAR,
107 EOBJ_CLASS_DESCRIPTION_OPS(NULL, NULL, 0),
116 static const Eobj_Class_Description class_desc_mixin = {
118 EOBJ_CLASS_TYPE_MIXIN,
119 EOBJ_CLASS_DESCRIPTION_OPS(NULL, NULL, 0),
128 static Eobj_Class_Description class_desc = {
130 EOBJ_CLASS_TYPE_MIXIN,
131 EOBJ_CLASS_DESCRIPTION_OPS(NULL, NULL, 0),
140 klass_mixin = eobj_class_new(&class_desc_mixin, NULL, NULL);
141 fail_if(!klass_mixin);
143 klass_simple = eobj_class_new(&class_desc_simple, NULL, NULL);
144 fail_if(!klass_simple);
146 klass = eobj_class_new(&class_desc, klass_simple, NULL);
149 class_desc.type = EOBJ_CLASS_TYPE_REGULAR;
151 klass = eobj_class_new(&class_desc, klass_mixin, NULL);
160 START_TEST(eobj_inconsistent_mro)
164 const Eobj_Class *klass;
165 const Eobj_Class *klass_mixin;
166 const Eobj_Class *klass_mixin2;
167 const Eobj_Class *klass_mixin3;
169 static const Eobj_Class_Description class_desc_simple = {
171 EOBJ_CLASS_TYPE_REGULAR,
172 EOBJ_CLASS_DESCRIPTION_OPS(NULL, NULL, 0),
181 static const Eobj_Class_Description class_desc_mixin = {
183 EOBJ_CLASS_TYPE_MIXIN,
184 EOBJ_CLASS_DESCRIPTION_OPS(NULL, NULL, 0),
193 static const Eobj_Class_Description class_desc_mixin2 = {
195 EOBJ_CLASS_TYPE_MIXIN,
196 EOBJ_CLASS_DESCRIPTION_OPS(NULL, NULL, 0),
205 static const Eobj_Class_Description class_desc_mixin3 = {
207 EOBJ_CLASS_TYPE_MIXIN,
208 EOBJ_CLASS_DESCRIPTION_OPS(NULL, NULL, 0),
217 klass_mixin = eobj_class_new(&class_desc_mixin, NULL, NULL);
218 fail_if(!klass_mixin);
220 klass_mixin2 = eobj_class_new(&class_desc_mixin2, klass_mixin, NULL);
221 fail_if(!klass_mixin2);
223 klass_mixin3 = eobj_class_new(&class_desc_mixin3, klass_mixin, NULL);
224 fail_if(!klass_mixin3);
226 klass = eobj_class_new(&class_desc_simple, EOBJ_BASE_CLASS, klass_mixin, klass_mixin2, NULL);
229 klass = eobj_class_new(&class_desc_simple, EOBJ_BASE_CLASS, klass_mixin2, klass_mixin, NULL);
232 klass = eobj_class_new(&class_desc_simple, EOBJ_BASE_CLASS, klass_mixin2, klass_mixin3, NULL);
239 static void _stub_constructor(Eobj *obj EINA_UNUSED, void *data EINA_UNUSED) {}
240 static void _stub_class_constructor(Eobj_Class *klass EINA_UNUSED) {}
242 START_TEST(eobj_bad_interface)
246 const Eobj_Class *klass;
248 static Eobj_Class_Description class_desc = {
250 EOBJ_CLASS_TYPE_INTERFACE,
251 EOBJ_CLASS_DESCRIPTION_OPS(NULL, NULL, 0),
260 klass = eobj_class_new(&class_desc, NULL, NULL);
263 class_desc.data_size = 0;
264 class_desc.constructor = _stub_constructor;
266 klass = eobj_class_new(&class_desc, NULL, NULL);
269 class_desc.constructor = NULL;
270 class_desc.destructor = _stub_constructor;
272 klass = eobj_class_new(&class_desc, NULL, NULL);
275 class_desc.destructor = NULL;
276 class_desc.class_constructor = _stub_class_constructor;
278 klass = eobj_class_new(&class_desc, NULL, NULL);
281 class_desc.class_constructor = NULL;
282 class_desc.class_destructor = _stub_class_constructor;
284 klass = eobj_class_new(&class_desc, NULL, NULL);
287 class_desc.class_destructor = NULL;
289 klass = eobj_class_new(&class_desc, NULL, NULL);
296 void eobj_test_class_errors(TCase *tc)
298 tcase_add_test(tc, eobj_incomplete_desc);
299 tcase_add_test(tc, eobj_inherit_errors);
300 tcase_add_test(tc, eobj_inconsistent_mro);
301 tcase_add_test(tc, eobj_bad_interface);