4 #include "../eunit_tests.h"
6 static int cb_count = 0;
9 _null_cb(void *data, Eo *obj, const Eo_Event_Description *desc, void *event_info)
15 return EO_CALLBACK_CONTINUE;
19 _a_changed_cb(void *data, Eo *obj, const Eo_Event_Description *desc, void *event_info)
23 int new_a = *((int *) event_info);
24 printf("%s event_info:'%d' data:'%d'\n", __func__, new_a, (int) data);
28 eo_do(obj, eo_event_callback_priority_add(EV_A_CHANGED, EO_CALLBACK_PRIORITY_BEFORE, _null_cb, (void *) 23423));
29 eo_do(obj, eo_event_callback_del(EV_A_CHANGED, _null_cb, (void *) 23423));
31 /* Stop as we reached the 3rd one. */
32 return (cb_count != 3);
36 main(int argc, char *argv[])
42 Eo *obj = eo_add(SIMPLE_CLASS, NULL);
43 Simple_Public_Data *pd = eo_data_get(obj, SIMPLE_CLASS);
45 /* The order of these two is undetermined. */
46 eo_do(obj, eo_event_callback_priority_add(EV_A_CHANGED, EO_CALLBACK_PRIORITY_BEFORE, _a_changed_cb, (void *) 2));
47 eo_do(obj, eo_event_callback_priority_add(EV_A_CHANGED, EO_CALLBACK_PRIORITY_BEFORE, _a_changed_cb, (void *) 1));
48 /* This will be called afterwards. */
49 eo_do(obj, eo_event_callback_priority_add(EV_A_CHANGED, EO_CALLBACK_PRIORITY_DEFAULT, _a_changed_cb, (void *) 3));
50 /* This will never be called because the previous callback returns NULL. */
51 eo_do(obj, eo_event_callback_priority_add(EV_A_CHANGED, EO_CALLBACK_PRIORITY_AFTER, _a_changed_cb, (void *) 4));
53 eo_do(obj, simple_a_set(1));
55 fail_if(cb_count != 3);
57 eo_do(obj, eo_event_callback_del(EV_A_CHANGED, _a_changed_cb, (void *) 3));
58 fail_if(pd->cb_count != 3);
60 eo_do(obj, eo_event_callback_del(EV_A_CHANGED, _a_changed_cb, (void *) 12));
61 fail_if(pd->cb_count != 3);
63 eo_do(obj, eo_event_callback_del(EV_A_CHANGED, _a_changed_cb, (void *) 4));
64 fail_if(pd->cb_count != 2);
66 eo_do(obj, eo_event_callback_del(EV_A_CHANGED, _a_changed_cb, (void *) 2));
67 fail_if(pd->cb_count != 1);
69 eo_do(obj, eo_event_callback_del(EV_A_CHANGED, _a_changed_cb, (void *) 1));
70 fail_if(pd->cb_count != 0);
75 eo_do(obj, eo_event_callback_priority_add(EV_A_CHANGED, EO_CALLBACK_PRIORITY_BEFORE, _a_changed_cb, (void *) 1));
76 fail_if(pd->cb_count != 1);
78 eo_do(obj, eo_event_freeze_get(&fcount));
81 eo_do(obj, eo_event_freeze());
82 eo_do(obj, eo_event_freeze_get(&fcount));
85 eo_do(obj, eo_event_freeze());
86 eo_do(obj, eo_event_freeze_get(&fcount));
89 eo_do(obj, eo_event_callback_priority_add(EV_A_CHANGED, EO_CALLBACK_PRIORITY_BEFORE, _a_changed_cb, (void *) 2));
90 fail_if(pd->cb_count != 1);
92 eo_do(obj, simple_a_set(2));
93 fail_if(cb_count != 0);
94 eo_do(obj, eo_event_thaw());
95 eo_do(obj, eo_event_freeze_get(&fcount));
98 eo_do(obj, eo_event_thaw());
99 eo_do(obj, eo_event_freeze_get(&fcount));
100 fail_if(fcount != 0);
102 eo_do(obj, simple_a_set(3));
103 fail_if(cb_count != 2);
106 eo_do(obj, eo_event_thaw());
107 eo_do(obj, eo_event_freeze_get(&fcount));
108 fail_if(fcount != 0);
110 eo_do(obj, eo_event_freeze());
111 eo_do(obj, eo_event_freeze_get(&fcount));
112 fail_if(fcount != 1);
114 eo_do(obj, simple_a_set(2));
115 fail_if(cb_count != 0);
116 eo_do(obj, eo_event_thaw());
117 eo_do(obj, eo_event_freeze_get(&fcount));
118 fail_if(fcount != 0);
120 eo_do(obj, eo_event_callback_del(EV_A_CHANGED, _a_changed_cb, (void *) 1));
121 fail_if(pd->cb_count != 0);
122 eo_do(obj, eo_event_callback_del(EV_A_CHANGED, _a_changed_cb, (void *) 2));
123 fail_if(pd->cb_count != -1);
125 /* Global Freeze/thaw. */
129 eo_do(obj, eo_event_callback_priority_add(EV_A_CHANGED, EO_CALLBACK_PRIORITY_BEFORE, _a_changed_cb, (void *) 1));
130 fail_if(pd->cb_count != 1);
132 eo_class_do(EO_BASE_CLASS, eo_event_global_freeze_get(&fcount));
133 fail_if(fcount != 0);
135 eo_class_do(EO_BASE_CLASS, eo_event_global_freeze());
136 eo_class_do(EO_BASE_CLASS, eo_event_global_freeze_get(&fcount));
137 fail_if(fcount != 1);
139 eo_class_do(EO_BASE_CLASS, eo_event_global_freeze());
140 eo_class_do(EO_BASE_CLASS, eo_event_global_freeze_get(&fcount));
141 fail_if(fcount != 2);
143 eo_do(obj, eo_event_callback_priority_add(EV_A_CHANGED, EO_CALLBACK_PRIORITY_BEFORE, _a_changed_cb, (void *) 2));
144 fail_if(pd->cb_count != 1);
146 eo_do(obj, simple_a_set(2));
147 fail_if(cb_count != 0);
148 eo_class_do(EO_BASE_CLASS, eo_event_global_thaw());
149 eo_class_do(EO_BASE_CLASS, eo_event_global_freeze_get(&fcount));
150 fail_if(fcount != 1);
152 eo_class_do(EO_BASE_CLASS, eo_event_global_thaw());
153 eo_class_do(EO_BASE_CLASS, eo_event_global_freeze_get(&fcount));
154 fail_if(fcount != 0);
156 eo_do(obj, simple_a_set(3));
157 fail_if(cb_count != 2);
160 eo_class_do(EO_BASE_CLASS, eo_event_global_thaw());
161 eo_class_do(EO_BASE_CLASS, eo_event_global_freeze_get(&fcount));
162 fail_if(fcount != 0);
164 eo_class_do(EO_BASE_CLASS, eo_event_global_freeze());
165 eo_class_do(EO_BASE_CLASS, eo_event_global_freeze_get(&fcount));
166 fail_if(fcount != 1);
168 eo_do(obj, simple_a_set(2));
169 fail_if(cb_count != 0);
170 eo_class_do(EO_BASE_CLASS, eo_event_global_thaw());
171 eo_class_do(EO_BASE_CLASS, eo_event_global_freeze_get(&fcount));
172 fail_if(fcount != 0);