summaryrefslogtreecommitdiff
path: root/src/tests
diff options
context:
space:
mode:
authorRyuan Choi <ryuan.choi@gmail.com>2014-07-16 23:17:31 +0900
committerRyuan Choi <ryuan.choi@gmail.com>2014-07-16 23:31:58 +0900
commitbbb916375d99e65b8083a037323d88acbbcdbec5 (patch)
treeedc2f95410d45f731f272e207fbff9886e1d8d44 /src/tests
parent7f5a7329717bace0a851ed1d4f732a1aa9be7f27 (diff)
downloadelementary-bbb916375d99e65b8083a037323d88acbbcdbec5.tar.gz
tests: Add elm_test_helper_wait_flag to avoid infinite loop
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.
Diffstat (limited to 'src/tests')
-rw-r--r--src/tests/Makefile.am1
-rw-r--r--src/tests/elm_suite.h1
-rw-r--r--src/tests/elm_test_fileselector.c6
-rw-r--r--src/tests/elm_test_helper.c41
-rw-r--r--src/tests/elm_test_helper.h8
5 files changed, 55 insertions, 2 deletions
diff --git a/src/tests/Makefile.am b/src/tests/Makefile.am
index 11dcd878e..12fc454a5 100644
--- a/src/tests/Makefile.am
+++ b/src/tests/Makefile.am
@@ -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 \
diff --git a/src/tests/elm_suite.h b/src/tests/elm_suite.h
index 7918a4efb..1a191793b 100644
--- a/src/tests/elm_suite.h
+++ b/src/tests/elm_suite.h
@@ -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);
diff --git a/src/tests/elm_test_fileselector.c b/src/tests/elm_test_fileselector.c
index e5dd0677b..a20491730 100644
--- a/src/tests/elm_test_fileselector.c
+++ b/src/tests/elm_test_fileselector.c
@@ -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
index 000000000..453e888f1
--- /dev/null
+++ b/src/tests/elm_test_helper.c
@@ -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
index 000000000..62974f1f2
--- /dev/null
+++ b/src/tests/elm_test_helper.h
@@ -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 */