tests: add explicit test for concentric loop usage
authorMike Blumenkrantz <zmike@samsung.com>
Fri, 1 Feb 2019 20:11:04 +0000 (15:11 -0500)
committerJongmin Lee <jm105.lee@samsung.com>
Wed, 6 Feb 2019 22:20:24 +0000 (07:20 +0900)
having multiple loops which interact is a valid use case that should be
tested to ensure functionality

Reviewed-by: Derek Foreman <derekf@osg.samsung.com>
Differential Revision: https://phab.enlightenment.org/D7868

src/tests/ecore/efl_app_test_loop.c

index f8e0b55..f02af90 100644 (file)
@@ -39,7 +39,52 @@ EFL_START_TEST(efl_app_test_efl_loop_register)
 }
 EFL_END_TEST
 
+static void
+efl_app_test_efl_loop_concentric_fail(void *data EINA_UNUSED, const Efl_Event *ev EINA_UNUSED)
+{
+   ck_abort_msg("test timeout");
+}
+
+static void
+loop_idle(void *data EINA_UNUSED, const Efl_Event *ev EINA_UNUSED)
+{
+   static int num = 0;
+
+   if (num++ == 5) efl_loop_quit(efl_main_loop_get(), eina_value_int_init(0));
+}
+
+static void
+loop_timer_tick(void *data, const Efl_Event *ev EINA_UNUSED)
+{
+   efl_loop_iterate(data);
+}
+
+EFL_START_TEST(efl_app_test_efl_loop_concentric)
+{
+   Eo *loop, *loop2, *timer, *timer2;
+   int exitcode;
+
+   loop = efl_main_loop_get();
+   efl_event_callback_add(loop, EFL_LOOP_EVENT_IDLE, loop_idle, NULL);
+   loop2 = efl_add(EFL_LOOP_CLASS, loop);
+   timer = efl_add(EFL_LOOP_TIMER_CLASS, loop2,
+     efl_loop_timer_interval_set(efl_added, 0.01),
+     efl_event_callback_add(efl_added, EFL_LOOP_TIMER_EVENT_TICK, loop_timer_tick, loop)
+     );
+   timer2 = efl_add(EFL_LOOP_TIMER_CLASS, loop,
+     efl_loop_timer_interval_set(efl_added, 0.5),
+     efl_event_callback_add(efl_added, EFL_LOOP_TIMER_EVENT_TICK, efl_app_test_efl_loop_concentric_fail, NULL)
+     );
+   exitcode = efl_loop_exit_code_process(efl_loop_begin(loop));
+   ck_assert_int_eq(exitcode, 0);
+   efl_del(timer2);
+   efl_del(timer);
+   efl_del(loop2);
+}
+EFL_END_TEST
+
 void efl_app_test_efl_loop(TCase *tc)
 {
    tcase_add_test(tc, efl_app_test_efl_loop_register);
+   tcase_add_test(tc, efl_app_test_efl_loop_concentric);
 }