9 #include <core_object.h>
11 static int _count = 0;
13 static gboolean on_event1(CoreObject *o, const void *event_info, void *user_data)
19 g_assert_cmpstr(event_info, ==, "ok");
24 static gboolean on_event2(CoreObject *o, const void *event_info, void *user_data)
30 g_assert_cmpstr(event_info, ==, "ok");
36 static void test_co_new(void)
40 co = tcore_object_new(NULL, "test", NULL);
43 tcore_object_free (co);
46 static void test_callback_renew(void)
51 co = tcore_object_new(NULL, "test", NULL);
56 ret = tcore_object_add_callback(co, "event1", on_event1, NULL);
57 g_assert(ret == TCORE_RETURN_SUCCESS);
59 ret = tcore_object_emit_callback(co, "event1", "ok");
60 g_assert(ret == TCORE_RETURN_SUCCESS);
62 ret = tcore_object_emit_callback(co, "event1", "ok");
63 g_assert(ret == TCORE_RETURN_SUCCESS);
65 g_assert(_count == 2);
68 static void test_callback_once(void)
73 co = tcore_object_new(NULL, "test", NULL);
76 // lifetime: one time callback + unlimit callback
78 ret = tcore_object_add_callback(co, "event2", on_event2, NULL);
79 g_assert(ret == TCORE_RETURN_SUCCESS);
80 ret = tcore_object_add_callback(co, "event1", on_event1, NULL);
81 g_assert(ret == TCORE_RETURN_SUCCESS);
83 ret = tcore_object_emit_callback(co, "event2", "ok");
84 g_assert(ret == TCORE_RETURN_SUCCESS);
86 ret = tcore_object_emit_callback(co, "event2", "ok");
87 g_assert(ret == TCORE_RETURN_SUCCESS);
89 g_assert(_count == 1);
91 ret = tcore_object_emit_callback(co, "event1", "ok");
92 g_assert(ret == TCORE_RETURN_SUCCESS);
94 g_assert(_count == 2);
96 tcore_object_free (co);
99 static gboolean on_prop_changed (CoreObject *co, const void *event_info,
102 int *mode = user_data;
103 GSList *key = (GSList *)event_info;
108 g_assert (g_slist_length(key) == 1);
109 g_assert_cmpstr (key->data, ==, "qqq");
110 data = tcore_object_ref_property (co, "qqq");
111 g_assert_cmpstr (data, ==, "1234");
115 g_assert (g_slist_length (key) == 1);
116 g_assert_cmpstr (key->data, ==, "qqq");
117 data = tcore_object_ref_property (co, "qqq");
118 g_assert (data == NULL);
122 g_assert (g_slist_length (key) == 1);
123 g_assert_cmpstr (key->data, ==, "www");
124 data = tcore_object_ref_property (co, "www");
125 g_assert_cmpstr (data, ==, "heap");
129 g_assert (g_slist_length (key) == 1);
130 g_assert_cmpstr (key->data, ==, "www");
131 data = tcore_object_ref_property (co, "www");
132 g_assert (data == NULL);
136 g_assert (g_slist_length (key) == 1);
137 g_assert_cmpstr (key->data, ==, "key");
138 data = tcore_object_ref_property (co, "key");
139 g_assert_cmpstr (data, ==, "1");
143 g_assert (g_slist_length (key) == 1);
144 g_assert_cmpstr (key->data, ==, "key");
145 data = tcore_object_ref_property (co, "key");
146 g_assert_cmpstr (data, ==, "2");
154 g_assert (g_slist_length (key) == 1);
155 g_assert_cmpstr (key->data, ==, "key");
156 data = tcore_object_ref_property (co, "key");
157 g_assert_cmpstr (data, ==, "2");
161 g_assert (g_slist_length (key) == 2);
162 g_assert_cmpstr (key->data, ==, "foo");
163 g_assert_cmpstr (key->next->data, ==, "bar");
164 data = tcore_object_ref_property (co, "foo");
165 g_assert_cmpstr (data, ==, "1");
166 data = tcore_object_ref_property (co, "bar");
167 g_assert_cmpstr (data, ==, "2");
171 g_assert (g_slist_length (key) == 1);
172 g_assert_cmpstr (key->data, ==, "foo");
173 data = tcore_object_ref_property (co, "foo");
174 g_assert (data == NULL);
178 g_assert (g_slist_length (key) == 2);
179 g_assert (g_slist_find_custom (key, "foo",
180 (GCompareFunc)g_strcmp0) != NULL);
181 g_assert (CORE_OBJECT_KEY_FIND(key, "bar") != NULL);
182 data = tcore_object_ref_property (co, "foo");
183 g_assert_cmpstr (data, ==, "1");
184 data = tcore_object_ref_property (co, "bar");
185 g_assert (data == NULL);
193 /* Set flag to callback invocation success */
199 static void test_property (void)
208 co = tcore_object_new (NULL, "test", NULL);
211 tcore_object_add_callback (co, CORE_OBJECT_EVENT_PROPERTY_CHANGED,
212 on_prop_changed, &mode);
214 raw = tcore_object_ref_property_hash (co);
217 /* Case: Basic property set */
219 tcore_object_set_property (co, "qqq", "1234");
220 g_assert (g_hash_table_size (raw) == 1);
221 g_assert (mode == 0);
223 data = tcore_object_ref_property (co, "qqq");
224 g_assert_cmpstr(data, ==, "1234");
226 /* Case: Basic property remove */
228 tcore_object_set_property (co, "qqq", NULL);
229 g_assert (g_hash_table_size (raw) == 0);
230 g_assert (mode == 0);
232 data = tcore_object_ref_property (co, "qqq");
233 g_assert (data == NULL);
235 /* Case: Malloc property set */
237 test = strdup("heap");
238 tcore_object_set_property (co, "www", test);
239 g_assert (g_hash_table_size (raw) == 1);
240 g_assert (mode == 0);
243 data = tcore_object_ref_property (co, "www");
244 g_assert_cmpstr(data, ==, "heap");
246 /* Case: Malloc property remove */
248 tcore_object_set_property (co, "www", NULL);
249 g_assert (g_hash_table_size (raw) == 0);
250 g_assert (mode == 0);
252 data = tcore_object_ref_property (co, "www");
253 g_assert (data == NULL);
255 /* Case: Same key & Different value set */
257 tcore_object_set_property (co, "key", "1");
258 g_assert (g_hash_table_size (raw) == 1);
259 g_assert (mode == 0);
262 tcore_object_set_property (co, "key", "2");
263 g_assert (g_hash_table_size (raw) == 1);
264 g_assert (mode == 0);
266 /* Case: Same key & Same value set => No callback invocation */
268 tcore_object_set_property (co, "key", "2");
269 g_assert (g_hash_table_size (raw) == 1);
270 g_assert (mode == 7);
272 /* Case: Same key & Same value set & force event invocation */
274 tcore_object_set_property (co, "key", "2");
275 g_assert (g_hash_table_size (raw) == 1);
277 tmp_list = g_slist_append (NULL, (char*)"key");
278 tcore_object_emit_callback(co, CORE_OBJECT_EVENT_PROPERTY_CHANGED, tmp_list);
279 g_assert (mode == 0);
280 g_slist_free(tmp_list);
282 /* Case: Multiple property set */
284 tcore_object_set_property (co, "foo", "1", "bar", "2");
285 g_assert (g_hash_table_size (raw) == 3);
286 g_assert (mode == 0);
288 /* Case: Set key without value => same as key with NULL: remove key */
290 tcore_object_set_property (co, "foo");
291 g_assert (g_hash_table_size (raw) == 2);
292 g_assert (mode == 0);
294 /* Case: Multiple property set with unset (foo set, bar unset) */
296 tcore_object_set_property (co, "foo", "1", "bar");
297 g_assert (g_hash_table_size (raw) == 2);
298 g_assert (mode == 0);
300 tcore_object_free (co);
303 int main(int argc, char **argv)
305 g_test_init(&argc, &argv, NULL);
307 g_test_add_func("/co/new", test_co_new);
308 g_test_add_func("/co/callback_renew", test_callback_renew);
309 g_test_add_func("/co/callback_once", test_callback_once);
310 g_test_add_func("/co/property", test_property);