couple of simple positive tests.
authorbarbieri <barbieri@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Thu, 25 Feb 2010 19:38:32 +0000 (19:38 +0000)
committerbarbieri <barbieri@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Thu, 25 Feb 2010 19:38:32 +0000 (19:38 +0000)
This is far from real unit testing, just simple cases are covered, but
it's better than nothing.

git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/ecore@46477 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/tests/ecore_test_ecore.c

index 79486bc..fc0c668 100644 (file)
@@ -3,13 +3,23 @@
 #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)
@@ -26,17 +36,193 @@ END_TEST
 
 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);
 }
@@ -46,4 +232,10 @@ void ecore_test_ecore(TCase *tc)
 {
    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);
 }