#endif
#include <Ecore.h>
+#include <unistd.h>
#include "ecore_suite.h"
static int
-_timer_cb(void *data)
+_quit_cb(void *data)
{
+ Eina_Bool *val = data;
+ *val = EINA_TRUE;
ecore_main_loop_quit();
+ return 0;
+}
+
+static int
+_dummy_cb(void *data)
+{
+ return (int)(long)data;
}
START_TEST(ecore_test_ecore_init)
START_TEST(ecore_test_ecore_main_loop)
{
- Ecore_Timer *timer = NULL;
- int ret;
+ Eina_Bool did = EINA_FALSE;
+ Ecore_Timer *timer;
+ int ret;
+
+ ret = ecore_init();
+ fail_if(ret != 1);
+
+ timer = ecore_timer_add(0.0, _quit_cb, &did);
+ fail_if(timer == NULL);
+
+ ecore_main_loop_begin();
+
+ fail_if(did == EINA_FALSE);
+
+ ret = ecore_shutdown();
+ fail_if(ret != 0);
+}
+END_TEST
+
+START_TEST(ecore_test_ecore_main_loop_idler)
+{
+ Eina_Bool did = EINA_FALSE;
+ Ecore_Idler *idler;
+ int ret;
+
+ ret = ecore_init();
+ fail_if(ret != 1);
+
+ idler = ecore_idler_add(_quit_cb, &did);
+ fail_if(idler == NULL);
+
+ ecore_main_loop_begin();
+
+ fail_if(did == EINA_FALSE);
+
+ ret = ecore_shutdown();
+ fail_if(ret != 0);
+}
+END_TEST
+
+START_TEST(ecore_test_ecore_main_loop_idle_enterer)
+{
+ Eina_Bool did = EINA_FALSE;
+ Ecore_Idle_Enterer *idle_enterer;
+ int ret;
ret = ecore_init();
fail_if(ret != 1);
- timer = ecore_timer_add(0.5, _timer_cb, NULL);
+ idle_enterer = ecore_idle_enterer_add(_quit_cb, &did);
+ fail_if(idle_enterer == NULL);
+
+ ecore_main_loop_begin();
+
+ fail_if(did == EINA_FALSE);
+
+ ret = ecore_shutdown();
+ fail_if(ret != 0);
+}
+END_TEST
+
+START_TEST(ecore_test_ecore_main_loop_idle_exiter)
+{
+ Eina_Bool did = EINA_FALSE;
+ Ecore_Timer *timer;
+ Ecore_Idle_Exiter *idle_exiter;
+ int ret;
+
+ ret = ecore_init();
+ fail_if(ret != 1);
+
+ /* make system exit idle */
+ timer = ecore_timer_add(0.0, _dummy_cb, (void *)(long)0);
fail_if(timer == NULL);
+ idle_exiter = ecore_idle_exiter_add(_quit_cb, &did);
+ fail_if(idle_exiter == NULL);
+
ecore_main_loop_begin();
+ fail_if(did == EINA_FALSE);
+
+ ret = ecore_shutdown();
+ fail_if(ret != 0);
+}
+END_TEST
+
+START_TEST(ecore_test_ecore_main_loop_timer)
+{
+ Eina_Bool did = EINA_FALSE;
+ Ecore_Timer *timer;
+ double start, end, elapsed;
+ int ret;
+
+ ret = ecore_init();
+ fail_if(ret != 1);
+
+ timer = ecore_timer_add(2.0, _quit_cb, &did);
+ fail_if(timer == NULL);
+
+ start = ecore_time_get();
+ ecore_main_loop_begin();
+ end = ecore_time_get();
+ elapsed = end - start;
+
+ fail_if(did == EINA_FALSE);
+ fail_if(elapsed < 2.0);
+ fail_if(elapsed > 3.0); /* 1 second "error margin" */
+
+ ret = ecore_shutdown();
+ fail_if(ret != 0);
+}
+END_TEST
+
+static int
+_fd_handler_cb(void *data, Ecore_Fd_Handler *handler __UNUSED__)
+{
+ Eina_Bool *val = data;
+ *val = EINA_TRUE;
+ ecore_main_loop_quit();
+ return 0;
+}
+
+START_TEST(ecore_test_ecore_main_loop_fd_handler)
+{
+ Eina_Bool did = EINA_FALSE;
+ Ecore_Fd_Handler *fd_handler;
+ int comm[2];
+ int ret;
+
+ ret = ecore_init();
+ fail_if(ret != 1);
+
+ ret = pipe(comm);
+ fail_if(ret != 0);
+
+ fd_handler = ecore_main_fd_handler_add
+ (comm[0], ECORE_FD_READ, _fd_handler_cb, &did, NULL, NULL);
+ fail_if(fd_handler == NULL);
+
+ ret = write(comm[1], &did, 1);
+ fail_if(ret != 1);
+
+ ecore_main_loop_begin();
+
+ close(comm[0]);
+ close(comm[1]);
+
+ fail_if(did == EINA_FALSE);
+
+ ret = ecore_shutdown();
+ fail_if(ret != 0);
+}
+END_TEST
+
+static int
+_event_handler_cb(void *data, int type __UNUSED__, void *event __UNUSED__)
+{
+ Eina_Bool *val = data;
+ *val = EINA_TRUE;
+ ecore_main_loop_quit();
+ return 0;
+}
+
+START_TEST(ecore_test_ecore_main_loop_event)
+{
+ Eina_Bool did = EINA_FALSE;
+ Ecore_Event_Handler *handler;
+ Ecore_Event *event;
+ int ret, type;
+
+ ret = ecore_init();
+ fail_if(ret != 1);
+
+ type = ecore_event_type_new();
+ fail_if(type < 1);
+
+ handler = ecore_event_handler_add(type, _event_handler_cb, &did);
+ fail_if(handler == NULL);
+
+ event = ecore_event_add(type, NULL, NULL, NULL);
+ fail_if(event == NULL);
+
+ ecore_main_loop_begin();
+
+ fail_if(did == EINA_FALSE);
+
ret = ecore_shutdown();
fail_if(ret != 0);
}
{
tcase_add_test(tc, ecore_test_ecore_init);
tcase_add_test(tc, ecore_test_ecore_main_loop);
+ tcase_add_test(tc, ecore_test_ecore_main_loop_idler);
+ tcase_add_test(tc, ecore_test_ecore_main_loop_idle_enterer);
+ tcase_add_test(tc, ecore_test_ecore_main_loop_idle_exiter);
+ tcase_add_test(tc, ecore_test_ecore_main_loop_timer);
+ tcase_add_test(tc, ecore_test_ecore_main_loop_fd_handler);
+ tcase_add_test(tc, ecore_test_ecore_main_loop_event);
}