1 /* -*- mode: C; c-basic-offset: 4; indent-tabs-mode: nil; -*- */
9 get_last_engine_id (const GList *engines)
11 const char *result = NULL;
12 for (; engines; engines = g_list_next (engines)) {
13 IBusEngineDesc *engine_desc = IBUS_ENGINE_DESC (engines->data);
14 g_assert (engine_desc);
15 result = ibus_engine_desc_get_name (engine_desc);
17 return g_strdup (result);
21 print_engines (const GList *engines)
23 for (; engines; engines = g_list_next (engines)) {
24 IBusEngineDesc *engine_desc = IBUS_ENGINE_DESC (engines->data);
25 g_assert (engine_desc);
27 g_debug ("%s (id:%s, icon:%s)",
28 ibus_engine_desc_get_longname (engine_desc),
29 ibus_engine_desc_get_name (engine_desc),
30 ibus_engine_desc_get_icon (engine_desc));
36 test_list_active_engines (void)
39 IBUS_TYPE_ENGINE_DESC;
41 engines = ibus_bus_list_active_engines (bus);
42 print_engines (engines);
44 g_list_foreach (engines, (GFunc) g_object_unref, NULL);
45 g_list_free (engines);
49 test_list_engines (void)
52 IBUS_TYPE_ENGINE_DESC;
54 engines = ibus_bus_list_engines (bus);
55 print_engines (engines);
57 g_list_foreach (engines, (GFunc) g_object_unref, NULL);
58 g_list_free (engines);
62 test_input_context (void)
65 gchar *active_engine_name = NULL;
66 IBusInputContext *context;
67 IBusEngineDesc *engine_desc;
70 engines = ibus_bus_list_active_engines (bus);
73 active_engine_name = get_last_engine_id (engines);
74 g_assert (active_engine_name);
76 context = ibus_bus_create_input_context (bus, "test");
77 ibus_input_context_set_capabilities (context, IBUS_CAP_FOCUS);
78 ibus_input_context_disable (context);
79 g_assert (ibus_input_context_is_enabled (context) == FALSE);
80 ibus_input_context_enable (context);
81 g_assert (ibus_input_context_is_enabled (context) == TRUE);
82 ibus_input_context_focus_in (context);
83 ibus_input_context_set_engine (context, active_engine_name);
84 current_ic = ibus_bus_current_input_context (bus);
85 g_assert (!strcmp (current_ic, g_dbus_proxy_get_object_path ((GDBusProxy *)context)));
86 engine_desc = ibus_input_context_get_engine (context);
87 g_assert (engine_desc);
88 g_assert (!strcmp (active_engine_name, ibus_engine_desc_get_name(engine_desc)));
90 g_object_unref (engine_desc);
91 g_object_unref (context);
93 g_free (active_engine_name);
94 g_list_foreach (engines, (GFunc) g_object_unref, NULL);
95 g_list_free (engines);
98 static void call_next_async_function (void);
101 finish_request_name_async (GObject *source_object,
105 GError *error = NULL;
106 guint id = ibus_bus_request_name_async_finish (bus,
110 g_debug ("ibus_bus_request_name_async_finish: OK");
111 call_next_async_function ();
115 start_request_name_async (void)
117 ibus_bus_request_name_async (bus,
118 "org.freedesktop.IBus.IBusBusTest",
121 NULL, /* cancellable */
122 finish_request_name_async,
123 NULL); /* user_data */
128 finish_name_has_owner_async (GObject *source_object,
132 GError *error = NULL;
133 gboolean has_owner = ibus_bus_name_has_owner_async_finish (bus,
136 g_assert (has_owner);
137 g_debug ("ibus_bus_name_has_owner_async_finish: OK");
138 call_next_async_function ();
142 start_name_has_owner_async (void)
144 ibus_bus_name_has_owner_async (bus,
145 "org.freedesktop.IBus.IBusBusTest",
147 NULL, /* cancellable */
148 finish_name_has_owner_async,
149 NULL); /* user_data */
153 finish_get_name_owner_async (GObject *source_object,
157 GError *error = NULL;
158 gchar *owner = ibus_bus_get_name_owner_async_finish (bus,
163 g_debug ("ibus_bus_name_get_name_owner_async_finish: OK");
164 call_next_async_function ();
168 start_get_name_owner_async (void)
170 ibus_bus_get_name_owner_async (bus,
171 "org.freedesktop.IBus.IBusBusTest",
173 NULL, /* cancellable */
174 finish_get_name_owner_async,
175 NULL); /* user_data */
179 finish_release_name_async (GObject *source_object,
183 GError *error = NULL;
184 guint id = ibus_bus_release_name_async_finish (bus,
188 g_debug ("ibus_bus_release_name_async_finish: OK");
189 call_next_async_function ();
193 start_release_name_async (void)
195 ibus_bus_release_name_async (bus,
196 "org.freedesktop.IBus.IBusBusTest",
198 NULL, /* cancellable */
199 finish_release_name_async,
200 NULL); /* user_data */
204 finish_add_match_async (GObject *source_object,
208 GError *error = NULL;
209 gboolean result = ibus_bus_add_match_async_finish (bus,
213 g_debug ("ibus_bus_add_match_finish: OK");
214 call_next_async_function ();
218 start_add_match_async (void)
220 ibus_bus_add_match_async (bus,
223 NULL, /* cancellable */
224 finish_add_match_async,
225 NULL); /* user_data */
229 finish_remove_match_async (GObject *source_object,
233 GError *error = NULL;
234 gboolean result = ibus_bus_remove_match_async_finish (bus,
238 g_debug ("ibus_bus_remove_match_finish: OK");
239 call_next_async_function ();
243 start_remove_match_async (void)
245 ibus_bus_remove_match_async (bus,
248 NULL, /* cancellable */
249 finish_remove_match_async,
250 NULL); /* user_data */
254 finish_create_input_context_async (GObject *source_object,
258 GError *error = NULL;
259 IBusInputContext *context = ibus_bus_create_input_context_async_finish (bus,
262 g_assert (context != NULL);
263 g_object_unref (context);
264 g_debug ("ibus_bus_create_input_context_finish: OK");
265 call_next_async_function ();
269 start_create_input_context_async (void)
271 ibus_bus_create_input_context_async (bus,
274 NULL, /* cancellable */
275 finish_create_input_context_async,
276 NULL); /* user_data */
280 finish_current_input_context_async (GObject *source_object,
284 GError *error = NULL;
285 g_free (ibus_bus_current_input_context_async_finish (bus,
289 g_debug ("ibus_bus_current_input_context_finish: OK");
290 call_next_async_function ();
294 start_current_input_context_async (void)
296 ibus_bus_current_input_context_async (bus,
298 NULL, /* cancellable */
299 finish_current_input_context_async,
300 NULL); /* user_data */
304 finish_list_engines_async (GObject *source_object,
308 GError *error = NULL;
309 GList *engines = ibus_bus_list_engines_async_finish (bus,
313 g_list_foreach (engines, (GFunc) g_object_unref, NULL);
314 g_list_free (engines);
315 g_debug ("ibus_bus_list_engines_finish: OK");
316 call_next_async_function ();
320 start_list_engines_async (void)
322 ibus_bus_list_engines_async (bus,
324 NULL, /* cancellable */
325 finish_list_engines_async,
326 NULL); /* user_data */
330 finish_list_active_engines_async (GObject *source_object,
334 GError *error = NULL;
335 GList *engines = ibus_bus_list_active_engines_async_finish (bus,
339 g_list_foreach (engines, (GFunc) g_object_unref, NULL);
340 g_list_free (engines);
341 g_debug ("ibus_bus_list_active_engines_finish: OK");
342 call_next_async_function ();
346 start_list_active_engines_async (void)
348 ibus_bus_list_active_engines_async (bus,
350 NULL, /* cancellable */
351 finish_list_active_engines_async,
352 NULL); /* user_data */
356 finish_get_use_sys_layout_async (GObject *source_object,
360 GError *error = NULL;
361 ibus_bus_get_use_sys_layout_async_finish (bus,
364 g_debug ("ibus_bus_get_use_sys_layout_finish: OK");
365 call_next_async_function ();
369 start_get_use_sys_layout_async (void)
371 ibus_bus_get_use_sys_layout_async (bus,
373 NULL, /* cancellable */
374 finish_get_use_sys_layout_async,
375 NULL); /* user_data */
379 finish_get_use_global_engine_async (GObject *source_object,
383 GError *error = NULL;
384 ibus_bus_get_use_global_engine_async_finish (bus,
387 g_debug ("ibus_bus_get_use_global_engine_finish: OK");
388 call_next_async_function ();
392 start_get_use_global_engine_async (void)
394 ibus_bus_get_use_global_engine_async (bus,
396 NULL, /* cancellable */
397 finish_get_use_global_engine_async,
398 NULL); /* user_data */
402 finish_is_global_engine_enabled_async (GObject *source_object,
406 GError *error = NULL;
407 ibus_bus_is_global_engine_enabled_async_finish (bus,
410 g_debug ("ibus_bus_is_global_engine_enabled_finish: OK");
411 call_next_async_function ();
415 start_is_global_engine_enabled_async (void)
417 ibus_bus_is_global_engine_enabled_async (bus,
419 NULL, /* cancellable */
420 finish_is_global_engine_enabled_async,
421 NULL); /* user_data */
425 finish_get_global_engine_async (GObject *source_object,
429 GError *error = NULL;
430 IBusEngineDesc *desc = ibus_bus_get_global_engine_async_finish (bus,
434 g_object_unref (desc);
435 g_debug ("ibus_bus_get_global_engine_finish: OK");
436 call_next_async_function ();
440 start_get_global_engine_async (void)
442 ibus_bus_get_global_engine_async (bus,
444 NULL, /* cancellable */
445 finish_get_global_engine_async,
446 NULL); /* user_data */
450 finish_set_global_engine_async (GObject *source_object,
454 GError *error = NULL;
455 ibus_bus_set_global_engine_async_finish (bus,
458 g_debug ("ibus_bus_set_global_engine_finish: OK");
459 call_next_async_function ();
463 start_set_global_engine_async (void)
465 ibus_bus_set_global_engine_async (bus,
468 NULL, /* cancellable */
469 finish_set_global_engine_async,
470 NULL); /* user_data */
474 finish_exit_async (GObject *source_object,
478 GError *error = NULL;
479 gboolean result = ibus_bus_exit_async_finish (bus,
483 g_debug ("ibus_bus_exit_finish: OK");
484 call_next_async_function ();
488 start_exit_async (void)
490 ibus_bus_exit_async (bus,
493 NULL, /* cancellable */
495 NULL); /* user_data */
499 test_async_apis_finish (gpointer user_data)
506 test_async_apis (void)
509 call_next_async_function ();
514 call_next_async_function (void)
516 static void (*async_functions[])(void) = {
517 start_request_name_async,
518 start_name_has_owner_async,
519 start_get_name_owner_async,
520 start_release_name_async,
521 start_add_match_async,
522 start_remove_match_async,
523 start_create_input_context_async,
524 start_current_input_context_async,
525 // FIXME test ibus_bus_register_component_async.
526 start_list_engines_async,
527 start_list_active_engines_async,
528 start_get_use_sys_layout_async,
529 start_get_use_global_engine_async,
530 start_is_global_engine_enabled_async,
531 start_set_global_engine_async,
532 start_get_global_engine_async,
535 static guint index = 0;
537 // Use g_timeout_add to make sure test_async_apis finishes even if async_functions is empty.
538 if (index >= G_N_ELEMENTS (async_functions))
539 g_timeout_add (1, test_async_apis_finish, NULL);
541 (*async_functions[index++])();
550 g_test_init (&argc, &argv, NULL);
552 bus = ibus_bus_new ();
554 g_test_add_func ("/ibus/list-engines", test_list_engines);
555 g_test_add_func ("/ibus/list-active-engines", test_list_active_engines);
556 g_test_add_func ("/ibus/async-apis", test_async_apis);
558 // FIXME This test does not pass if global engine is not available. Disabling it for now.
559 // g_test_add_func ("/ibus/input_context", test_input_context);
561 result = g_test_run ();
562 g_object_unref (bus);