10 #include "class_simple.h"
15 Eo *obj = eo_add(EO_BASE_CLASS, NULL);
22 START_TEST(eo_data_fetch)
26 static const Eo_Class_Description class_desc = {
28 EO_CLASS_TYPE_REGULAR,
29 EO_CLASS_DESCRIPTION_OPS(NULL, NULL, 0),
38 const Eo_Class *klass = eo_class_new(&class_desc, EO_BASE_CLASS, NULL);
41 Eo *obj = eo_add(klass, NULL);
43 fail_if(eo_data_get(obj, SIMPLE_CLASS));
52 Eo *obj = eo_add(SIMPLE_CLASS, NULL);
53 Eo *obj2 = eo_add(SIMPLE_CLASS, NULL);
54 Eo *obj3 = eo_add(SIMPLE_CLASS, NULL);
57 fail_if(eo_ref_get(obj) != 2);
59 fail_if(eo_ref_get(obj) != 3);
62 fail_if(eo_ref_get(obj) != 2);
64 fail_if(eo_ref_get(obj) != 1);
68 fail_if(eo_ref_get(obj) != 1);
71 fail_if(eo_ref_get(obj) != 2);
74 fail_if(eo_ref_get(obj) != 2);
77 fail_if(eo_ref_get(obj) != 1);
84 /* Just check it doesn't seg atm. */
85 obj = eo_add(SIMPLE_CLASS, NULL);
94 START_TEST(eo_weak_reference)
98 Eo *obj = eo_add(SIMPLE_CLASS, NULL);
99 Eo *obj2 = eo_add(SIMPLE_CLASS, NULL);
100 Eo *wref, *wref2, *wref3;
101 eo_do(obj, eo_wref_add(&wref));
107 obj = eo_add(SIMPLE_CLASS, NULL);
108 eo_do(obj, eo_wref_add(&wref));
119 obj = eo_add(SIMPLE_CLASS, NULL);
121 eo_do(obj, eo_wref_add(&wref));
122 eo_do(obj, eo_wref_del(&wref));
125 eo_do(obj, eo_wref_add(&wref));
126 eo_do(obj2, eo_wref_del(&wref));
128 eo_wref_del_safe(&wref);
132 eo_do(obj, eo_wref_del(&wref));
135 wref = wref2 = wref3 = NULL;
136 eo_do(obj, eo_wref_add(&wref), eo_wref_add(&wref2), eo_wref_add(&wref3));
140 eo_do(obj, eo_wref_del(&wref), eo_wref_del(&wref2), eo_wref_del(&wref3));
145 eo_do(obj, eo_wref_add(&wref2), eo_wref_add(&wref3));
147 eo_do(obj, eo_wref_del(&wref));
149 eo_do(obj, eo_wref_del(&wref2), eo_wref_del(&wref3));
160 _a_set(Eo *obj EINA_UNUSED, void *class_data EINA_UNUSED, va_list *list EINA_UNUSED)
166 _op_errors_class_constructor(Eo_Class *klass)
168 const Eo_Op_Func_Description func_desc[] = {
169 EO_OP_FUNC(SIMPLE_ID(SIMPLE_SUB_ID_LAST), _a_set),
170 EO_OP_FUNC(SIMPLE_ID(SIMPLE_SUB_ID_LAST + 1), _a_set),
171 EO_OP_FUNC(0x0F010111, _a_set),
175 eo_class_funcs_set(klass, func_desc);
178 START_TEST(eo_op_errors)
182 static const Eo_Class_Description class_desc = {
184 EO_CLASS_TYPE_REGULAR,
185 EO_CLASS_DESCRIPTION_OPS(NULL, NULL, 0),
190 _op_errors_class_constructor,
194 const Eo_Class *klass = eo_class_new(&class_desc, SIMPLE_CLASS, NULL);
197 Eo *obj = eo_add(klass, NULL);
199 /* Out of bounds op for a legal class. */
200 fail_if(eo_do(obj, 0x00010111));
203 fail_if(eo_do(obj, 0x0F010111));
205 fail_if(eo_ref_get(obj) != 1);
208 fail_if(eo_ref_get(obj) != 2);
211 fail_if(eo_ref_get(obj) != 3);
214 fail_if(eo_ref_get(obj) != 2);
217 fail_if(eo_ref_get(obj) != 1);
221 obj = eo_add(SIMPLE_CLASS, NULL);
222 fail_if(!eo_do(obj, simple_a_print()));
223 fail_if(!eo_query(obj, simple_a_print()));
224 fail_if(eo_query(obj, simple_a_set(1)));
231 _fake_free_func(void *data)
240 START_TEST(eo_generic_data)
243 Eo *obj = eo_add(SIMPLE_CLASS, NULL);
246 eo_do(obj, eo_base_data_set("test1", (void *) 1, NULL));
247 eo_do(obj, eo_base_data_get("test1", &data));
248 fail_if(1 != (int) data);
249 eo_do(obj, eo_base_data_del("test1"));
250 eo_do(obj, eo_base_data_get("test1", &data));
253 eo_do(obj, eo_base_data_set("test1", (void *) 1, NULL));
254 eo_do(obj, eo_base_data_set("test2", (void *) 2, NULL));
255 eo_do(obj, eo_base_data_get("test1", &data));
256 fail_if(1 != (int) data);
257 eo_do(obj, eo_base_data_get("test2", &data));
258 fail_if(2 != (int) data);
260 eo_do(obj, eo_base_data_get("test2", &data));
261 fail_if(2 != (int) data);
262 eo_do(obj, eo_base_data_del("test2"));
263 eo_do(obj, eo_base_data_get("test2", &data));
266 eo_do(obj, eo_base_data_get("test1", &data));
267 fail_if(1 != (int) data);
268 eo_do(obj, eo_base_data_del("test1"));
269 eo_do(obj, eo_base_data_get("test1", &data));
273 eo_do(obj, eo_base_data_set("test3", &a, _fake_free_func));
274 eo_do(obj, eo_base_data_get("test3", &data));
276 eo_do(obj, eo_base_data_get("test3", NULL));
277 eo_do(obj, eo_base_data_del("test3"));
281 eo_do(obj, eo_base_data_set("test3", &a, _fake_free_func));
282 eo_do(obj, eo_base_data_set("test3", NULL, _fake_free_func));
286 eo_do(obj, eo_base_data_set(NULL, &a, _fake_free_func));
287 eo_do(obj, eo_base_data_get(NULL, &data));
289 eo_do(obj, eo_base_data_del(NULL));
292 eo_do(obj, eo_base_data_set("test3", &a, _fake_free_func));
293 eo_do(obj, eo_base_data_set("test3", NULL, NULL));
295 eo_do(obj, eo_base_data_set("test3", &a, _fake_free_func));
304 START_TEST(eo_magic_checks)
306 char buf[sizeof(long)]; /* Just enough to hold eina magic + a bit more. */
309 memset(buf, 1, sizeof(buf));
310 Eo *obj = eo_add((Eo_Class *) buf, NULL);
313 obj = eo_add(SIMPLE_CLASS, (Eo *) buf);
316 obj = eo_add(SIMPLE_CLASS, NULL);
319 fail_if(eo_do((Eo *) buf, EO_NOOP));
320 fail_if(eo_do_super((Eo *) buf, EO_NOOP));
321 fail_if(eo_class_get((Eo *) buf));
322 fail_if(eo_class_name_get((Eo_Class*) buf));
323 eo_class_funcs_set((Eo_Class *) buf, NULL);
325 fail_if(eo_class_new(NULL, (Eo_Class *) buf), NULL);
327 eo_xref(obj, (Eo *) buf);
328 eo_xunref(obj, (Eo *) buf);
329 eo_xref((Eo *) buf, obj);
330 eo_xunref((Eo *) buf, obj);
333 eo_unref((Eo *) buf);
335 fail_if(0 != eo_ref_get((Eo *) buf));
338 eo_do((Eo *) buf, eo_wref_add(&wref));
343 fail_if(eo_parent_get((Eo *) buf));
345 eo_constructor_error_set((Eo *) buf);
346 fail_if(!eo_constructor_error_get((Eo *) buf));
348 eo_constructor_super((Eo *) buf);
349 eo_destructor_super((Eo *) buf);
351 fail_if(eo_data_get((Eo *) buf, SIMPLE_CLASS));
353 eo_composite_object_attach((Eo *) buf, obj);
354 eo_composite_object_attach(obj, (Eo *) buf);
355 eo_composite_object_detach((Eo *) buf, obj);
356 eo_composite_object_detach(obj, (Eo *) buf);
357 eo_composite_is((Eo *) buf);
359 fail_if(eo_event_callback_add((Eo *) buf, NULL, NULL, NULL));
360 fail_if(eo_event_callback_del_lazy((Eo *) buf, NULL, NULL));
361 fail_if(eo_event_callback_del((Eo *) buf, NULL, NULL, NULL));
362 fail_if(eo_event_callback_call((Eo *) buf, NULL, NULL));
364 fail_if(eo_event_callback_forwarder_add((Eo *) buf, NULL, obj));
365 fail_if(eo_event_callback_forwarder_add(obj, NULL, (Eo *) buf));
366 fail_if(eo_event_callback_forwarder_del((Eo *) buf, NULL, obj));
367 fail_if(eo_event_callback_forwarder_del(obj, NULL, (Eo *) buf));
375 void eo_test_general(TCase *tc)
377 tcase_add_test(tc, eo_generic_data);
378 tcase_add_test(tc, eo_op_errors);
379 tcase_add_test(tc, eo_simple);
380 tcase_add_test(tc, eo_weak_reference);
381 tcase_add_test(tc, eo_refs);
382 tcase_add_test(tc, eo_magic_checks);
383 tcase_add_test(tc, eo_data_fetch);