10 #include "class_simple.h"
15 Eo *obj = eo_add(EO_BASE_CLASS, NULL);
25 Eo *obj = eo_add(SIMPLE_CLASS, NULL);
26 Eo *obj2 = eo_add(SIMPLE_CLASS, NULL);
27 Eo *obj3 = eo_add(SIMPLE_CLASS, NULL);
30 fail_if(eo_ref_get(obj) != 2);
32 fail_if(eo_ref_get(obj) != 3);
35 fail_if(eo_ref_get(obj) != 2);
37 fail_if(eo_ref_get(obj) != 1);
41 fail_if(eo_ref_get(obj) != 1);
44 fail_if(eo_ref_get(obj) != 2);
47 fail_if(eo_ref_get(obj) != 2);
50 fail_if(eo_ref_get(obj) != 1);
57 /* Just check it doesn't seg atm. */
58 obj = eo_add(SIMPLE_CLASS, NULL);
67 START_TEST(eo_weak_reference)
71 Eo *obj = eo_add(SIMPLE_CLASS, NULL);
72 Eo *obj2 = eo_add(SIMPLE_CLASS, NULL);
73 Eo *wref, *wref2, *wref3;
74 eo_do(obj, eo_wref_add(&wref));
80 obj = eo_add(SIMPLE_CLASS, NULL);
81 eo_do(obj, eo_wref_add(&wref));
92 obj = eo_add(SIMPLE_CLASS, NULL);
94 eo_do(obj, eo_wref_add(&wref));
95 eo_do(obj, eo_wref_del(&wref));
98 eo_do(obj, eo_wref_add(&wref));
99 eo_do(obj2, eo_wref_del(&wref));
101 eo_wref_del_safe(&wref);
105 eo_do(obj, eo_wref_del(&wref));
108 wref = wref2 = wref3 = NULL;
109 eo_do(obj, eo_wref_add(&wref), eo_wref_add(&wref2), eo_wref_add(&wref3));
113 eo_do(obj, eo_wref_del(&wref), eo_wref_del(&wref2), eo_wref_del(&wref3));
118 eo_do(obj, eo_wref_add(&wref2), eo_wref_add(&wref3));
120 eo_do(obj, eo_wref_del(&wref));
122 eo_do(obj, eo_wref_del(&wref2), eo_wref_del(&wref3));
133 _a_set(Eo *obj EINA_UNUSED, void *class_data EINA_UNUSED, va_list *list EINA_UNUSED)
139 _op_errors_class_constructor(Eo_Class *klass)
141 const Eo_Op_Func_Description func_desc[] = {
142 EO_OP_FUNC(SIMPLE_ID(SIMPLE_SUB_ID_LAST), _a_set),
143 EO_OP_FUNC(SIMPLE_ID(SIMPLE_SUB_ID_LAST + 1), _a_set),
144 EO_OP_FUNC(0x0F010111, _a_set),
148 eo_class_funcs_set(klass, func_desc);
151 START_TEST(eo_op_errors)
155 static const Eo_Class_Description class_desc = {
157 EO_CLASS_TYPE_REGULAR,
158 EO_CLASS_DESCRIPTION_OPS(NULL, NULL, 0),
163 _op_errors_class_constructor,
167 const Eo_Class *klass = eo_class_new(&class_desc, SIMPLE_CLASS, NULL);
170 Eo *obj = eo_add(klass, NULL);
172 /* Out of bounds op for a legal class. */
173 fail_if(eo_do(obj, 0x00010111));
176 fail_if(eo_do(obj, 0x0F010111));
178 fail_if(eo_ref_get(obj) != 1);
181 fail_if(eo_ref_get(obj) != 2);
184 fail_if(eo_ref_get(obj) != 3);
187 fail_if(eo_ref_get(obj) != 2);
190 fail_if(eo_ref_get(obj) != 1);
194 obj = eo_add(SIMPLE_CLASS, NULL);
195 fail_if(!eo_do(obj, simple_a_print()));
196 fail_if(!eo_query(obj, simple_a_print()));
197 fail_if(eo_query(obj, simple_a_set(1)));
204 _fake_free_func(void *data)
213 START_TEST(eo_generic_data)
216 Eo *obj = eo_add(SIMPLE_CLASS, NULL);
219 eo_do(obj, eo_base_data_set("test1", (void *) 1, NULL));
220 eo_do(obj, eo_base_data_get("test1", &data));
221 fail_if(1 != (int) data);
222 eo_do(obj, eo_base_data_del("test1"));
223 eo_do(obj, eo_base_data_get("test1", &data));
226 eo_do(obj, eo_base_data_set("test1", (void *) 1, NULL));
227 eo_do(obj, eo_base_data_set("test2", (void *) 2, NULL));
228 eo_do(obj, eo_base_data_get("test1", &data));
229 fail_if(1 != (int) data);
230 eo_do(obj, eo_base_data_get("test2", &data));
231 fail_if(2 != (int) data);
233 eo_do(obj, eo_base_data_get("test2", &data));
234 fail_if(2 != (int) data);
235 eo_do(obj, eo_base_data_del("test2"));
236 eo_do(obj, eo_base_data_get("test2", &data));
239 eo_do(obj, eo_base_data_get("test1", &data));
240 fail_if(1 != (int) data);
241 eo_do(obj, eo_base_data_del("test1"));
242 eo_do(obj, eo_base_data_get("test1", &data));
246 eo_do(obj, eo_base_data_set("test3", &a, _fake_free_func));
247 eo_do(obj, eo_base_data_get("test3", &data));
249 eo_do(obj, eo_base_data_get("test3", NULL));
250 eo_do(obj, eo_base_data_del("test3"));
254 eo_do(obj, eo_base_data_set("test3", &a, _fake_free_func));
255 eo_do(obj, eo_base_data_set("test3", NULL, _fake_free_func));
259 eo_do(obj, eo_base_data_set(NULL, &a, _fake_free_func));
260 eo_do(obj, eo_base_data_get(NULL, &data));
262 eo_do(obj, eo_base_data_del(NULL));
265 eo_do(obj, eo_base_data_set("test3", &a, _fake_free_func));
266 eo_do(obj, eo_base_data_set("test3", NULL, NULL));
268 eo_do(obj, eo_base_data_set("test3", &a, _fake_free_func));
277 START_TEST(eo_magic_checks)
279 char buf[sizeof(long)]; /* Just enough to hold eina magic + a bit more. */
282 memset(buf, 1, sizeof(buf));
283 Eo *obj = eo_add((Eo_Class *) buf, NULL);
286 obj = eo_add(SIMPLE_CLASS, (Eo *) buf);
289 obj = eo_add(SIMPLE_CLASS, NULL);
292 fail_if(eo_do((Eo *) buf, EO_NOOP));
293 fail_if(eo_do_super((Eo *) buf, EO_NOOP));
294 fail_if(eo_class_get((Eo *) buf));
295 fail_if(eo_class_name_get((Eo_Class*) buf));
296 eo_class_funcs_set((Eo_Class *) buf, NULL);
298 fail_if(eo_class_new(NULL, (Eo_Class *) buf), NULL);
300 eo_xref(obj, (Eo *) buf);
301 eo_xunref(obj, (Eo *) buf);
302 eo_xref((Eo *) buf, obj);
303 eo_xunref((Eo *) buf, obj);
306 eo_unref((Eo *) buf);
308 fail_if(0 != eo_ref_get((Eo *) buf));
311 eo_do((Eo *) buf, eo_wref_add(&wref));
316 fail_if(eo_parent_get((Eo *) buf));
318 eo_constructor_error_set((Eo *) buf);
319 fail_if(!eo_constructor_error_get((Eo *) buf));
321 eo_constructor_super((Eo *) buf);
322 eo_destructor_super((Eo *) buf);
324 fail_if(eo_data_get((Eo *) buf, SIMPLE_CLASS));
326 eo_composite_object_attach((Eo *) buf, obj);
327 eo_composite_object_attach(obj, (Eo *) buf);
328 eo_composite_object_detach((Eo *) buf, obj);
329 eo_composite_object_detach(obj, (Eo *) buf);
330 eo_composite_is((Eo *) buf);
332 fail_if(eo_event_callback_add((Eo *) buf, NULL, NULL, NULL));
333 fail_if(eo_event_callback_del_lazy((Eo *) buf, NULL, NULL));
334 fail_if(eo_event_callback_del((Eo *) buf, NULL, NULL, NULL));
335 fail_if(eo_event_callback_call((Eo *) buf, NULL, NULL));
337 fail_if(eo_event_callback_forwarder_add((Eo *) buf, NULL, obj));
338 fail_if(eo_event_callback_forwarder_add(obj, NULL, (Eo *) buf));
339 fail_if(eo_event_callback_forwarder_del((Eo *) buf, NULL, obj));
340 fail_if(eo_event_callback_forwarder_del(obj, NULL, (Eo *) buf));
348 void eo_test_general(TCase *tc)
350 tcase_add_test(tc, eo_generic_data);
351 tcase_add_test(tc, eo_op_errors);
352 tcase_add_test(tc, eo_simple);
353 tcase_add_test(tc, eo_weak_reference);
354 tcase_add_test(tc, eo_refs);
355 tcase_add_test(tc, eo_magic_checks);