Oh.. this must be useful :)

Thanks.

Daniel Juyung Seo (SeoZ)


On Wed, Jul 16, 2014 at 11:32 PM, Ryuan Choi <[email protected]> wrote:

> ryuan pushed a commit to branch master.
>
>
> http://git.enlightenment.org/core/elementary.git/commit/?id=bbb916375d99e65b8083a037323d88acbbcdbec5
>
> commit bbb916375d99e65b8083a037323d88acbbcdbec5
> Author: Ryuan Choi <[email protected]>
> Date:   Wed Jul 16 23:17:31 2014 +0900
>
>     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.
> ---
>  src/tests/Makefile.am             |  1 +
>  src/tests/elm_suite.h             |  1 +
>  src/tests/elm_test_fileselector.c |  6 ++++--
>  src/tests/elm_test_helper.c       | 41
> +++++++++++++++++++++++++++++++++++++++
>  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 11dcd87..12fc454 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 7918a4e..1a19179 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 e5dd067..a204917 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 0000000..453e888
> --- /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 0000000..62974f1
> --- /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 */
>
> --
>
>
>
------------------------------------------------------------------------------
Want fast and easy access to all the code in your enterprise? Index and
search up to 200,000 lines of code with a free copy of Black Duck
Code Sight - the same software that powers the world's largest code
search on Ohloh, the Black Duck Open Hub! Try it now.
http://p.sf.net/sfu/bds
_______________________________________________
enlightenment-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to