1 #ifdef HAVE_CONFIG_H
2 # include <config.h>
3 #endif
4 
5 #include <Ecore.h>
6 #include "ecore_suite.h"
7 
8 static void
_ecore_quit(void * data)9 _ecore_quit(void *data)
10 {
11    Eina_Bool *bob = data;
12 
13    *bob = EINA_TRUE;
14    ecore_main_loop_quit();
15 }
16 
EFL_START_TEST(ecore_test_job)17 EFL_START_TEST(ecore_test_job)
18 {
19    Eina_Bool bob = EINA_FALSE;
20    Ecore_Job *job;
21 
22    job = ecore_job_add(&_ecore_quit, &bob);
23    fail_if(!job);
24 
25    ecore_main_loop_begin();
26 
27    fail_if(bob != EINA_TRUE);
28 }
29 EFL_END_TEST
30 
31 #ifndef _WIN32
32 #define NUM_SIGNALS 2000
33 static Eina_Bool
_signal_cb(void * data,int t EINA_UNUSED,void * ev EINA_UNUSED)34 _signal_cb(void *data, int t EINA_UNUSED, void *ev EINA_UNUSED)
35 {
36    int *called = data;
37    (*called)++;
38    if (*called == NUM_SIGNALS) ecore_main_loop_quit();
39    return ECORE_CALLBACK_RENEW;
40 }
41 
42 static void
_ecore_signal_job(void * data EINA_UNUSED)43 _ecore_signal_job(void *data EINA_UNUSED)
44 {
45    for (unsigned int i = 0; i < NUM_SIGNALS; i++)
46      raise(SIGUSR2);
47 }
48 
EFL_START_TEST(ecore_test_job_signal)49 EFL_START_TEST(ecore_test_job_signal)
50 {
51    int called = 0;
52    ecore_job_add(_ecore_signal_job, NULL);
53    ecore_event_handler_add(ECORE_EVENT_SIGNAL_USER, _signal_cb, &called);
54 
55    ecore_main_loop_begin();
56    ck_assert_int_eq(called, NUM_SIGNALS);
57 }
58 EFL_END_TEST
59 #endif
60 
ecore_test_ecore_job(TCase * tc)61 void ecore_test_ecore_job(TCase *tc)
62 {
63    tcase_add_test(tc, ecore_test_job);
64 #ifndef _WIN32
65    tcase_add_test(tc, ecore_test_job_signal);
66 #endif
67 }
68