1 /* -*- mode: C; c-basic-offset: 4; indent-tabs-mode: nil; -*- */
9 print_engines (const GList *engines)
11 for (; engines; engines = g_list_next (engines)) {
12 IBusEngineDesc *engine_desc = IBUS_ENGINE_DESC (engines->data);
13 g_assert (engine_desc);
15 g_debug ("%s (id:%s, icon:%s)",
16 ibus_engine_desc_get_longname (engine_desc),
17 ibus_engine_desc_get_name (engine_desc),
18 ibus_engine_desc_get_icon (engine_desc));
24 test_list_active_engines (void)
27 IBUS_TYPE_ENGINE_DESC;
29 engines = ibus_bus_list_active_engines (bus);
30 print_engines (engines);
32 g_list_foreach (engines, (GFunc) g_object_unref, NULL);
33 g_list_free (engines);
37 test_list_engines (void)
40 IBUS_TYPE_ENGINE_DESC;
42 engines = ibus_bus_list_engines (bus);
43 print_engines (engines);
45 g_list_foreach (engines, (GFunc) g_object_unref, NULL);
46 g_list_free (engines);
49 static void call_next_async_function (void);
52 finish_request_name_async (GObject *source_object,
57 guint id = ibus_bus_request_name_async_finish (bus,
61 g_debug ("ibus_bus_request_name_async_finish: OK");
62 call_next_async_function ();
66 start_request_name_async (void)
68 ibus_bus_request_name_async (bus,
69 "org.freedesktop.IBus.IBusBusTest",
72 NULL, /* cancellable */
73 finish_request_name_async,
74 NULL); /* user_data */
79 finish_name_has_owner_async (GObject *source_object,
84 gboolean has_owner = ibus_bus_name_has_owner_async_finish (bus,
88 g_debug ("ibus_bus_name_has_owner_async_finish: OK");
89 call_next_async_function ();
93 start_name_has_owner_async (void)
95 ibus_bus_name_has_owner_async (bus,
96 "org.freedesktop.IBus.IBusBusTest",
98 NULL, /* cancellable */
99 finish_name_has_owner_async,
100 NULL); /* user_data */
104 finish_get_name_owner_async (GObject *source_object,
108 GError *error = NULL;
109 gchar *owner = ibus_bus_get_name_owner_async_finish (bus,
114 g_debug ("ibus_bus_name_get_name_owner_async_finish: OK");
115 call_next_async_function ();
119 start_get_name_owner_async (void)
121 ibus_bus_get_name_owner_async (bus,
122 "org.freedesktop.IBus.IBusBusTest",
124 NULL, /* cancellable */
125 finish_get_name_owner_async,
126 NULL); /* user_data */
130 finish_release_name_async (GObject *source_object,
134 GError *error = NULL;
135 guint id = ibus_bus_release_name_async_finish (bus,
139 g_debug ("ibus_bus_release_name_async_finish: OK");
140 call_next_async_function ();
144 start_release_name_async (void)
146 ibus_bus_release_name_async (bus,
147 "org.freedesktop.IBus.IBusBusTest",
149 NULL, /* cancellable */
150 finish_release_name_async,
151 NULL); /* user_data */
155 finish_add_match_async (GObject *source_object,
159 GError *error = NULL;
160 gboolean result = ibus_bus_add_match_async_finish (bus,
164 g_debug ("ibus_bus_add_match_finish: OK");
165 call_next_async_function ();
169 start_add_match_async (void)
171 ibus_bus_add_match_async (bus,
174 NULL, /* cancellable */
175 finish_add_match_async,
176 NULL); /* user_data */
180 finish_remove_match_async (GObject *source_object,
184 GError *error = NULL;
185 gboolean result = ibus_bus_remove_match_async_finish (bus,
189 g_debug ("ibus_bus_remove_match_finish: OK");
190 call_next_async_function ();
194 start_remove_match_async (void)
196 ibus_bus_remove_match_async (bus,
199 NULL, /* cancellable */
200 finish_remove_match_async,
201 NULL); /* user_data */
204 static int create_input_context_count = 0;
206 finish_create_input_context_async_sucess (GObject *source_object,
210 GMainLoop *loop = (GMainLoop *)user_data;
211 GError *error = NULL;
212 IBusInputContext *context =
213 ibus_bus_create_input_context_async_finish (bus, res, &error);
215 g_assert (IBUS_IS_INPUT_CONTEXT (context));
216 g_object_unref (context);
217 if (--create_input_context_count == 0)
218 g_main_loop_quit (loop);
222 finish_create_input_context_async_failed (GObject *source_object,
226 GMainLoop *loop = (GMainLoop *)user_data;
227 GError *error = NULL;
228 IBusInputContext *context =
229 ibus_bus_create_input_context_async_finish (bus, res, &error);
231 g_assert (context == NULL);
232 g_assert (error != NULL);
233 g_error_free (error);
234 if (--create_input_context_count <= 0)
235 g_main_loop_quit (loop);
239 test_create_input_context_async (void)
241 GMainLoop *loop = NULL;
242 GCancellable *cancellable = NULL;
245 create_input_context_count = 1;
246 loop = g_main_loop_new (NULL, TRUE);
247 ibus_bus_create_input_context_async (bus,
250 NULL, /* cancellable */
251 finish_create_input_context_async_sucess,
252 loop); /* user_data */
253 g_main_loop_run (loop);
254 g_main_loop_unref (loop);
256 /* call create, and then cancel */
257 create_input_context_count = 1;
258 loop = g_main_loop_new (NULL, TRUE);
259 cancellable = g_cancellable_new ();
260 ibus_bus_create_input_context_async (bus,
263 cancellable, /* cancellable */
264 finish_create_input_context_async_failed,
265 loop); /* user_data */
266 g_cancellable_cancel (cancellable);
267 g_object_unref (cancellable);
268 g_main_loop_run (loop);
269 g_main_loop_unref (loop);
271 /* ceate four IC, and cancel two */
272 create_input_context_count = 4;
273 loop = g_main_loop_new (NULL, TRUE);
274 cancellable = g_cancellable_new ();
275 ibus_bus_create_input_context_async (bus,
278 cancellable, /* cancellable */
279 finish_create_input_context_async_failed,
280 loop); /* user_data */
281 ibus_bus_create_input_context_async (bus,
284 NULL, /* cancellable */
285 finish_create_input_context_async_sucess,
286 loop); /* user_data */
287 ibus_bus_create_input_context_async (bus,
290 NULL, /* cancellable */
291 finish_create_input_context_async_sucess,
292 loop); /* user_data */
293 ibus_bus_create_input_context_async (bus,
296 cancellable, /* cancellable */
297 finish_create_input_context_async_failed,
298 loop); /* user_data */
299 g_cancellable_cancel (cancellable);
300 g_object_unref (cancellable);
302 g_main_loop_run (loop);
303 g_main_loop_unref (loop);
307 finish_current_input_context_async (GObject *source_object,
311 GError *error = NULL;
312 g_free (ibus_bus_current_input_context_async_finish (bus,
316 g_debug ("ibus_bus_current_input_context_finish: OK");
317 call_next_async_function ();
321 start_current_input_context_async (void)
323 ibus_bus_current_input_context_async (bus,
325 NULL, /* cancellable */
326 finish_current_input_context_async,
327 NULL); /* user_data */
331 finish_list_engines_async (GObject *source_object,
335 GError *error = NULL;
336 GList *engines = ibus_bus_list_engines_async_finish (bus,
340 g_list_foreach (engines, (GFunc) g_object_unref, NULL);
341 g_list_free (engines);
342 g_debug ("ibus_bus_list_engines_finish: OK");
343 call_next_async_function ();
347 start_list_engines_async (void)
349 ibus_bus_list_engines_async (bus,
351 NULL, /* cancellable */
352 finish_list_engines_async,
353 NULL); /* user_data */
357 finish_list_active_engines_async (GObject *source_object,
361 GError *error = NULL;
362 GList *engines = ibus_bus_list_active_engines_async_finish (bus,
366 g_list_foreach (engines, (GFunc) g_object_unref, NULL);
367 g_list_free (engines);
368 g_debug ("ibus_bus_list_active_engines_finish: OK");
369 call_next_async_function ();
373 start_list_active_engines_async (void)
375 ibus_bus_list_active_engines_async (bus,
377 NULL, /* cancellable */
378 finish_list_active_engines_async,
379 NULL); /* user_data */
383 finish_get_use_sys_layout_async (GObject *source_object,
387 GError *error = NULL;
388 ibus_bus_get_use_sys_layout_async_finish (bus,
391 g_debug ("ibus_bus_get_use_sys_layout_finish: OK");
392 call_next_async_function ();
396 start_get_use_sys_layout_async (void)
398 ibus_bus_get_use_sys_layout_async (bus,
400 NULL, /* cancellable */
401 finish_get_use_sys_layout_async,
402 NULL); /* user_data */
406 finish_get_use_global_engine_async (GObject *source_object,
410 GError *error = NULL;
411 ibus_bus_get_use_global_engine_async_finish (bus,
414 g_debug ("ibus_bus_get_use_global_engine_finish: OK");
415 call_next_async_function ();
419 start_get_use_global_engine_async (void)
421 ibus_bus_get_use_global_engine_async (bus,
423 NULL, /* cancellable */
424 finish_get_use_global_engine_async,
425 NULL); /* user_data */
429 finish_is_global_engine_enabled_async (GObject *source_object,
433 GError *error = NULL;
434 ibus_bus_is_global_engine_enabled_async_finish (bus,
437 g_debug ("ibus_bus_is_global_engine_enabled_finish: OK");
438 call_next_async_function ();
442 start_is_global_engine_enabled_async (void)
444 ibus_bus_is_global_engine_enabled_async (bus,
446 NULL, /* cancellable */
447 finish_is_global_engine_enabled_async,
448 NULL); /* user_data */
452 finish_get_global_engine_async (GObject *source_object,
456 GError *error = NULL;
457 IBusEngineDesc *desc = ibus_bus_get_global_engine_async_finish (bus,
461 g_object_unref (desc);
462 g_debug ("ibus_bus_get_global_engine_finish: OK");
463 call_next_async_function ();
467 start_get_global_engine_async (void)
469 ibus_bus_get_global_engine_async (bus,
471 NULL, /* cancellable */
472 finish_get_global_engine_async,
473 NULL); /* user_data */
477 finish_set_global_engine_async (GObject *source_object,
481 GError *error = NULL;
482 ibus_bus_set_global_engine_async_finish (bus,
485 g_debug ("ibus_bus_set_global_engine_finish: OK");
486 call_next_async_function ();
490 start_set_global_engine_async (void)
492 ibus_bus_set_global_engine_async (bus,
495 NULL, /* cancellable */
496 finish_set_global_engine_async,
497 NULL); /* user_data */
501 finish_preload_engines_async (GObject *source_object,
505 GError *error = NULL;
506 ibus_bus_preload_engines_async_finish (bus, res, &error);
507 g_debug ("ibus_bus_preload_engines_async_finish: OK");
508 call_next_async_function ();
512 start_preload_engines_async (void)
514 const gchar *preload_engines[] = { "xkb:us::eng", NULL };
516 ibus_bus_preload_engines_async (
520 NULL, /* cancellable */
521 finish_preload_engines_async,
522 NULL); /* user_data */
526 finish_exit_async (GObject *source_object,
530 GError *error = NULL;
531 gboolean result = ibus_bus_exit_async_finish (bus,
535 g_debug ("ibus_bus_exit_finish: OK");
536 g_usleep (G_USEC_PER_SEC);
537 call_next_async_function ();
541 start_exit_async (void)
543 ibus_bus_exit_async (bus,
546 NULL, /* cancellable */
548 NULL); /* user_data */
552 test_async_apis_finish (gpointer user_data)
559 test_get_engines_by_names (void)
561 IBusEngineDesc **engines = NULL;
562 const gchar *names[] = {
567 "invalid_engine_name",
571 engines = ibus_bus_get_engines_by_names (bus, names);
573 g_assert(engines != NULL);
577 for (p = engines; *p != NULL; p++) {
578 g_assert (IBUS_IS_ENGINE_DESC (*p));
579 g_assert_cmpstr (names[i], ==, ibus_engine_desc_get_name (*p));
582 // The ref should be zero, *p is released.
583 g_assert (!IBUS_IS_ENGINE_DESC (*p));
586 // The last engine does not exist.
587 g_assert_cmpint (i, ==, G_N_ELEMENTS(names) - 2);
595 test_async_apis (void)
598 call_next_async_function ();
603 call_next_async_function (void)
605 static void (*async_functions[])(void) = {
606 start_request_name_async,
607 start_name_has_owner_async,
608 start_get_name_owner_async,
609 start_release_name_async,
610 start_add_match_async,
611 start_remove_match_async,
612 start_current_input_context_async,
613 // FIXME test ibus_bus_register_component_async.
614 start_list_engines_async,
615 start_list_active_engines_async,
616 start_get_use_sys_layout_async,
617 start_get_use_global_engine_async,
618 start_is_global_engine_enabled_async,
619 start_set_global_engine_async,
620 start_get_global_engine_async,
621 start_preload_engines_async,
624 static guint index = 0;
626 // Use g_timeout_add to make sure test_async_apis finishes even if async_functions is empty.
627 if (index >= G_N_ELEMENTS (async_functions))
628 g_timeout_add (1, test_async_apis_finish, NULL);
630 (*async_functions[index++])();
634 _bus_connected_cb (IBusBus *bus,
637 g_assert (ibus_bus_is_connected (bus));
642 test_bus_new_async (void)
644 g_object_unref (bus);
645 bus = ibus_bus_new_async ();
646 g_signal_connect (bus, "connected", G_CALLBACK (_bus_connected_cb), NULL);
656 g_test_init (&argc, &argv, NULL);
657 bus = ibus_bus_new ();
658 g_object_unref (bus);
659 bus = ibus_bus_new (); // crosbug.com/17293
661 g_test_add_func ("/ibus/list-engines", test_list_engines);
662 g_test_add_func ("/ibus/list-active-engines", test_list_active_engines);
663 g_test_add_func ("/ibus/create-input-context-async",
664 test_create_input_context_async);
665 g_test_add_func ("/ibus/get-engines-by-names", test_get_engines_by_names);
666 g_test_add_func ("/ibus/async-apis", test_async_apis);
667 g_test_add_func ("/ibus/bus-new-async", test_bus_new_async);
668 g_test_add_func ("/ibus/bus-new-async/list-engines", test_list_engines);
669 g_test_add_func ("/ibus/bus-new-async/list-active-engines", test_list_active_engines);
670 g_test_add_func ("/ibus/bus-new-async/create-input-context-async",
671 test_create_input_context_async);
672 g_test_add_func ("/ibus/bus-new-async/get-engines-by-names", test_get_engines_by_names);
673 g_test_add_func ("/ibus/bus-new-async/async-apis", test_async_apis);
675 result = g_test_run ();
676 g_object_unref (bus);