5 #include "ecore_suite.h"
13 #define INF(...) EINA_LOG_DOM_INFO(_log_dom, __VA_ARGS__)
18 Eina_Bool *val = data;
20 ecore_main_loop_quit();
30 START_TEST(ecore_test_ecore_init)
37 ret = ecore_shutdown();
42 START_TEST(ecore_test_ecore_main_loop)
44 Eina_Bool did = EINA_FALSE;
51 timer = ecore_timer_add(0.0, _quit_cb, &did);
52 fail_if(timer == NULL);
54 ecore_main_loop_begin();
56 fail_if(did == EINA_FALSE);
58 ret = ecore_shutdown();
63 START_TEST(ecore_test_ecore_main_loop_idler)
65 Eina_Bool did = EINA_FALSE;
72 idler = ecore_idler_add(_quit_cb, &did);
73 fail_if(idler == NULL);
75 ecore_main_loop_begin();
77 fail_if(did == EINA_FALSE);
79 ret = ecore_shutdown();
84 START_TEST(ecore_test_ecore_main_loop_idle_enterer)
86 Eina_Bool did = EINA_FALSE;
87 Ecore_Idle_Enterer *idle_enterer;
93 idle_enterer = ecore_idle_enterer_add(_quit_cb, &did);
94 fail_if(idle_enterer == NULL);
96 ecore_main_loop_begin();
98 fail_if(did == EINA_FALSE);
100 ret = ecore_shutdown();
105 START_TEST(ecore_test_ecore_main_loop_idle_exiter)
107 Eina_Bool did = EINA_FALSE;
109 Ecore_Idle_Exiter *idle_exiter;
115 /* make system exit idle */
116 timer = ecore_timer_add(0.0, _dummy_cb, (void *)(long)0);
117 fail_if(timer == NULL);
119 idle_exiter = ecore_idle_exiter_add(_quit_cb, &did);
120 fail_if(idle_exiter == NULL);
122 ecore_main_loop_begin();
124 fail_if(did == EINA_FALSE);
126 ret = ecore_shutdown();
131 START_TEST(ecore_test_ecore_main_loop_timer)
133 Eina_Bool did = EINA_FALSE;
135 double start, end, elapsed;
141 timer = ecore_timer_add(2.0, _quit_cb, &did);
142 fail_if(timer == NULL);
144 start = ecore_time_get();
145 ecore_main_loop_begin();
146 end = ecore_time_get();
147 elapsed = end - start;
149 fail_if(did == EINA_FALSE);
150 fail_if(elapsed < 2.0);
151 fail_if(elapsed > 3.0); /* 1 second "error margin" */
153 ret = ecore_shutdown();
158 static Eina_Bool _timer3(void *data)
160 /* timer 3, do nothing */
164 static Eina_Bool _timer2(void *data)
166 /* timer 2, quit inner mainloop */
167 ecore_main_loop_quit();
171 static Eina_Bool _timer1(void *data)
173 /* timer 1, begin inner mainloop */
177 ecore_timer_add(0.3, _timer2, NULL);
178 ecore_timer_add(0.1, _timer3, NULL);
179 ecore_main_loop_begin();
181 ecore_main_loop_quit();
186 START_TEST(ecore_test_ecore_main_loop_timer_inner)
195 timer = ecore_timer_add(1.0, _timer1, ×);
196 fail_if(timer == NULL);
198 /* BEGIN: outer mainloop */
199 ecore_main_loop_begin();
200 /*END: outer mainloop */
207 _fd_handler_cb(void *data, Ecore_Fd_Handler *handler __UNUSED__)
209 /* FIXME: why setting val if it is overwritten just after and what is its purpose ??? */
210 Eina_Bool *val = data;
213 ecore_main_loop_quit();
217 START_TEST(ecore_test_ecore_main_loop_fd_handler)
219 Eina_Bool did = EINA_FALSE;
220 Ecore_Fd_Handler *fd_handler;
230 fd_handler = ecore_main_fd_handler_add
231 (comm[0], ECORE_FD_READ, _fd_handler_cb, &did, NULL, NULL);
232 fail_if(fd_handler == NULL);
234 ret = write(comm[1], &did, 1);
237 ecore_main_loop_begin();
242 fail_if(did == EINA_FALSE);
244 ret = ecore_shutdown();
250 _event_handler_cb(void *data, int type __UNUSED__, void *event __UNUSED__)
252 /* FIXME: why setting val if it is overwritten just after and what is its purpose ??? */
253 Eina_Bool *val = data;
256 ecore_main_loop_quit();
260 START_TEST(ecore_test_ecore_main_loop_event)
262 Eina_Bool did = EINA_FALSE;
263 Ecore_Event_Handler *handler;
270 type = ecore_event_type_new();
273 handler = ecore_event_handler_add(type, _event_handler_cb, &did);
274 fail_if(handler == NULL);
276 event = ecore_event_add(type, NULL, NULL, NULL);
277 fail_if(event == NULL);
279 ecore_main_loop_begin();
281 fail_if(did == EINA_FALSE);
283 ret = ecore_shutdown();
289 _timer_quit_recursive(void *data)
291 INF(" _timer_quit_recursive: begin");
292 ecore_main_loop_quit(); /* quits inner main loop */
293 INF(" _timer_quit_recursive: end");
298 _event_recursive_cb(void *data, int type, void *event)
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);