summaryrefslogtreecommitdiff
path: root/src/tests/ecore/ecore_test_poller.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/tests/ecore/ecore_test_poller.c')
-rw-r--r--src/tests/ecore/ecore_test_poller.c168
1 files changed, 168 insertions, 0 deletions
diff --git a/src/tests/ecore/ecore_test_poller.c b/src/tests/ecore/ecore_test_poller.c
new file mode 100644
index 0000000000..9e981ff367
--- /dev/null
+++ b/src/tests/ecore/ecore_test_poller.c
@@ -0,0 +1,168 @@
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+#include <unistd.h>
+
+#include <Eina.h>
+#include <Ecore.h>
+
+#include "ecore_suite.h"
+
+#define FP_ERR (0.0000001)
+#define CHECK_FP(a, b) ((a - b) < FP_ERR)
+
+static Eina_Bool
+_quit_cb(void *data)
+{
+ Eina_Bool *val = data;
+ if (val) *val = EINA_TRUE;
+ ecore_main_loop_quit();
+ return EINA_FALSE;
+}
+
+Eina_Bool _poller_handler(void *data)
+{
+ int *val = data;
+ (*val)++;
+ return ECORE_CALLBACK_RENEW;
+}
+
+static Eina_Bool
+_poller_loop_add(void *data EINA_UNUSED)
+{
+ ecore_poller_add(ECORE_POLLER_CORE, 1, _quit_cb, NULL);
+ return ECORE_CALLBACK_RENEW;
+}
+
+static Eina_Bool
+_poller_loop_fail(void *data EINA_UNUSED)
+{
+ ecore_main_loop_quit();
+ ck_abort();
+ return ECORE_CALLBACK_RENEW;
+}
+
+static Eina_Bool
+_poller_loop_del(void *data)
+{
+ static int count = 0;
+
+ if (count++ == 0)
+ ecore_poller_del(data);
+ else
+ ecore_main_loop_quit();
+ return ECORE_CALLBACK_RENEW;
+}
+
+static Eina_Bool
+_poller_loop_modify(void *data)
+{
+ ecore_poller_poller_interval_set(data, 1);
+ return EINA_FALSE;
+}
+
+EFL_START_TEST(ecore_test_ecore_main_loop_poller_add)
+{
+ /* Create renewable main poller */
+ Ecore_Poller *poll_ptr = ecore_poller_add(ECORE_POLLER_CORE, 1, _poller_loop_add, NULL);
+
+ /* Enter main loop and wait for quit*/
+ ecore_main_loop_begin();
+
+ /* Destroy renewable main poller */
+ ecore_poller_del(poll_ptr);
+}
+EFL_END_TEST
+
+
+EFL_START_TEST(ecore_test_ecore_main_loop_poller_del)
+{
+ /* Create renewable main poller */
+ Ecore_Poller *poller = ecore_poller_add(ECORE_POLLER_CORE, 2, _poller_loop_fail, NULL);
+ ecore_poller_add(ECORE_POLLER_CORE, 1, _poller_loop_del, poller);
+
+ /* Enter main loop and wait for quit*/
+ ecore_main_loop_begin();
+}
+EFL_END_TEST
+
+EFL_START_TEST(ecore_test_ecore_main_loop_poller_modify)
+{
+ /* Create renewable main poller */
+ Ecore_Poller *poller = ecore_poller_add(ECORE_POLLER_CORE, 4, _quit_cb, NULL);
+ ecore_poller_add(ECORE_POLLER_CORE, 1, _poller_loop_modify, poller);
+ ecore_poller_add(ECORE_POLLER_CORE, 4, _poller_loop_fail, NULL);
+
+ /* Enter main loop and wait for quit*/
+ ecore_main_loop_begin();
+}
+EFL_END_TEST
+
+Eina_Bool _poller_cb(void *data)
+{
+ int *val = data;
+ (*val)++;
+ return ECORE_CALLBACK_RENEW;
+}
+
+EFL_START_TEST(ecore_test_ecore_main_loop_poller)
+{
+ Ecore_Poller *poll1_ptr = NULL;
+ int poll1_interval = 1;
+ int poll1_counter = 0;
+
+ Ecore_Poller *poll2_ptr = NULL;
+ int poll2_interval = 2;
+ int poll2_counter = 0;
+
+ Ecore_Poller *poll3_ptr = NULL;
+ int poll3_interval = 4;
+ int poll3_counter = 0;
+
+ Eina_Bool did = EINA_FALSE;
+
+ /* Check ECORE_POLLER_CORE poll interval */
+ double interval = 0.05;
+ ecore_poller_poll_interval_set(ECORE_POLLER_CORE, interval);
+ fail_unless(CHECK_FP(ecore_poller_poll_interval_get(ECORE_POLLER_CORE), interval));
+
+ /* Create three pollers with different poller interval */
+ poll1_ptr = ecore_poller_add(ECORE_POLLER_CORE, poll1_interval, _poller_cb, &poll1_counter);
+ poll2_ptr = ecore_poller_add(ECORE_POLLER_CORE, poll2_interval, _poller_cb, &poll2_counter);
+ poll3_ptr = ecore_poller_add(ECORE_POLLER_CORE, poll3_interval, _poller_cb, &poll3_counter);
+
+ /* Add one time processed quit poller */
+ ecore_poller_add(ECORE_POLLER_CORE, 8, _quit_cb, &did);
+
+ /* Enter main loop and wait 8 intervals for quit */
+ ecore_main_loop_begin();
+
+ /* Check each poller poll interval */
+ fail_if(ecore_poller_poller_interval_get(poll1_ptr) != poll1_interval);
+ fail_if(ecore_poller_poller_interval_get(poll2_ptr) != poll2_interval);
+ fail_if(ecore_poller_poller_interval_get(poll3_ptr) != poll3_interval);
+
+ /* Check each poller call counter */
+ ck_assert_int_eq(8, poll1_counter);
+ ck_assert_int_eq(4, poll2_counter);
+ ck_assert_int_eq(2, poll3_counter);
+
+ /* Destroy renewable pollers */
+ ecore_poller_del(poll3_ptr);
+ ecore_poller_del(poll2_ptr);
+ ecore_poller_del(poll1_ptr);
+
+ fail_if(did == EINA_FALSE);
+
+}
+EFL_END_TEST
+
+void ecore_test_ecore_poller(TCase *tc)
+{
+ tcase_add_test(tc, ecore_test_ecore_main_loop_poller);
+ tcase_add_test(tc, ecore_test_ecore_main_loop_poller_add);
+ tcase_add_test(tc, ecore_test_ecore_main_loop_poller_del);
+ tcase_add_test(tc, ecore_test_ecore_main_loop_poller_modify);
+}