/* -*- mode: C; c-basic-offset: 4; indent-tabs-mode: nil; -*- */ #include #include "ibus.h" static IBusBus *bus = NULL; static int create_config_count = 0; static void finish_create_config_async_success (GObject *source_object, GAsyncResult *res, gpointer user_data) { GMainLoop *loop = (GMainLoop *)user_data; GError *error = NULL; IBusConfig *config = ibus_config_new_async_finish (res, &error); if (error) { g_message ("Failed to generate IBusConfig: %s", error->message); g_error_free (error); } g_assert (IBUS_IS_CONFIG (config)); /* Since we reuse single D-Bus connection, we need to remove the default match rule for the next ibus_config_new() call. */ ibus_config_unwatch (config, NULL, NULL); g_object_unref (config); if (--create_config_count == 0) g_main_loop_quit (loop); } static void finish_create_config_async_failed (GObject *source_object, GAsyncResult *res, gpointer user_data) { GMainLoop *loop = (GMainLoop *)user_data; GError *error = NULL; IBusConfig *config = ibus_config_new_async_finish (res, &error); g_assert (config == NULL); g_assert (error != NULL); g_error_free (error); if (--create_config_count <= 0) g_main_loop_quit (loop); } static void test_create_config_async (void) { GMainLoop *loop = NULL; GCancellable *cancellable = NULL; /* create an IC */ create_config_count = 1; loop = g_main_loop_new (NULL, TRUE); ibus_config_new_async (ibus_bus_get_connection (bus), NULL, finish_create_config_async_success, loop); g_main_loop_run (loop); g_main_loop_unref (loop); /* call create, and then cancel */ create_config_count = 1; loop = g_main_loop_new (NULL, TRUE); cancellable = g_cancellable_new (); ibus_config_new_async (ibus_bus_get_connection (bus), cancellable, finish_create_config_async_failed, loop); g_cancellable_cancel (cancellable); g_object_unref (cancellable); g_main_loop_run (loop); g_main_loop_unref (loop); } static void test_config_set_get (void) { IBusConfig *config = ibus_config_new (ibus_bus_get_connection (bus), NULL, NULL); g_assert (config); ibus_config_set_value (config, "test", "v1", g_variant_new_int32(1)); ibus_config_set_value (config, "test", "v2", g_variant_new_string("2")); GVariant *var; var = ibus_config_get_value (config, "test", "v1"); g_assert (var); g_assert_cmpint (g_variant_get_int32(var), ==, 1); g_variant_unref (var); var = ibus_config_get_value (config, "test", "v2"); g_assert (var); g_assert_cmpstr (g_variant_get_string(var, NULL), ==, "2"); g_variant_unref (var); var = ibus_config_get_values (config, "test"); g_assert (var); GVariantIter iter; gchar *name; GVariant *value; g_variant_iter_init (&iter, var); gint value_bits = 0; while (g_variant_iter_next (&iter, "{&sv}", &name, &value)) { if (g_strcmp0 (name, "v1") == 0) { g_assert_cmpint (g_variant_get_int32(value), ==, 1); value_bits |= 1; } else if (g_strcmp0 (name, "v2") == 0) { g_assert_cmpstr (g_variant_get_string(value, NULL), ==, "2"); value_bits |= (1 << 1); } else { g_warning ("unknow value name=%s", name); } ibus_config_unset (config, "test", name); g_variant_unref (value); } g_assert_cmpint (value_bits, ==, 1 | (1 << 1)); g_variant_unref (var); var = ibus_config_get_values (config, "test"); g_assert (var); g_assert_cmpint (g_variant_n_children (var), ==, 0); g_variant_unref (var); /* Since we reuse single D-Bus connection, we need to remove the default match rule for the next ibus_config_new() call. */ ibus_config_unwatch (config, NULL, NULL); g_object_unref (config); } gint main (gint argc, gchar **argv) { gint result; ibus_init (); g_test_init (&argc, &argv, NULL); bus = ibus_bus_new (); g_test_add_func ("/ibus/create-config-async", test_create_config_async); g_test_add_func ("/ibus/config-set-get", test_config_set_get); result = g_test_run (); g_object_unref (bus); return result; }