svn update: 48958 (latest:48959)
[framework/uifw/ecore.git] / src / tests / ecore_test_ecore.c
1 #ifdef HAVE_CONFIG_H
2 # include <config.h>
3 #endif
4
5 #include <Ecore.h>
6 #include <unistd.h>
7
8 #include "ecore_suite.h"
9
10 static int
11 _quit_cb(void *data)
12 {
13    Eina_Bool *val = data;
14    *val = EINA_TRUE;
15    ecore_main_loop_quit();
16    return 0;
17 }
18
19 static int
20 _dummy_cb(void *data)
21 {
22    return (int)(long)data;
23 }
24
25 START_TEST(ecore_test_ecore_init)
26 {
27    int ret;
28
29    ret = ecore_init();
30    fail_if(ret != 1);
31
32    ret = ecore_shutdown();
33    fail_if(ret != 0);
34 }
35 END_TEST
36
37 START_TEST(ecore_test_ecore_main_loop)
38 {
39    Eina_Bool did = EINA_FALSE;
40    Ecore_Timer *timer;
41    int ret;
42
43    ret = ecore_init();
44    fail_if(ret != 1);
45
46    timer = ecore_timer_add(0.0, _quit_cb, &did);
47    fail_if(timer == NULL);
48
49    ecore_main_loop_begin();
50
51    fail_if(did == EINA_FALSE);
52
53    ret = ecore_shutdown();
54    fail_if(ret != 0);
55 }
56 END_TEST
57
58 START_TEST(ecore_test_ecore_main_loop_idler)
59 {
60    Eina_Bool did = EINA_FALSE;
61    Ecore_Idler *idler;
62    int ret;
63
64    ret = ecore_init();
65    fail_if(ret != 1);
66
67    idler = ecore_idler_add(_quit_cb, &did);
68    fail_if(idler == NULL);
69
70    ecore_main_loop_begin();
71
72    fail_if(did == EINA_FALSE);
73
74    ret = ecore_shutdown();
75    fail_if(ret != 0);
76 }
77 END_TEST
78
79 START_TEST(ecore_test_ecore_main_loop_idle_enterer)
80 {
81    Eina_Bool did = EINA_FALSE;
82    Ecore_Idle_Enterer *idle_enterer;
83    int ret;
84
85    ret = ecore_init();
86    fail_if(ret != 1);
87
88    idle_enterer = ecore_idle_enterer_add(_quit_cb, &did);
89    fail_if(idle_enterer == NULL);
90
91    ecore_main_loop_begin();
92
93    fail_if(did == EINA_FALSE);
94
95    ret = ecore_shutdown();
96    fail_if(ret != 0);
97 }
98 END_TEST
99
100 START_TEST(ecore_test_ecore_main_loop_idle_exiter)
101 {
102    Eina_Bool did = EINA_FALSE;
103    Ecore_Timer *timer;
104    Ecore_Idle_Exiter *idle_exiter;
105    int ret;
106
107    ret = ecore_init();
108    fail_if(ret != 1);
109
110    /* make system exit idle */
111    timer = ecore_timer_add(0.0, _dummy_cb, (void *)(long)0);
112    fail_if(timer == NULL);
113
114    idle_exiter = ecore_idle_exiter_add(_quit_cb, &did);
115    fail_if(idle_exiter == NULL);
116
117    ecore_main_loop_begin();
118
119    fail_if(did == EINA_FALSE);
120
121    ret = ecore_shutdown();
122    fail_if(ret != 0);
123 }
124 END_TEST
125
126 START_TEST(ecore_test_ecore_main_loop_timer)
127 {
128    Eina_Bool did = EINA_FALSE;
129    Ecore_Timer *timer;
130    double start, end, elapsed;
131    int ret;
132
133    ret = ecore_init();
134    fail_if(ret != 1);
135
136    timer = ecore_timer_add(2.0, _quit_cb, &did);
137    fail_if(timer == NULL);
138
139    start = ecore_time_get();
140    ecore_main_loop_begin();
141    end = ecore_time_get();
142    elapsed = end - start;
143
144    fail_if(did == EINA_FALSE);
145    fail_if(elapsed < 2.0);
146    fail_if(elapsed > 3.0); /* 1 second "error margin" */
147
148    ret = ecore_shutdown();
149    fail_if(ret != 0);
150 }
151 END_TEST
152
153 static int
154 _fd_handler_cb(void *data, Ecore_Fd_Handler *handler __UNUSED__)
155 {
156    Eina_Bool *val = data;
157    *val = EINA_TRUE;
158    ecore_main_loop_quit();
159    return 0;
160 }
161
162 START_TEST(ecore_test_ecore_main_loop_fd_handler)
163 {
164    Eina_Bool did = EINA_FALSE;
165    Ecore_Fd_Handler *fd_handler;
166    int comm[2];
167    int ret;
168
169    ret = ecore_init();
170    fail_if(ret != 1);
171
172    ret = pipe(comm);
173    fail_if(ret != 0);
174
175    fd_handler = ecore_main_fd_handler_add
176      (comm[0], ECORE_FD_READ, _fd_handler_cb, &did, NULL, NULL);
177    fail_if(fd_handler == NULL);
178
179    ret = write(comm[1], &did, 1);
180    fail_if(ret != 1);
181
182    ecore_main_loop_begin();
183
184    close(comm[0]);
185    close(comm[1]);
186
187    fail_if(did == EINA_FALSE);
188
189    ret = ecore_shutdown();
190    fail_if(ret != 0);
191 }
192 END_TEST
193
194 static int
195 _event_handler_cb(void *data, int type __UNUSED__, void *event __UNUSED__)
196 {
197    Eina_Bool *val = data;
198    *val = EINA_TRUE;
199    ecore_main_loop_quit();
200    return 0;
201 }
202
203 START_TEST(ecore_test_ecore_main_loop_event)
204 {
205    Eina_Bool did = EINA_FALSE;
206    Ecore_Event_Handler *handler;
207    Ecore_Event *event;
208    int ret, type;
209
210    ret = ecore_init();
211    fail_if(ret != 1);
212
213    type = ecore_event_type_new();
214    fail_if(type < 1);
215
216    handler = ecore_event_handler_add(type, _event_handler_cb, &did);
217    fail_if(handler == NULL);
218
219    event = ecore_event_add(type, NULL, NULL, NULL);
220    fail_if(event == NULL);
221
222    ecore_main_loop_begin();
223
224    fail_if(did == EINA_FALSE);
225
226    ret = ecore_shutdown();
227    fail_if(ret != 0);
228 }
229 END_TEST
230
231 void ecore_test_ecore(TCase *tc)
232 {
233    tcase_add_test(tc, ecore_test_ecore_init);
234    tcase_add_test(tc, ecore_test_ecore_main_loop);
235    tcase_add_test(tc, ecore_test_ecore_main_loop_idler);
236    tcase_add_test(tc, ecore_test_ecore_main_loop_idle_enterer);
237    tcase_add_test(tc, ecore_test_ecore_main_loop_idle_exiter);
238    tcase_add_test(tc, ecore_test_ecore_main_loop_timer);
239    tcase_add_test(tc, ecore_test_ecore_main_loop_fd_handler);
240    tcase_add_test(tc, ecore_test_ecore_main_loop_event);
241 }