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, 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, EO_BASE_CLASS, NULL);
53 obj = eo_add(klass, NULL);
55 fail_if(eo_data_get(obj, klass));
65 Eo *obj = eo_add(SIMPLE_CLASS, NULL);
66 Eo *obj2 = eo_add(SIMPLE_CLASS, NULL);
67 Eo *obj3 = eo_add(SIMPLE_CLASS, NULL);
70 fail_if(eo_ref_get(obj) != 2);
72 fail_if(eo_ref_get(obj) != 3);
75 fail_if(eo_ref_get(obj) != 2);
77 fail_if(eo_ref_get(obj) != 1);
81 fail_if(eo_ref_get(obj) != 1);
84 fail_if(eo_ref_get(obj) != 2);
87 fail_if(eo_ref_get(obj) != 2);
90 fail_if(eo_ref_get(obj) != 1);
97 /* Just check it doesn't seg atm. */
98 obj = eo_add(SIMPLE_CLASS, NULL);
107 START_TEST(eo_weak_reference)
111 Eo *obj = eo_add(SIMPLE_CLASS, NULL);
112 Eo *obj2 = eo_add(SIMPLE_CLASS, NULL);
113 Eo *wref, *wref2, *wref3;
114 eo_do(obj, eo_wref_add(&wref));
120 obj = eo_add(SIMPLE_CLASS, NULL);
121 eo_do(obj, eo_wref_add(&wref));
132 obj = eo_add(SIMPLE_CLASS, NULL);
134 eo_do(obj, eo_wref_add(&wref));
135 eo_do(obj, eo_wref_del(&wref));
138 eo_do(obj, eo_wref_add(&wref));
139 eo_do(obj2, eo_wref_del(&wref));
141 eo_wref_del_safe(&wref);
145 eo_do(obj, eo_wref_del(&wref));
148 wref = wref2 = wref3 = NULL;
149 eo_do(obj, eo_wref_add(&wref), eo_wref_add(&wref2), eo_wref_add(&wref3));
153 eo_do(obj, eo_wref_del(&wref), eo_wref_del(&wref2), eo_wref_del(&wref3));
158 eo_do(obj, eo_wref_add(&wref2), eo_wref_add(&wref3));
160 eo_do(obj, eo_wref_del(&wref));
162 eo_do(obj, eo_wref_del(&wref2), eo_wref_del(&wref3));
173 _a_set(Eo *obj EINA_UNUSED, void *class_data EINA_UNUSED, va_list *list EINA_UNUSED)
179 _op_errors_class_constructor(Eo_Class *klass)
181 const Eo_Op_Func_Description func_desc[] = {
182 EO_OP_FUNC(SIMPLE_ID(SIMPLE_SUB_ID_LAST), _a_set),
183 EO_OP_FUNC(SIMPLE_ID(SIMPLE_SUB_ID_LAST + 1), _a_set),
184 EO_OP_FUNC(0x0F010111, _a_set),
188 eo_class_funcs_set(klass, func_desc);
191 START_TEST(eo_op_errors)
195 static const Eo_Class_Description class_desc = {
197 EO_CLASS_TYPE_REGULAR,
198 EO_CLASS_DESCRIPTION_OPS(NULL, NULL, 0),
203 _op_errors_class_constructor,
207 const Eo_Class *klass = eo_class_new(&class_desc, SIMPLE_CLASS, NULL);
210 Eo *obj = eo_add(klass, NULL);
212 /* Out of bounds op for a legal class. */
213 fail_if(eo_do(obj, 0x00010111));
216 fail_if(eo_do(obj, 0x0F010111));
218 fail_if(eo_ref_get(obj) != 1);
221 fail_if(eo_ref_get(obj) != 2);
224 fail_if(eo_ref_get(obj) != 3);
227 fail_if(eo_ref_get(obj) != 2);
230 fail_if(eo_ref_get(obj) != 1);
234 obj = eo_add(SIMPLE_CLASS, NULL);
235 fail_if(!eo_do(obj, simple_a_print()));
236 fail_if(!eo_query(obj, simple_a_print()));
237 fail_if(eo_query(obj, simple_a_set(1)));
244 _fake_free_func(void *data)
253 START_TEST(eo_generic_data)
256 Eo *obj = eo_add(SIMPLE_CLASS, NULL);
259 eo_do(obj, eo_base_data_set("test1", (void *) 1, NULL));
260 eo_do(obj, eo_base_data_get("test1", &data));
261 fail_if(1 != (int) data);
262 eo_do(obj, eo_base_data_del("test1"));
263 eo_do(obj, eo_base_data_get("test1", &data));
266 eo_do(obj, eo_base_data_set("test1", (void *) 1, NULL));
267 eo_do(obj, eo_base_data_set("test2", (void *) 2, NULL));
268 eo_do(obj, eo_base_data_get("test1", &data));
269 fail_if(1 != (int) data);
270 eo_do(obj, eo_base_data_get("test2", &data));
271 fail_if(2 != (int) data);
273 eo_do(obj, eo_base_data_get("test2", &data));
274 fail_if(2 != (int) data);
275 eo_do(obj, eo_base_data_del("test2"));
276 eo_do(obj, eo_base_data_get("test2", &data));
279 eo_do(obj, eo_base_data_get("test1", &data));
280 fail_if(1 != (int) data);
281 eo_do(obj, eo_base_data_del("test1"));
282 eo_do(obj, eo_base_data_get("test1", &data));
286 eo_do(obj, eo_base_data_set("test3", &a, _fake_free_func));
287 eo_do(obj, eo_base_data_get("test3", &data));
289 eo_do(obj, eo_base_data_get("test3", NULL));
290 eo_do(obj, eo_base_data_del("test3"));
294 eo_do(obj, eo_base_data_set("test3", &a, _fake_free_func));
295 eo_do(obj, eo_base_data_set("test3", NULL, _fake_free_func));
299 eo_do(obj, eo_base_data_set(NULL, &a, _fake_free_func));
300 eo_do(obj, eo_base_data_get(NULL, &data));
302 eo_do(obj, eo_base_data_del(NULL));
305 eo_do(obj, eo_base_data_set("test3", &a, _fake_free_func));
306 eo_do(obj, eo_base_data_set("test3", NULL, NULL));
308 eo_do(obj, eo_base_data_set("test3", &a, _fake_free_func));
317 START_TEST(eo_magic_checks)
319 char buf[sizeof(long)]; /* Just enough to hold eina magic + a bit more. */
322 memset(buf, 1, sizeof(buf));
323 Eo *obj = eo_add((Eo_Class *) buf, NULL);
326 obj = eo_add(SIMPLE_CLASS, (Eo *) buf);
329 obj = eo_add(SIMPLE_CLASS, NULL);
332 fail_if(eo_do((Eo *) buf, EO_NOOP));
333 fail_if(eo_do_super((Eo *) buf, EO_NOOP));
334 fail_if(eo_class_get((Eo *) buf));
335 fail_if(eo_class_name_get((Eo_Class*) buf));
336 eo_class_funcs_set((Eo_Class *) buf, NULL);
338 fail_if(eo_class_new(NULL, (Eo_Class *) buf), NULL);
340 eo_xref(obj, (Eo *) buf);
341 eo_xunref(obj, (Eo *) buf);
342 eo_xref((Eo *) buf, obj);
343 eo_xunref((Eo *) buf, obj);
346 eo_unref((Eo *) buf);
348 fail_if(0 != eo_ref_get((Eo *) buf));
351 eo_do((Eo *) buf, eo_wref_add(&wref));
356 fail_if(eo_parent_get((Eo *) buf));
358 eo_constructor_error_set((Eo *) buf);
359 fail_if(!eo_constructor_error_get((Eo *) buf));
361 eo_constructor_super((Eo *) buf);
362 eo_destructor_super((Eo *) buf);
364 fail_if(eo_data_get((Eo *) buf, SIMPLE_CLASS));
366 eo_composite_object_attach((Eo *) buf, obj);
367 eo_composite_object_attach(obj, (Eo *) buf);
368 eo_composite_object_detach((Eo *) buf, obj);
369 eo_composite_object_detach(obj, (Eo *) buf);
370 eo_composite_is((Eo *) buf);
372 eo_do(obj, eo_event_callback_forwarder_add(NULL, (Eo *) buf));
373 eo_do(obj, eo_event_callback_forwarder_del(NULL, (Eo *) buf));
381 void eo_test_general(TCase *tc)
383 tcase_add_test(tc, eo_generic_data);
384 tcase_add_test(tc, eo_op_errors);
385 tcase_add_test(tc, eo_simple);
386 tcase_add_test(tc, eo_weak_reference);
387 tcase_add_test(tc, eo_refs);
388 tcase_add_test(tc, eo_magic_checks);
389 tcase_add_test(tc, eo_data_fetch);