10 #include "class_simple.h"
15 Eo *obj = eo_add(EO_BASE_CLASS, NULL);
22 START_TEST(eo_data_fetch)
26 /* Usually should be const, not const only for the test... */
27 static Eo_Class_Description class_desc = {
29 EO_CLASS_TYPE_REGULAR,
30 EO_CLASS_DESCRIPTION_OPS(NULL, NULL, 0),
39 const Eo_Class *klass = eo_class_new(&class_desc, 0, EO_BASE_CLASS, NULL);
42 Eo *obj = eo_add(klass, NULL);
45 fail_if(eo_data_get(obj, SIMPLE_CLASS));
49 class_desc.data_size = 0;
50 klass = eo_class_new(&class_desc, 0, EO_BASE_CLASS, NULL);
53 obj = eo_add(klass, NULL);
55 fail_if(eo_data_get(obj, klass));
62 START_TEST(eo_composite_tests)
66 Eo *obj = eo_add(SIMPLE_CLASS, NULL);
68 Eo *obj2 = eo_add(SIMPLE_CLASS, NULL);
71 eo_composite_object_attach(obj, obj2);
72 eo_parent_set(obj2, NULL);
73 fail_if(eo_composite_is(obj2));
82 START_TEST(eo_static_classes)
86 static const Eo_Op_Description op_desc[] = {
87 EO_OP_DESCRIPTION(SIMPLE_SUB_ID_A_SET, "i", "Set property A"),
88 EO_OP_DESCRIPTION_SENTINEL
91 /* Usually should be const, not const only for the test... */
92 static Eo_Class_Description class_desc = {
94 EO_CLASS_TYPE_REGULAR,
95 EO_CLASS_DESCRIPTION_OPS(NULL, op_desc, 1),
104 const Eo_Class *klass = eo_class_new(&class_desc, 1, EO_BASE_CLASS, NULL);
107 klass = eo_class_new(&class_desc, 1000, EO_BASE_CLASS, NULL);
110 klass = eo_class_new(&class_desc, 2, EO_BASE_CLASS, NULL);
118 _man_con(Eo *obj, void *data EINA_UNUSED)
120 eo_manual_free_set(obj, EINA_TRUE);
121 eo_constructor_super(obj);
125 _man_des(Eo *obj, void *data EINA_UNUSED)
127 eo_destructor_super(obj);
128 eo_manual_free_set(obj, EINA_FALSE);
131 START_TEST(eo_man_free)
135 /* Usually should be const, not const only for the test... */
136 static Eo_Class_Description class_desc = {
138 EO_CLASS_TYPE_REGULAR,
139 EO_CLASS_DESCRIPTION_OPS(NULL, NULL, 0),
148 const Eo_Class *klass = eo_class_new(&class_desc, 0, EO_BASE_CLASS, NULL);
151 Eo *obj = eo_add(klass, NULL);
155 obj = eo_add(klass, NULL);
160 class_desc.destructor = NULL;
161 klass = eo_class_new(&class_desc, 0, EO_BASE_CLASS, NULL);
164 obj = eo_add(klass, NULL);
170 obj = eo_add(klass, NULL);
175 class_desc.constructor = NULL;
176 klass = eo_class_new(&class_desc, 0, EO_BASE_CLASS, NULL);
179 obj = eo_add(klass, NULL);
184 obj = eo_add(klass, NULL);
186 eo_manual_free_set(obj, EINA_TRUE);
200 Eo *obj = eo_add(SIMPLE_CLASS, NULL);
201 Eo *obj2 = eo_add(SIMPLE_CLASS, NULL);
202 Eo *obj3 = eo_add(SIMPLE_CLASS, NULL);
205 fail_if(eo_ref_get(obj) != 2);
207 fail_if(eo_ref_get(obj) != 3);
209 eo_xunref(obj, obj2);
210 fail_if(eo_ref_get(obj) != 2);
211 eo_xunref(obj, obj3);
212 fail_if(eo_ref_get(obj) != 1);
215 eo_xunref(obj, obj3);
216 fail_if(eo_ref_get(obj) != 1);
219 fail_if(eo_ref_get(obj) != 2);
221 eo_xunref(obj, obj3);
222 fail_if(eo_ref_get(obj) != 2);
224 eo_xunref(obj, obj2);
225 fail_if(eo_ref_get(obj) != 1);
228 /* Check we don't seg if there's an extra xref. */
236 /* Check hierarchy */
237 obj = eo_add(SIMPLE_CLASS, NULL);
238 obj2 = eo_add(SIMPLE_CLASS, obj);
241 eo_do(obj2, eo_wref_add(&wref));
246 fail_if(!wref); /* Parent is still holding a reference. */
252 /* Just check it doesn't seg atm. */
253 obj = eo_add(SIMPLE_CLASS, NULL);
258 obj = eo_add(SIMPLE_CLASS, NULL);
259 obj2 = eo_add(SIMPLE_CLASS, obj);
269 START_TEST(eo_weak_reference)
273 Eo *obj = eo_add(SIMPLE_CLASS, NULL);
274 Eo *obj2 = eo_add(SIMPLE_CLASS, NULL);
275 Eo *wref, *wref2, *wref3;
276 eo_do(obj, eo_wref_add(&wref));
282 obj = eo_add(SIMPLE_CLASS, NULL);
283 eo_do(obj, eo_wref_add(&wref));
294 obj = eo_add(SIMPLE_CLASS, NULL);
296 eo_do(obj, eo_wref_add(&wref));
297 eo_do(obj, eo_wref_del(&wref));
300 eo_do(obj, eo_wref_add(&wref));
301 eo_do(obj2, eo_wref_del(&wref));
303 eo_wref_del_safe(&wref);
307 eo_do(obj, eo_wref_del(&wref));
310 wref = wref2 = wref3 = NULL;
311 eo_do(obj, eo_wref_add(&wref), eo_wref_add(&wref2), eo_wref_add(&wref3));
315 eo_do(obj, eo_wref_del(&wref), eo_wref_del(&wref2), eo_wref_del(&wref3));
320 eo_do(obj, eo_wref_add(&wref2), eo_wref_add(&wref3));
322 eo_do(obj, eo_wref_del(&wref));
324 eo_do(obj, eo_wref_del(&wref2), eo_wref_del(&wref3));
335 _a_set(Eo *obj EINA_UNUSED, void *class_data EINA_UNUSED, va_list *list EINA_UNUSED)
341 _op_errors_class_constructor(Eo_Class *klass)
343 const Eo_Op_Func_Description func_desc[] = {
344 EO_OP_FUNC(SIMPLE_ID(SIMPLE_SUB_ID_LAST), _a_set),
345 EO_OP_FUNC(SIMPLE_ID(SIMPLE_SUB_ID_LAST + 1), _a_set),
346 EO_OP_FUNC(0x0F010111, _a_set),
350 eo_class_funcs_set(klass, func_desc);
353 START_TEST(eo_op_errors)
357 static const Eo_Class_Description class_desc = {
359 EO_CLASS_TYPE_REGULAR,
360 EO_CLASS_DESCRIPTION_OPS(NULL, NULL, 0),
365 _op_errors_class_constructor,
369 const Eo_Class *klass = eo_class_new(&class_desc, 0, SIMPLE_CLASS, NULL);
372 Eo *obj = eo_add(klass, NULL);
374 /* Out of bounds op for a legal class. */
375 fail_if(eo_do(obj, EO_BASE_ID(0x0111)));
378 fail_if(eo_do(obj, 0x0F010111));
380 fail_if(eo_ref_get(obj) != 1);
383 fail_if(eo_ref_get(obj) != 2);
386 fail_if(eo_ref_get(obj) != 3);
389 fail_if(eo_ref_get(obj) != 2);
392 fail_if(eo_ref_get(obj) != 1);
396 obj = eo_add(SIMPLE_CLASS, NULL);
397 fail_if(!eo_do(obj, simple_a_print()));
398 fail_if(!eo_query(obj, simple_a_print()));
399 fail_if(eo_query(obj, simple_a_set(1)));
407 _fake_free_func(void *data)
416 START_TEST(eo_generic_data)
419 Eo *obj = eo_add(SIMPLE_CLASS, NULL);
422 eo_do(obj, eo_base_data_set("test1", (void *) 1, NULL));
423 eo_do(obj, eo_base_data_get("test1", &data));
424 fail_if(1 != (int) data);
425 eo_do(obj, eo_base_data_del("test1"));
426 eo_do(obj, eo_base_data_get("test1", &data));
429 eo_do(obj, eo_base_data_set("test1", (void *) 1, NULL));
430 eo_do(obj, eo_base_data_set("test2", (void *) 2, NULL));
431 eo_do(obj, eo_base_data_get("test1", &data));
432 fail_if(1 != (int) data);
433 eo_do(obj, eo_base_data_get("test2", &data));
434 fail_if(2 != (int) data);
436 eo_do(obj, eo_base_data_get("test2", &data));
437 fail_if(2 != (int) data);
438 eo_do(obj, eo_base_data_del("test2"));
439 eo_do(obj, eo_base_data_get("test2", &data));
442 eo_do(obj, eo_base_data_get("test1", &data));
443 fail_if(1 != (int) data);
444 eo_do(obj, eo_base_data_del("test1"));
445 eo_do(obj, eo_base_data_get("test1", &data));
449 eo_do(obj, eo_base_data_set("test3", &a, _fake_free_func));
450 eo_do(obj, eo_base_data_get("test3", &data));
452 eo_do(obj, eo_base_data_get("test3", NULL));
453 eo_do(obj, eo_base_data_del("test3"));
457 eo_do(obj, eo_base_data_set("test3", &a, _fake_free_func));
458 eo_do(obj, eo_base_data_set("test3", NULL, _fake_free_func));
462 eo_do(obj, eo_base_data_set(NULL, &a, _fake_free_func));
463 eo_do(obj, eo_base_data_get(NULL, &data));
465 eo_do(obj, eo_base_data_del(NULL));
468 eo_do(obj, eo_base_data_set("test3", &a, _fake_free_func));
469 eo_do(obj, eo_base_data_set("test3", NULL, NULL));
471 eo_do(obj, eo_base_data_set("test3", &a, _fake_free_func));
480 START_TEST(eo_magic_checks)
482 char _buf[sizeof(long)]; /* Just enough to hold eina magic + a bit more. */
486 memset(_buf, 1, sizeof(_buf));
488 Eo *obj = eo_add(SIMPLE_CLASS, (Eo *) buf);
493 obj = eo_add((Eo_Class *) buf, NULL);
496 obj = eo_add(SIMPLE_CLASS, NULL);
499 fail_if(eo_do((Eo *) buf, EO_NOOP));
500 fail_if(eo_do_super((Eo *) buf, EO_NOOP));
501 fail_if(eo_class_get((Eo *) buf));
502 fail_if(eo_class_name_get((Eo_Class*) buf));
503 eo_class_funcs_set((Eo_Class *) buf, NULL);
504 eo_class_do((Eo_Class *) buf, NULL);
505 eo_class_do_super((Eo_Class *) buf, EO_NOOP);
507 fail_if(eo_class_new(NULL, 0, (Eo_Class *) buf), NULL);
509 eo_xref(obj, (Eo *) buf);
510 eo_xunref(obj, (Eo *) buf);
511 eo_xref((Eo *) buf, obj);
512 eo_xunref((Eo *) buf, obj);
515 eo_unref((Eo *) buf);
518 fail_if(0 != eo_ref_get((Eo *) buf));
521 eo_do((Eo *) buf, eo_wref_add(&wref));
524 fail_if(eo_parent_get((Eo *) buf));
526 eo_error_set((Eo *) buf);
528 eo_constructor_super((Eo *) buf);
529 eo_destructor_super((Eo *) buf);
531 fail_if(eo_data_get((Eo *) buf, SIMPLE_CLASS));
533 eo_composite_object_attach((Eo *) buf, obj);
534 eo_composite_object_attach(obj, (Eo *) buf);
535 eo_composite_object_detach((Eo *) buf, obj);
536 eo_composite_object_detach(obj, (Eo *) buf);
537 eo_composite_is((Eo *) buf);
539 eo_do(obj, eo_event_callback_forwarder_add(NULL, (Eo *) buf));
540 eo_do(obj, eo_event_callback_forwarder_del(NULL, (Eo *) buf));
542 eo_manual_free_set((Eo *) buf, EINA_TRUE);
543 eo_manual_free((Eo *) buf);
557 void eo_test_general(TCase *tc)
559 tcase_add_test(tc, eo_generic_data);
560 tcase_add_test(tc, eo_op_errors);
561 tcase_add_test(tc, eo_simple);
562 tcase_add_test(tc, eo_weak_reference);
563 tcase_add_test(tc, eo_refs);
564 tcase_add_test(tc, eo_magic_checks);
565 tcase_add_test(tc, eo_data_fetch);
566 tcase_add_test(tc, eo_man_free);
567 tcase_add_test(tc, eo_static_classes);
568 tcase_add_test(tc, eo_composite_tests);