From 8a2340c7249a714bf5c7128082b8c0c26f20a05f Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Fri, 27 Aug 2010 14:31:44 -0500 Subject: Adding in an events test --- tests/test-glib-events-server.c | 109 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 tests/test-glib-events-server.c (limited to 'tests/test-glib-events-server.c') diff --git a/tests/test-glib-events-server.c b/tests/test-glib-events-server.c new file mode 100644 index 0000000..68f7004 --- /dev/null +++ b/tests/test-glib-events-server.c @@ -0,0 +1,109 @@ +/* +A test for libdbusmenu to ensure its quality. + +Copyright 2009 Canonical Ltd. + +Authors: + Ted Gould + +This program is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License version 3, as published +by the Free Software Foundation. + +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranties of +MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR +PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program. If not, see . +*/ + +#include + +#include +#include +#include +#include + +#include +#include + +#include "test-glib-submenu.h" + + +static DbusmenuMenuitem * +layout2menuitem (layout_t * layout) +{ + if (layout == NULL || layout->id == 0) return NULL; + + DbusmenuMenuitem * local = dbusmenu_menuitem_new_with_id(layout->id); + + if (layout->submenu != NULL) { + guint count; + for (count = 0; layout->submenu[count].id != -1; count++) { + DbusmenuMenuitem * child = layout2menuitem(&layout->submenu[count]); + if (child != NULL) { + dbusmenu_menuitem_child_append(local, child); + } + } + } + + /* g_debug("Layout to menu return: 0x%X", (unsigned int)local); */ + return local; +} + +static guint layouton = 0; +static DbusmenuServer * server = NULL; +static GMainLoop * mainloop = NULL; + +static gboolean +timer_func (gpointer data) +{ + if (layouts[layouton].id == -1) { + g_main_loop_quit(mainloop); + return FALSE; + } + g_debug("Updating to Layout %d", layouton); + + dbusmenu_server_set_root(server, layout2menuitem(&layouts[layouton])); + layouton++; + + return TRUE; +} + +int +main (int argc, char ** argv) +{ + GError * error = NULL; + + g_type_init(); + + DBusGConnection * connection = dbus_g_bus_get(DBUS_BUS_SESSION, NULL); + g_debug("DBus ID: %s", dbus_connection_get_server_id(dbus_g_connection_get_connection(dbus_g_bus_get(DBUS_BUS_SESSION, NULL)))); + + DBusGProxy * bus_proxy = dbus_g_proxy_new_for_name(connection, DBUS_SERVICE_DBUS, DBUS_PATH_DBUS, DBUS_INTERFACE_DBUS); + guint nameret = 0; + + if (!org_freedesktop_DBus_request_name(bus_proxy, "org.dbusmenu.test", 0, &nameret, &error)) { + g_error("Unable to call to request name"); + return 1; + } + + if (nameret != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER) { + g_error("Unable to get name"); + return 1; + } + + server = dbusmenu_server_new("/org/test"); + + timer_func(NULL); + g_timeout_add(2500, timer_func, NULL); + + mainloop = g_main_loop_new(NULL, FALSE); + g_main_loop_run(mainloop); + + g_debug("Quiting"); + + return 0; +} -- cgit v1.2.3 From c0674ee7a6f7a2bf83f19e3c897cdda918c52d6f Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Fri, 27 Aug 2010 14:50:05 -0500 Subject: First phase of restructuring these tests, now we can move on to testing. --- tests/test-glib-events-client.c | 46 ++------------------------ tests/test-glib-events-server.c | 71 +++++++++++++++++++---------------------- 2 files changed, 35 insertions(+), 82 deletions(-) (limited to 'tests/test-glib-events-server.c') diff --git a/tests/test-glib-events-client.c b/tests/test-glib-events-client.c index 57762cd..9b05ca6 100644 --- a/tests/test-glib-events-client.c +++ b/tests/test-glib-events-client.c @@ -26,35 +26,9 @@ with this program. If not, see . #include "test-glib-submenu.h" -static guint layouton = 0; static GMainLoop * mainloop = NULL; static gboolean passed = TRUE; -static void -realization (DbusmenuMenuitem * mi) -{ - const gchar * value; - gboolean original = passed; - - value = dbusmenu_menuitem_property_get(mi, DBUSMENU_MENUITEM_PROP_CHILD_DISPLAY); - - if (layouton % 2 == 0) { - if (value == NULL) { - passed = FALSE; - } - } else { - if (value != NULL) { - passed = FALSE; - } - } - - if (original != passed) { - g_debug("Oops, this is where we failed"); - } - - return; -} - static void layout_updated (DbusmenuClient * client, gpointer data) { @@ -66,21 +40,7 @@ layout_updated (DbusmenuClient * client, gpointer data) return; } - GList * children = dbusmenu_menuitem_get_children(menuroot); - if (children == NULL) { - g_debug("No Children on root -- fail"); - passed = FALSE; - } else { - for (; children != NULL; children = g_list_next(children)) { - g_signal_connect(G_OBJECT(children->data), DBUSMENU_MENUITEM_SIGNAL_REALIZED, G_CALLBACK(realization), NULL); - } - } - - layouton++; - - if (layouts[layouton].id == -1) { - g_main_loop_quit(mainloop); - } + dbusmenu_menuitem_handle_event(menuroot, "clicked", NULL, 0); return; } @@ -88,7 +48,7 @@ layout_updated (DbusmenuClient * client, gpointer data) static gboolean timer_func (gpointer data) { - g_debug("Death timer. Oops. Got to: %d", layouton); + g_debug("Death timer. Oops."); passed = FALSE; g_main_loop_quit(mainloop); return FALSE; @@ -102,7 +62,7 @@ main (int argc, char ** argv) DbusmenuClient * client = dbusmenu_client_new("org.dbusmenu.test", "/org/test"); g_signal_connect(G_OBJECT(client), DBUSMENU_CLIENT_SIGNAL_LAYOUT_UPDATED, G_CALLBACK(layout_updated), NULL); - g_timeout_add_seconds(10, timer_func, client); + g_timeout_add_seconds(5, timer_func, client); mainloop = g_main_loop_new(NULL, FALSE); g_main_loop_run(mainloop); diff --git a/tests/test-glib-events-server.c b/tests/test-glib-events-server.c index 68f7004..db4f5c5 100644 --- a/tests/test-glib-events-server.c +++ b/tests/test-glib-events-server.c @@ -29,47 +29,24 @@ with this program. If not, see . #include #include -#include "test-glib-submenu.h" - - -static DbusmenuMenuitem * -layout2menuitem (layout_t * layout) -{ - if (layout == NULL || layout->id == 0) return NULL; - - DbusmenuMenuitem * local = dbusmenu_menuitem_new_with_id(layout->id); - - if (layout->submenu != NULL) { - guint count; - for (count = 0; layout->submenu[count].id != -1; count++) { - DbusmenuMenuitem * child = layout2menuitem(&layout->submenu[count]); - if (child != NULL) { - dbusmenu_menuitem_child_append(local, child); - } - } - } - - /* g_debug("Layout to menu return: 0x%X", (unsigned int)local); */ - return local; -} - -static guint layouton = 0; static DbusmenuServer * server = NULL; static GMainLoop * mainloop = NULL; +static gboolean passed = TRUE; + +static void +handle_event (void) { + g_debug("Handle event"); + g_main_loop_quit(mainloop); + return; +} static gboolean timer_func (gpointer data) { - if (layouts[layouton].id == -1) { - g_main_loop_quit(mainloop); - return FALSE; - } - g_debug("Updating to Layout %d", layouton); - - dbusmenu_server_set_root(server, layout2menuitem(&layouts[layouton])); - layouton++; - - return TRUE; + passed = FALSE; + g_debug("Never got a signal"); + g_main_loop_quit(mainloop); + return FALSE; } int @@ -96,14 +73,30 @@ main (int argc, char ** argv) } server = dbusmenu_server_new("/org/test"); + DbusmenuMenuitem * menuitem = dbusmenu_menuitem_new(); + dbusmenu_server_set_root(server, menuitem); - timer_func(NULL); - g_timeout_add(2500, timer_func, NULL); + g_signal_connect(G_OBJECT(menuitem), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(handle_event), NULL); + + g_timeout_add_seconds(3, timer_func, NULL); mainloop = g_main_loop_new(NULL, FALSE); g_main_loop_run(mainloop); - g_debug("Quiting"); + if (passed) { + int i; - return 0; + for (i = 0; i < 10; i++) { + g_debug("Ignoring signals: %d", i); + g_usleep(100 * 1000); + } + } + + if (passed) { + g_debug("Test Passed"); + return 0; + } else { + g_debug("Test Failed"); + return 1; + } } -- cgit v1.2.3 From 6b16918eb4343bbe1c3be8c2806020c8e6c40284 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Fri, 27 Aug 2010 15:29:49 -0500 Subject: Fleshing out the test to get all happy --- tests/test-glib-events-client.c | 32 ++++++++++++++++++++++++++++++++ tests/test-glib-events-server.c | 4 ++-- 2 files changed, 34 insertions(+), 2 deletions(-) (limited to 'tests/test-glib-events-server.c') diff --git a/tests/test-glib-events-client.c b/tests/test-glib-events-client.c index 9b05ca6..688529c 100644 --- a/tests/test-glib-events-client.c +++ b/tests/test-glib-events-client.c @@ -28,6 +28,37 @@ with this program. If not, see . static GMainLoop * mainloop = NULL; static gboolean passed = TRUE; +static gboolean first = TRUE; + +static void +event_status (DbusmenuClient * client, DbusmenuMenuitem * item, gchar * name, GValue * data, guint timestamp, GError * error, gpointer user_data) +{ + g_debug("Event status: %s", error == NULL ? "Sent" : "Error"); + + if (first && error != NULL) { + passed = FALSE; + g_debug("First signal back failed."); + g_main_loop_quit(mainloop); + return; + } + + if (!first && error == NULL) { + passed = FALSE; + g_debug("Second signal didn't fail."); + g_main_loop_quit(mainloop); + return; + } + + if (!first && error != NULL) { + g_debug("Second signal failed: pass."); + g_main_loop_quit(mainloop); + return; + } + + first = FALSE; + dbusmenu_menuitem_handle_event(item, "clicked", NULL, 0); + return; +} static void layout_updated (DbusmenuClient * client, gpointer data) @@ -61,6 +92,7 @@ main (int argc, char ** argv) DbusmenuClient * client = dbusmenu_client_new("org.dbusmenu.test", "/org/test"); g_signal_connect(G_OBJECT(client), DBUSMENU_CLIENT_SIGNAL_LAYOUT_UPDATED, G_CALLBACK(layout_updated), NULL); + g_signal_connect(G_OBJECT(client), DBUSMENU_CLIENT_SIGNAL_EVENT_RESULT, G_CALLBACK(event_status), NULL); g_timeout_add_seconds(5, timer_func, client); diff --git a/tests/test-glib-events-server.c b/tests/test-glib-events-server.c index db4f5c5..0d1e0b1 100644 --- a/tests/test-glib-events-server.c +++ b/tests/test-glib-events-server.c @@ -86,9 +86,9 @@ main (int argc, char ** argv) if (passed) { int i; - for (i = 0; i < 10; i++) { + for (i = 0; i < 5; i++) { g_debug("Ignoring signals: %d", i); - g_usleep(100 * 1000); + g_usleep(1000 * 1000); } } -- cgit v1.2.3