[glib/wip/gmenu: 30/59] Add a test for menu subscriptions
- From: Ryan Lortie <ryanl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib/wip/gmenu: 30/59] Add a test for menu subscriptions
- Date: Fri, 2 Dec 2011 21:33:37 +0000 (UTC)
commit 8baa4027efdf2a16874a79f0723a53743cf07b7f
Author: Matthias Clasen <mclasen redhat com>
Date: Sun Nov 27 23:28:53 2011 -0500
Add a test for menu subscriptions
gio/tests/gmenumodel.c | 165 +++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 163 insertions(+), 2 deletions(-)
---
diff --git a/gio/tests/gmenumodel.c b/gio/tests/gmenumodel.c
index 52d71d9..88a26d2 100644
--- a/gio/tests/gmenumodel.c
+++ b/gio/tests/gmenumodel.c
@@ -608,6 +608,99 @@ test_dbus_roundtrip (void)
g_object_unref (bus);
}
+static gint items_changed_count;
+
+static void
+items_changed (GMenuModel *model,
+ gint position,
+ gint removed,
+ gint added,
+ gpointer data)
+{
+ items_changed_count++;
+}
+
+static gboolean
+stop_loop (gpointer data)
+{
+ GMainLoop *loop = data;
+
+ g_main_loop_quit (loop);
+
+ return FALSE;
+}
+
+static void
+test_dbus_subscriptions (void)
+{
+ GDBusConnection *bus;
+ GMenu *menu;
+ GMenuProxy *proxy;
+ GVariant *v;
+ GMainLoop *loop;
+
+ bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL);
+
+ menu = g_menu_new ();
+
+ g_menu_model_dbus_export_start (bus, "/", G_MENU_MODEL (menu), NULL);
+
+ proxy = g_menu_proxy_get (bus, g_dbus_connection_get_unique_name (bus), "/");
+ items_changed_count = 0;
+ g_signal_connect (proxy, "items-changed",
+ G_CALLBACK (items_changed), NULL);
+
+ g_menu_append (menu, "item1", NULL);
+ g_menu_append (menu, "item2", NULL);
+ g_menu_append (menu, "item3", NULL);
+
+ g_assert_cmpint (items_changed_count, ==, 0);
+
+ loop = g_main_loop_new (NULL, FALSE);
+ g_timeout_add (100, stop_loop, loop);
+ g_main_loop_run (loop);
+
+ g_menu_model_get_n_items (G_MENU_MODEL (proxy));
+
+ g_timeout_add (100, stop_loop, loop);
+ g_main_loop_run (loop);
+
+ g_assert_cmpint (items_changed_count, ==, 1);
+
+ g_assert_cmpint (g_menu_model_get_n_items (G_MENU_MODEL (proxy)), ==, 3);
+
+ g_timeout_add (100, stop_loop, loop);
+ g_main_loop_run (loop);
+
+ g_menu_append (menu, "item4", NULL);
+ g_menu_append (menu, "item5", NULL);
+ g_menu_append (menu, "item6", NULL);
+ g_menu_remove (menu, 0);
+ g_menu_remove (menu, 0);
+
+ g_timeout_add (100, stop_loop, loop);
+ g_main_loop_run (loop);
+
+ g_assert_cmpint (items_changed_count, ==, 6);
+
+ g_assert_cmpint (g_menu_model_get_n_items (G_MENU_MODEL (proxy)), ==, 4);
+ g_object_unref (proxy);
+
+ g_timeout_add (100, stop_loop, loop);
+ g_main_loop_run (loop);
+
+ g_menu_remove (menu, 0);
+ g_menu_remove (menu, 0);
+
+ g_timeout_add (100, stop_loop, loop);
+ g_main_loop_run (loop);
+
+ g_assert_cmpint (items_changed_count, ==, 6);
+
+ g_menu_model_dbus_export_stop (G_MENU_MODEL (menu));
+ g_object_unref (menu);
+}
+
static void
start_element (GMarkupParseContext *context,
const gchar *element_name,
@@ -828,7 +921,73 @@ test_mutable (void)
g_object_unref (menu);
}
-/* Epilogue {{{1 */
+static void
+test_misc (void)
+{
+ /* trying to use most of the GMenu api for constructing the
+ * same menu two different ways
+ */
+ GMenu *a, *m, *m2;
+ GMenuModel *b;
+ GMenuItem *item;
+ const gchar *s;
+
+ a = g_menu_new ();
+ item = g_menu_item_new ("test1", "action1::target1");
+ g_menu_prepend_item (a, item);
+ g_object_unref (item);
+
+ m = g_menu_new ();
+ g_menu_prepend (m, "test2a", "action2");
+ g_menu_append (m, "test2c", NULL);
+ g_menu_insert (m, 1, "test2b", NULL);
+
+ item = g_menu_item_new_submenu ("test2", G_MENU_MODEL (m));
+ g_menu_append_item (a, item);
+ g_object_unref (item);
+ g_object_unref (m);
+
+ m = g_menu_new ();
+
+ m2 = g_menu_new ();
+ g_menu_append (m2, "x", NULL);
+ g_menu_prepend_section (m, "test3a", G_MENU_MODEL (m2));
+ g_object_unref (m2);
+
+ item = g_menu_item_new_section ("test3", G_MENU_MODEL (m));
+ g_menu_insert_item (a, -1, item);
+ g_object_unref (item);
+ g_object_unref (m);
+
+ s = ""
+"<menu>"
+" <item target='target1' action='action1' label='test1'/>"
+" <item label='test2'>"
+" <link name='submenu'>"
+" <item action='action2' label='test2a'/>"
+" <item label='test2b'/>"
+" <item label='test2c'/>"
+" </link>"
+" </item>"
+" <item label='test3'>"
+" <link name='section'>"
+" <item label='test3a'>"
+" <link name='section'>"
+" <item label='x'/>"
+" </link>"
+" </item>"
+" </link>"
+" </item>"
+"</menu>";
+
+ b = parse_menu_string (s, NULL);
+
+ assert_menus_equal (G_MENU_MODEL (a), G_MENU_MODEL (b));
+ g_object_unref (a);
+ g_object_unref (b);
+}
+
+ /* Epilogue {{{1 */
int
main (int argc, char **argv)
{
@@ -838,11 +997,13 @@ main (int argc, char **argv)
g_test_add_func ("/gmenu/equality", test_equality);
g_test_add_func ("/gmenu/random", test_random);
- g_test_add_func ("/gmenu/bus/roundtrip", test_dbus_roundtrip);
+ g_test_add_func ("/gmenu/dbus/roundtrip", test_dbus_roundtrip);
+ g_test_add_func ("/gmenu/dbus/subscriptions", test_dbus_subscriptions);
g_test_add_func ("/gmenu/markup/roundtrip", test_markup_roundtrip);
g_test_add_func ("/gmenu/attributes", test_attributes);
g_test_add_func ("/gmenu/links", test_links);
g_test_add_func ("/gmenu/mutable", test_mutable);
+ g_test_add_func ("/gmenu/misc", test_misc);
return g_test_run ();
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]