tests: Add elm_test_helper_wait_flag to avoid infinite loop
authorRyuan Choi <ryuan.choi@gmail.com>
Wed, 16 Jul 2014 14:17:31 +0000 (23:17 +0900)
committerRyuan Choi <ryuan.choi@gmail.com>
Wed, 16 Jul 2014 14:31:58 +0000 (23:31 +0900)
Test of elm_fileselector_selected and future tests may have conditional loop
which some flag.
This patch adds elm_test_helper_wait_flag, simple wrapper of the loop with timer
in order to exit the loop when expected callbacks are not called.

src/tests/Makefile.am
src/tests/elm_suite.h
src/tests/elm_test_fileselector.c
src/tests/elm_test_helper.c [new file with mode: 0644]
src/tests/elm_test_helper.h [new file with mode: 0644]

index 11dcd878e854dd2c4802ec65f86b7dd337370038..12fc454a514a9448346b087e7355f2dfef420395 100644 (file)
@@ -6,6 +6,7 @@ TESTS = elm_suite
 check_PROGRAMS = elm_suite
 elm_suite_SOURCES = \
        elm_suite.c \
+       elm_test_helper.c \
        elm_test_atspi.c \
        elm_test_check.c \
        elm_test_colorselector.c \
index 7918a4efb52a217d7d8887be5a55a723f137dcc9..1a191793bf1ef8ce0c5afdbce54add59508b36a8 100644 (file)
@@ -2,6 +2,7 @@
 #define _ELM_SUITE_H
 
 #include <check.h>
+#include "elm_test_helper.h"
 
 void elm_test_init(TCase *tc);
 void elm_test_check(TCase *tc);
index e5dd0677be8ebb71efc62d953004ff10ed2ab85e..a2049173063564b0ac4ee4d2066351f4787fba0b 100644 (file)
@@ -69,12 +69,14 @@ START_TEST (elm_fileselector_selected)
 
    selected = EINA_FALSE;
    ck_assert(elm_fileselector_selected_set(fileselector, path));
-   while (!selected) ecore_main_loop_iterate();
+   ck_assert(elm_test_helper_wait_flag(&selected));
+
    ck_assert_str_eq(elm_fileselector_selected_get(fileselector), path);
 
    selected = EINA_FALSE;
    ck_assert(elm_fileselector_selected_set(fileselector, exist));
-   while (!selected) ecore_main_loop_iterate();
+   ck_assert(elm_test_helper_wait_flag(&selected));
+
    ck_assert_str_eq(elm_fileselector_selected_get(fileselector), exist);
 
    eina_stringshare_del(exist);
diff --git a/src/tests/elm_test_helper.c b/src/tests/elm_test_helper.c
new file mode 100644 (file)
index 0000000..453e888
--- /dev/null
@@ -0,0 +1,41 @@
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
+
+#include <Ecore.h>
+#include "elm_suite.h"
+
+const double timeout = 10;
+
+typedef struct _Callback_Data
+{
+   Ecore_Timer *timer;
+   Eina_Bool did_timeout;
+} Callback_Data;
+
+static Eina_Bool
+timer_expired_cb(void *user_data)
+{
+   Callback_Data *data = user_data;
+   data->did_timeout = EINA_TRUE;
+   data->timer = NULL;
+
+   return ECORE_CALLBACK_CANCEL;
+}
+
+Eina_Bool
+elm_test_helper_wait_flag(Eina_Bool *done)
+{
+   Callback_Data data;
+
+   data.did_timeout = EINA_FALSE;
+   data.timer = ecore_timer_add(timeout, timer_expired_cb, &data);
+
+   while (*done == EINA_FALSE && data.did_timeout == EINA_FALSE)
+     ecore_main_loop_iterate();
+
+   if (data.timer)
+     ecore_timer_del(data.timer);
+
+   return !data.did_timeout;
+}
diff --git a/src/tests/elm_test_helper.h b/src/tests/elm_test_helper.h
new file mode 100644 (file)
index 0000000..62974f1
--- /dev/null
@@ -0,0 +1,8 @@
+#ifndef _ELM_TEST_HELPER_H
+#define _ELM_TEST_HELPER_H
+
+#include <Eina.h>
+
+Eina_Bool elm_test_helper_wait_flag(Eina_Bool *done);
+
+#endif /* _ELM_TEST_HELPER_H */