mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-09-27 17:52:58 +02:00
Improve GActionGroup test coverage
This commit is contained in:
@@ -515,6 +515,108 @@ stop_loop (gpointer data)
|
|||||||
return G_SOURCE_REMOVE;
|
return G_SOURCE_REMOVE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static GActionEntry exported_entries[] = {
|
||||||
|
{ "undo", activate_action, NULL, NULL, NULL },
|
||||||
|
{ "redo", activate_action, NULL, NULL, NULL },
|
||||||
|
{ "cut", activate_action, NULL, NULL, NULL },
|
||||||
|
{ "copy", activate_action, NULL, NULL, NULL },
|
||||||
|
{ "paste", activate_action, NULL, NULL, NULL },
|
||||||
|
{ "bold", activate_toggle, NULL, "true", NULL },
|
||||||
|
{ "lang", activate_radio, "s", "'latin'", NULL },
|
||||||
|
};
|
||||||
|
|
||||||
|
static void
|
||||||
|
list_cb (GObject *source,
|
||||||
|
GAsyncResult *res,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
GDBusConnection *bus = G_DBUS_CONNECTION (source);
|
||||||
|
GMainLoop *loop = user_data;
|
||||||
|
GError *error = NULL;
|
||||||
|
GVariant *v;
|
||||||
|
gchar **actions;
|
||||||
|
|
||||||
|
v = g_dbus_connection_call_finish (bus, res, &error);
|
||||||
|
g_assert (v);
|
||||||
|
g_variant_get (v, "(^a&s)", &actions);
|
||||||
|
g_assert_cmpint (g_strv_length (actions), ==, G_N_ELEMENTS (exported_entries));
|
||||||
|
g_variant_unref (v);
|
||||||
|
g_main_loop_quit (loop);
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
call_list (gpointer user_data)
|
||||||
|
{
|
||||||
|
GDBusConnection *bus;
|
||||||
|
|
||||||
|
bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL);
|
||||||
|
g_dbus_connection_call (bus,
|
||||||
|
g_dbus_connection_get_unique_name (bus),
|
||||||
|
"/",
|
||||||
|
"org.gtk.Actions",
|
||||||
|
"List",
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
0,
|
||||||
|
G_MAXINT,
|
||||||
|
NULL,
|
||||||
|
list_cb,
|
||||||
|
user_data);
|
||||||
|
g_object_unref (bus);
|
||||||
|
|
||||||
|
return G_SOURCE_REMOVE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
describe_cb (GObject *source,
|
||||||
|
GAsyncResult *res,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
GDBusConnection *bus = G_DBUS_CONNECTION (source);
|
||||||
|
GMainLoop *loop = user_data;
|
||||||
|
GError *error = NULL;
|
||||||
|
GVariant *v;
|
||||||
|
gboolean enabled;
|
||||||
|
gchar *param;
|
||||||
|
GVariantIter *iter;
|
||||||
|
|
||||||
|
v = g_dbus_connection_call_finish (bus, res, &error);
|
||||||
|
g_assert (v);
|
||||||
|
/* FIXME: there's an extra level of tuplelization in here */
|
||||||
|
g_variant_get (v, "((bgav))", &enabled, ¶m, &iter);
|
||||||
|
g_assert (enabled == TRUE);
|
||||||
|
g_assert_cmpstr (param, ==, "");
|
||||||
|
g_assert_cmpint (g_variant_iter_n_children (iter), ==, 0);
|
||||||
|
g_free (param);
|
||||||
|
g_variant_iter_free (iter);
|
||||||
|
g_variant_unref (v);
|
||||||
|
|
||||||
|
g_main_loop_quit (loop);
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
call_describe (gpointer user_data)
|
||||||
|
{
|
||||||
|
GDBusConnection *bus;
|
||||||
|
|
||||||
|
bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL);
|
||||||
|
g_dbus_connection_call (bus,
|
||||||
|
g_dbus_connection_get_unique_name (bus),
|
||||||
|
"/",
|
||||||
|
"org.gtk.Actions",
|
||||||
|
"Describe",
|
||||||
|
g_variant_new ("(s)", "copy"),
|
||||||
|
NULL,
|
||||||
|
0,
|
||||||
|
G_MAXINT,
|
||||||
|
NULL,
|
||||||
|
describe_cb,
|
||||||
|
user_data);
|
||||||
|
g_object_unref (bus);
|
||||||
|
|
||||||
|
return G_SOURCE_REMOVE;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
test_dbus_export (void)
|
test_dbus_export (void)
|
||||||
{
|
{
|
||||||
@@ -523,18 +625,10 @@ test_dbus_export (void)
|
|||||||
GDBusActionGroup *proxy;
|
GDBusActionGroup *proxy;
|
||||||
GSimpleAction *action;
|
GSimpleAction *action;
|
||||||
GMainLoop *loop;
|
GMainLoop *loop;
|
||||||
static GActionEntry entries[] = {
|
|
||||||
{ "undo", activate_action, NULL, NULL, NULL },
|
|
||||||
{ "redo", activate_action, NULL, NULL, NULL },
|
|
||||||
{ "cut", activate_action, NULL, NULL, NULL },
|
|
||||||
{ "copy", activate_action, NULL, NULL, NULL },
|
|
||||||
{ "paste", activate_action, NULL, NULL, NULL },
|
|
||||||
{ "bold", activate_toggle, NULL, "true", NULL },
|
|
||||||
{ "lang", activate_radio, "s", "'latin'", NULL },
|
|
||||||
};
|
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
GVariant *v;
|
GVariant *v;
|
||||||
guint id;
|
guint id;
|
||||||
|
gchar **actions;
|
||||||
|
|
||||||
loop = g_main_loop_new (NULL, FALSE);
|
loop = g_main_loop_new (NULL, FALSE);
|
||||||
|
|
||||||
@@ -542,17 +636,35 @@ test_dbus_export (void)
|
|||||||
bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL);
|
bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL);
|
||||||
|
|
||||||
group = g_simple_action_group_new ();
|
group = g_simple_action_group_new ();
|
||||||
g_simple_action_group_add_entries (group, entries, G_N_ELEMENTS (entries), NULL);
|
g_simple_action_group_add_entries (group,
|
||||||
|
exported_entries,
|
||||||
|
G_N_ELEMENTS (exported_entries),
|
||||||
|
NULL);
|
||||||
|
|
||||||
id = g_dbus_connection_export_action_group (bus, "/", G_ACTION_GROUP (group), &error);
|
id = g_dbus_connection_export_action_group (bus, "/", G_ACTION_GROUP (group), &error);
|
||||||
g_assert_no_error (error);
|
g_assert_no_error (error);
|
||||||
|
|
||||||
proxy = g_dbus_action_group_get (bus, g_dbus_connection_get_unique_name (bus), "/");
|
proxy = g_dbus_action_group_get (bus, g_dbus_connection_get_unique_name (bus), "/");
|
||||||
g_strfreev (g_action_group_list_actions (G_ACTION_GROUP (proxy)));
|
|
||||||
|
actions = g_action_group_list_actions (G_ACTION_GROUP (proxy));
|
||||||
|
g_assert_cmpint (g_strv_length (actions), ==, 0);
|
||||||
|
g_strfreev (actions);
|
||||||
|
|
||||||
g_timeout_add (100, stop_loop, loop);
|
g_timeout_add (100, stop_loop, loop);
|
||||||
g_main_loop_run (loop);
|
g_main_loop_run (loop);
|
||||||
|
|
||||||
|
actions = g_action_group_list_actions (G_ACTION_GROUP (proxy));
|
||||||
|
g_assert_cmpint (g_strv_length (actions), ==, G_N_ELEMENTS (exported_entries));
|
||||||
|
g_strfreev (actions);
|
||||||
|
|
||||||
|
/* check that calling "List" works too */
|
||||||
|
g_idle_add (call_list, loop);
|
||||||
|
g_main_loop_run (loop);
|
||||||
|
|
||||||
|
/* check that calling "Describe" works */
|
||||||
|
g_idle_add (call_describe, loop);
|
||||||
|
g_main_loop_run (loop);
|
||||||
|
|
||||||
/* test that the initial transfer works */
|
/* test that the initial transfer works */
|
||||||
g_assert (G_IS_DBUS_ACTION_GROUP (proxy));
|
g_assert (G_IS_DBUS_ACTION_GROUP (proxy));
|
||||||
g_assert (compare_action_groups (G_ACTION_GROUP (group), G_ACTION_GROUP (proxy)));
|
g_assert (compare_action_groups (G_ACTION_GROUP (group), G_ACTION_GROUP (proxy)));
|
||||||
|
Reference in New Issue
Block a user