11 #include "ecore_suite.h"
14 #define INF(...) EINA_LOG_DOM_INFO(_log_dom, __VA_ARGS__)
19 Eina_Bool *val = data;
21 ecore_main_loop_quit();
31 START_TEST(ecore_test_ecore_init)
38 ret = ecore_shutdown();
43 START_TEST(ecore_test_ecore_main_loop)
45 Eina_Bool did = EINA_FALSE;
52 timer = ecore_timer_add(0.0, _quit_cb, &did);
53 fail_if(timer == NULL);
55 ecore_main_loop_begin();
57 fail_if(did == EINA_FALSE);
59 ret = ecore_shutdown();
64 START_TEST(ecore_test_ecore_main_loop_idler)
66 Eina_Bool did = EINA_FALSE;
73 idler = ecore_idler_add(_quit_cb, &did);
74 fail_if(idler == NULL);
76 ecore_main_loop_begin();
78 fail_if(did == EINA_FALSE);
80 ret = ecore_shutdown();
85 START_TEST(ecore_test_ecore_main_loop_idle_enterer)
87 Eina_Bool did = EINA_FALSE;
88 Ecore_Idle_Enterer *idle_enterer;
94 idle_enterer = ecore_idle_enterer_add(_quit_cb, &did);
95 fail_if(idle_enterer == NULL);
97 ecore_main_loop_begin();
99 fail_if(did == EINA_FALSE);
101 ret = ecore_shutdown();
106 START_TEST(ecore_test_ecore_main_loop_idle_exiter)
108 Eina_Bool did = EINA_FALSE;
110 Ecore_Idle_Exiter *idle_exiter;
116 /* make system exit idle */
117 timer = ecore_timer_add(0.0, _dummy_cb, (void *)(long)0);
118 fail_if(timer == NULL);
120 idle_exiter = ecore_idle_exiter_add(_quit_cb, &did);
121 fail_if(idle_exiter == NULL);
123 ecore_main_loop_begin();
125 fail_if(did == EINA_FALSE);
127 ret = ecore_shutdown();
132 START_TEST(ecore_test_ecore_main_loop_timer)
134 Eina_Bool did = EINA_FALSE;
136 double start, end, elapsed;
142 timer = ecore_timer_add(2.0, _quit_cb, &did);
143 fail_if(timer == NULL);
145 start = ecore_time_get();
146 ecore_main_loop_begin();
147 end = ecore_time_get();
148 elapsed = end - start;
150 fail_if(did == EINA_FALSE);
151 fail_if(elapsed < 2.0);
152 fail_if(elapsed > 3.0); /* 1 second "error margin" */
154 ret = ecore_shutdown();
159 static Eina_Bool _timer3(void *data __UNUSED__)
161 /* timer 3, do nothing */
165 static Eina_Bool _timer2(void *data __UNUSED__)
167 /* timer 2, quit inner mainloop */
168 ecore_main_loop_quit();
172 static Eina_Bool _timer1(void *data)
174 /* timer 1, begin inner mainloop */
178 ecore_timer_add(0.3, _timer2, NULL);
179 ecore_timer_add(0.1, _timer3, NULL);
180 ecore_main_loop_begin();
182 ecore_main_loop_quit();
187 START_TEST(ecore_test_ecore_main_loop_timer_inner)
196 timer = ecore_timer_add(1.0, _timer1, ×);
197 fail_if(timer == NULL);
199 /* BEGIN: outer mainloop */
200 ecore_main_loop_begin();
201 /*END: outer mainloop */
208 _fd_handler_cb(void *data, Ecore_Fd_Handler *handler __UNUSED__)
210 /* FIXME: why setting val if it is overwritten just after and what is its purpose ??? */
211 Eina_Bool *val = data;
214 ecore_main_loop_quit();
218 START_TEST(ecore_test_ecore_main_loop_fd_handler)
220 Eina_Bool did = EINA_FALSE;
221 Ecore_Fd_Handler *fd_handler;
231 fd_handler = ecore_main_fd_handler_add
232 (comm[0], ECORE_FD_READ, _fd_handler_cb, &did, NULL, NULL);
233 fail_if(fd_handler == NULL);
235 ret = write(comm[1], &did, 1);
238 ecore_main_loop_begin();
243 fail_if(did == EINA_FALSE);
245 ret = ecore_shutdown();
251 _event_handler_cb(void *data, int type __UNUSED__, void *event __UNUSED__)
253 /* FIXME: why setting val if it is overwritten just after and what is its purpose ??? */
254 Eina_Bool *val = data;
257 ecore_main_loop_quit();
261 START_TEST(ecore_test_ecore_main_loop_event)
263 Eina_Bool did = EINA_FALSE;
264 Ecore_Event_Handler *handler;
271 type = ecore_event_type_new();
274 handler = ecore_event_handler_add(type, _event_handler_cb, &did);
275 fail_if(handler == NULL);
277 event = ecore_event_add(type, NULL, NULL, NULL);
278 fail_if(event == NULL);
280 ecore_main_loop_begin();
282 fail_if(did == EINA_FALSE);
284 ret = ecore_shutdown();
290 _timer_quit_recursive(void *data __UNUSED__)
292 INF(" _timer_quit_recursive: begin");
293 ecore_main_loop_quit(); /* quits inner main loop */
294 INF(" _timer_quit_recursive: end");
299 _event_recursive_cb(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__)
301 static int guard = 0;
303 /* If we enter this callback more than once, it's wrong! */
307 INF(" event_recursive_cb: begin");
309 ecore_timer_add(1.0, _timer_quit_recursive, NULL);
310 INF(" add 1.0s timer (once) to trigger _timer_quit_recursive");
312 INF(" inner main loop begin (recurse)");
313 ecore_main_loop_begin();
314 INF(" inner main loop end (recurse)");
316 ecore_main_loop_quit(); /* quits outer main loop */
318 INF(" guard = %d", guard);
319 INF(" event_recursive_cb: end");
324 START_TEST(ecore_test_ecore_main_loop_event_recursive)
326 /* This test tests if the event handlers are really called only once when
327 * recursive main loops are used and any number of events may have occurred
328 * between the beginning and the end of recursive main loop.
334 _log_dom = eina_log_domain_register("test", EINA_COLOR_CYAN);
341 type = ecore_event_type_new();
342 ecore_event_handler_add(type, _event_recursive_cb, NULL);
343 e = ecore_event_add(type, NULL, NULL, NULL);
344 INF(" add event to trigger cb1: event=%p", e);
345 INF(" main loop begin");
346 ecore_main_loop_begin();
347 INF(" main loop end");
354 void ecore_test_ecore(TCase *tc)
356 tcase_add_test(tc, ecore_test_ecore_init);
357 tcase_add_test(tc, ecore_test_ecore_main_loop);
358 tcase_add_test(tc, ecore_test_ecore_main_loop_idler);
359 tcase_add_test(tc, ecore_test_ecore_main_loop_idle_enterer);
360 tcase_add_test(tc, ecore_test_ecore_main_loop_idle_exiter);
361 tcase_add_test(tc, ecore_test_ecore_main_loop_timer);
362 tcase_add_test(tc, ecore_test_ecore_main_loop_fd_handler);
363 tcase_add_test(tc, ecore_test_ecore_main_loop_event);
364 tcase_add_test(tc, ecore_test_ecore_main_loop_timer_inner);
365 tcase_add_test(tc, ecore_test_ecore_main_loop_event_recursive);