From 4938a7c246758af601986f1706b0a23b68b6b77d Mon Sep 17 00:00:00 2001 From: Ryuan Choi Date: Wed, 16 Jul 2014 23:17:31 +0900 Subject: [PATCH] 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. --- legacy/elementary/src/tests/Makefile.am | 1 + legacy/elementary/src/tests/elm_suite.h | 1 + .../elementary/src/tests/elm_test_fileselector.c | 6 ++-- legacy/elementary/src/tests/elm_test_helper.c | 41 ++++++++++++++++++++++ legacy/elementary/src/tests/elm_test_helper.h | 8 +++++ 5 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 legacy/elementary/src/tests/elm_test_helper.c create mode 100644 legacy/elementary/src/tests/elm_test_helper.h diff --git a/legacy/elementary/src/tests/Makefile.am b/legacy/elementary/src/tests/Makefile.am index 11dcd87..12fc454 100644 --- a/legacy/elementary/src/tests/Makefile.am +++ b/legacy/elementary/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/legacy/elementary/src/tests/elm_suite.h b/legacy/elementary/src/tests/elm_suite.h index 7918a4e..1a19179 100644 --- a/legacy/elementary/src/tests/elm_suite.h +++ b/legacy/elementary/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/legacy/elementary/src/tests/elm_test_fileselector.c b/legacy/elementary/src/tests/elm_test_fileselector.c index e5dd067..a204917 100644 --- a/legacy/elementary/src/tests/elm_test_fileselector.c +++ b/legacy/elementary/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/legacy/elementary/src/tests/elm_test_helper.c b/legacy/elementary/src/tests/elm_test_helper.c new file mode 100644 index 0000000..453e888 --- /dev/null +++ b/legacy/elementary/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/legacy/elementary/src/tests/elm_test_helper.h b/legacy/elementary/src/tests/elm_test_helper.h new file mode 100644 index 0000000..62974f1 --- /dev/null +++ b/legacy/elementary/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 */ -- 2.7.4