diff options
author | Ryuan Choi <ryuan.choi@gmail.com> | 2014-07-16 23:17:31 +0900 |
---|---|---|
committer | Ryuan Choi <ryuan.choi@gmail.com> | 2014-07-16 23:31:58 +0900 |
commit | bbb916375d99e65b8083a037323d88acbbcdbec5 (patch) | |
tree | edc2f95410d45f731f272e207fbff9886e1d8d44 /src/tests | |
parent | 7f5a7329717bace0a851ed1d4f732a1aa9be7f27 (diff) | |
download | elementary-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.am | 1 | ||||
-rw-r--r-- | src/tests/elm_suite.h | 1 | ||||
-rw-r--r-- | src/tests/elm_test_fileselector.c | 6 | ||||
-rw-r--r-- | src/tests/elm_test_helper.c | 41 | ||||
-rw-r--r-- | src/tests/elm_test_helper.h | 8 |
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 */ |