From: Ryuan Choi Date: Wed, 16 Jul 2014 14:17:31 +0000 (+0900) Subject: tests: Add elm_test_helper_wait_flag to avoid infinite loop X-Git-Tag: upstream/1.10.0+218+gee3f0b7~63 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=bbb916375d99e65b8083a037323d88acbbcdbec5;p=platform%2Fupstream%2Felementary.git 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. --- 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 +#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 +#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_Bool elm_test_helper_wait_flag(Eina_Bool *done); + +#endif /* _ELM_TEST_HELPER_H */