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);
73 eo_do(obj, eo_wref_add(&wref));
79 obj = eo_add(SIMPLE_CLASS, NULL);
80 eo_do(obj, eo_wref_add(&wref));
91 obj = eo_add(SIMPLE_CLASS, NULL);
93 eo_do(obj, eo_wref_add(&wref));
94 eo_do(obj, eo_wref_del(&wref));
104 _a_set(Eo *obj EINA_UNUSED, void *class_data EINA_UNUSED, va_list *list EINA_UNUSED)
110 _op_errors_class_constructor(Eo_Class *klass)
112 const Eo_Op_Func_Description func_desc[] = {
113 EO_OP_FUNC(SIMPLE_ID(SIMPLE_SUB_ID_LAST), _a_set),
114 EO_OP_FUNC(SIMPLE_ID(SIMPLE_SUB_ID_LAST + 1), _a_set),
115 EO_OP_FUNC(0x0F010111, _a_set),
119 eo_class_funcs_set(klass, func_desc);
122 START_TEST(eo_op_errors)
126 static const Eo_Class_Description class_desc = {
128 EO_CLASS_TYPE_REGULAR,
129 EO_CLASS_DESCRIPTION_OPS(NULL, NULL, 0),
134 _op_errors_class_constructor,
138 const Eo_Class *klass = eo_class_new(&class_desc, SIMPLE_CLASS, NULL);
141 Eo *obj = eo_add(klass, NULL);
143 /* Out of bounds op for a legal class. */
144 fail_if(eo_do(obj, 0x00010111));
147 fail_if(eo_do(obj, 0x0F010111));
149 fail_if(eo_ref_get(obj) != 1);
152 fail_if(eo_ref_get(obj) != 2);
155 fail_if(eo_ref_get(obj) != 3);
158 fail_if(eo_ref_get(obj) != 2);
161 fail_if(eo_ref_get(obj) != 1);
165 obj = eo_add(SIMPLE_CLASS, NULL);
166 fail_if(!eo_do(obj, simple_a_print()));
167 fail_if(!eo_query(obj, simple_a_print()));
168 fail_if(eo_query(obj, simple_a_set(1)));
175 _fake_free_func(void *data)
184 START_TEST(eo_generic_data)
187 Eo *obj = eo_add(SIMPLE_CLASS, NULL);
190 eo_do(obj, eo_base_data_set("test1", (void *) 1, NULL));
191 eo_do(obj, eo_base_data_get("test1", &data));
192 fail_if(1 != (int) data);
193 eo_do(obj, eo_base_data_del("test1"));
194 eo_do(obj, eo_base_data_get("test1", &data));
197 eo_do(obj, eo_base_data_set("test1", (void *) 1, NULL));
198 eo_do(obj, eo_base_data_set("test2", (void *) 2, NULL));
199 eo_do(obj, eo_base_data_get("test1", &data));
200 fail_if(1 != (int) data);
201 eo_do(obj, eo_base_data_get("test2", &data));
202 fail_if(2 != (int) data);
204 eo_do(obj, eo_base_data_get("test2", &data));
205 fail_if(2 != (int) data);
206 eo_do(obj, eo_base_data_del("test2"));
207 eo_do(obj, eo_base_data_get("test2", &data));
210 eo_do(obj, eo_base_data_get("test1", &data));
211 fail_if(1 != (int) data);
212 eo_do(obj, eo_base_data_del("test1"));
213 eo_do(obj, eo_base_data_get("test1", &data));
217 eo_do(obj, eo_base_data_set("test3", &a, _fake_free_func));
218 eo_do(obj, eo_base_data_get("test3", &data));
220 eo_do(obj, eo_base_data_get("test3", NULL));
221 eo_do(obj, eo_base_data_del("test3"));
225 eo_do(obj, eo_base_data_set("test3", &a, _fake_free_func));
226 eo_do(obj, eo_base_data_set("test3", NULL, _fake_free_func));
230 eo_do(obj, eo_base_data_set(NULL, &a, _fake_free_func));
231 eo_do(obj, eo_base_data_get(NULL, &data));
233 eo_do(obj, eo_base_data_del(NULL));
236 eo_do(obj, eo_base_data_set("test3", &a, _fake_free_func));
237 eo_do(obj, eo_base_data_set("test3", NULL, NULL));
239 eo_do(obj, eo_base_data_set("test3", &a, _fake_free_func));
248 START_TEST(eo_magic_checks)
250 char buf[sizeof(long)]; /* Just enough to hold eina magic + a bit more. */
253 memset(buf, 1, sizeof(buf));
254 Eo *obj = eo_add((Eo_Class *) buf, NULL);
257 obj = eo_add(SIMPLE_CLASS, (Eo *) buf);
260 obj = eo_add(SIMPLE_CLASS, NULL);
263 fail_if(eo_do((Eo *) buf, EO_NOOP));
264 fail_if(eo_do_super((Eo *) buf, EO_NOOP));
265 fail_if(eo_class_get((Eo *) buf));
266 fail_if(eo_class_name_get((Eo_Class*) buf));
267 eo_class_funcs_set((Eo_Class *) buf, NULL);
269 fail_if(eo_class_new(NULL, (Eo_Class *) buf), NULL);
271 eo_xref(obj, (Eo *) buf);
272 eo_xunref(obj, (Eo *) buf);
273 eo_xref((Eo *) buf, obj);
274 eo_xunref((Eo *) buf, obj);
277 eo_unref((Eo *) buf);
279 fail_if(0 != eo_ref_get((Eo *) buf));
282 eo_do((Eo *) buf, eo_wref_add(&wref));
287 fail_if(eo_parent_get((Eo *) buf));
289 eo_constructor_error_set((Eo *) buf);
290 fail_if(!eo_constructor_error_get((Eo *) buf));
292 eo_constructor_super((Eo *) buf);
293 eo_destructor_super((Eo *) buf);
295 fail_if(eo_data_get((Eo *) buf, SIMPLE_CLASS));
297 eo_composite_object_attach((Eo *) buf, obj);
298 eo_composite_object_attach(obj, (Eo *) buf);
299 eo_composite_object_detach((Eo *) buf, obj);
300 eo_composite_object_detach(obj, (Eo *) buf);
301 eo_composite_is((Eo *) buf);
303 fail_if(eo_event_callback_add((Eo *) buf, NULL, NULL, NULL));
304 fail_if(eo_event_callback_del_lazy((Eo *) buf, NULL, NULL));
305 fail_if(eo_event_callback_del((Eo *) buf, NULL, NULL, NULL));
306 fail_if(eo_event_callback_call((Eo *) buf, NULL, NULL));
308 fail_if(eo_event_callback_forwarder_add((Eo *) buf, NULL, obj));
309 fail_if(eo_event_callback_forwarder_add(obj, NULL, (Eo *) buf));
310 fail_if(eo_event_callback_forwarder_del((Eo *) buf, NULL, obj));
311 fail_if(eo_event_callback_forwarder_del(obj, NULL, (Eo *) buf));
319 void eo_test_general(TCase *tc)
321 tcase_add_test(tc, eo_generic_data);
322 tcase_add_test(tc, eo_op_errors);
323 tcase_add_test(tc, eo_simple);
324 tcase_add_test(tc, eo_weak_reference);
325 tcase_add_test(tc, eo_refs);
326 tcase_add_test(tc, eo_magic_checks);