From 54060d44446cea023842e2a70ea3aec4857272b7 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 9 Feb 2010 14:57:49 -0600 Subject: Initial proxy files, copying from the properties test. --- tests/test-glib-proxy-client.c | 177 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 177 insertions(+) create mode 100644 tests/test-glib-proxy-client.c (limited to 'tests/test-glib-proxy-client.c') diff --git a/tests/test-glib-proxy-client.c b/tests/test-glib-proxy-client.c new file mode 100644 index 0000000..434465a --- /dev/null +++ b/tests/test-glib-proxy-client.c @@ -0,0 +1,177 @@ +/* +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 "test-glib-properties.h" + +static guint layouton = 0; +static GMainLoop * mainloop = NULL; +static gboolean passed = TRUE; +static guint death_timer = 0; + +static gboolean +verify_props (DbusmenuMenuitem * mi, gchar ** properties) +{ + if (properties == NULL) { + return TRUE; + } + + /* Verify they're all there and correct */ + guint i; + for (i = 0; properties[i] != NULL; i += 2) { + const gchar * value = dbusmenu_menuitem_property_get(mi, properties[i]); + if (g_strcmp0(value, properties[i + 1])) { + g_debug("\tFailed as property '%s' should be '%s' and is '%s'", properties[i], properties[i+1], value); + return FALSE; + } + } + + /* Verify that we don't have any extras */ + // GList * props = dbusmenu_menuitem_properties_list(mi); + + return TRUE; +} + +static gboolean +verify_root_to_layout(DbusmenuMenuitem * mi, proplayout_t * layout) +{ + g_debug("Verifying ID: %d", layout->id); + + if (layout->id != dbusmenu_menuitem_get_id(mi)) { + if (!dbusmenu_menuitem_get_root(mi)) { + g_debug("\tFailed as ID %d is not equal to %d", layout->id, dbusmenu_menuitem_get_id(mi)); + return FALSE; + } + } + + if (!verify_props(mi, layout->properties)) { + g_debug("\tFailed as unable to verify properties."); + return FALSE; + } + + GList * children = dbusmenu_menuitem_get_children(mi); + + if (children == NULL && layout->submenu == NULL) { + g_debug("\tPassed: %d", layout->id); + return TRUE; + } + if (children == NULL || layout->submenu == NULL) { + if (children == NULL) { + g_debug("\tFailed as there are no children but we have submenus"); + } else { + g_debug("\tFailed as we have children but no submenu"); + } + return FALSE; + } + + guint i = 0; + for (i = 0; children != NULL && layout->submenu[i].id != -1; children = g_list_next(children), i++) { + if (!verify_root_to_layout(DBUSMENU_MENUITEM(children->data), &layout->submenu[i])) { + return FALSE; + } + } + + if (children == NULL && layout->submenu[i].id == -1) { + g_debug("\tPassed: %d", layout->id); + return TRUE; + } + + if (children != NULL) { + g_debug("\tFailed as there are still children but no submenus. (ID: %d)", layout->id); + } else { + g_debug("\tFailed as there are still submenus but no children. (ID: %d)", layout->id); + } + return FALSE; +} + +static gboolean +timer_func (gpointer data) +{ + g_debug("Death timer. Oops. Got to: %d", layouton); + passed = FALSE; + g_main_loop_quit(mainloop); + return FALSE; +} + +static gboolean layout_verify_timer (gpointer data); + +static void +layout_updated (DbusmenuClient * client, gpointer data) +{ + g_debug("Layout Updated"); + g_timeout_add (250, layout_verify_timer, client); + return; +} + +static gboolean +layout_verify_timer (gpointer data) +{ + DbusmenuMenuitem * menuroot = dbusmenu_client_get_root(DBUSMENU_CLIENT(data)); + proplayout_t * layout = &layouts[layouton]; + + if (!verify_root_to_layout(menuroot, layout)) { + g_debug("FAILED LAYOUT: %d", layouton); + passed = FALSE; + } else { + /* Extend our death */ + g_source_remove(death_timer); + death_timer = g_timeout_add_seconds(10, timer_func, data); + } + + layouton++; + + if (layouts[layouton].id == -1) { + g_main_loop_quit(mainloop); + } + + return FALSE; +} + +int +main (int argc, char ** argv) +{ + g_type_init(); + + /* Make sure the server starts up and all that */ + g_usleep(500000); + + DbusmenuClient * client = dbusmenu_client_new(":1.0", "/org/test"); + g_signal_connect(G_OBJECT(client), DBUSMENU_CLIENT_SIGNAL_LAYOUT_UPDATED, G_CALLBACK(layout_updated), NULL); + + death_timer = g_timeout_add_seconds(10, timer_func, client); + + mainloop = g_main_loop_new(NULL, FALSE); + g_main_loop_run(mainloop); + + g_object_unref(G_OBJECT(client)); + + if (passed) { + g_debug("Quiting"); + return 0; + } else { + g_debug("Quiting as we're a failure"); + return 1; + } +} -- cgit v1.2.3 From f8f935ea451c7b102a6b83b72c90d73255dac139 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 9 Feb 2010 15:15:45 -0600 Subject: Setting this stuff up. Woot. --- tests/test-glib-proxy-client.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) (limited to 'tests/test-glib-proxy-client.c') diff --git a/tests/test-glib-proxy-client.c b/tests/test-glib-proxy-client.c index 434465a..7e3541a 100644 --- a/tests/test-glib-proxy-client.c +++ b/tests/test-glib-proxy-client.c @@ -154,10 +154,7 @@ main (int argc, char ** argv) { g_type_init(); - /* Make sure the server starts up and all that */ - g_usleep(500000); - - DbusmenuClient * client = dbusmenu_client_new(":1.0", "/org/test"); + DbusmenuClient * client = dbusmenu_client_new("test.proxy.first_proxy", "/org/test"); g_signal_connect(G_OBJECT(client), DBUSMENU_CLIENT_SIGNAL_LAYOUT_UPDATED, G_CALLBACK(layout_updated), NULL); death_timer = g_timeout_add_seconds(10, timer_func, client); -- cgit v1.2.3 From a52f4ea9d88394aca3992f4c9ca8093d7f07993f Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 9 Feb 2010 15:26:06 -0600 Subject: Fixing build --- tests/test-glib-proxy-client.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tests/test-glib-proxy-client.c') diff --git a/tests/test-glib-proxy-client.c b/tests/test-glib-proxy-client.c index 7e3541a..b1caaad 100644 --- a/tests/test-glib-proxy-client.c +++ b/tests/test-glib-proxy-client.c @@ -24,7 +24,7 @@ with this program. If not, see . #include #include -#include "test-glib-properties.h" +#include "test-glib-proxy.h" static guint layouton = 0; static GMainLoop * mainloop = NULL; -- cgit v1.2.3 From a151474f523c222f508f9164a2e33e29f048ab2e Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 10 Feb 2010 15:09:33 -0600 Subject: Can't verify IDs because the proxy scrambles them (and that's okay). --- tests/test-glib-proxy-client.c | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) (limited to 'tests/test-glib-proxy-client.c') diff --git a/tests/test-glib-proxy-client.c b/tests/test-glib-proxy-client.c index b1caaad..03b850d 100644 --- a/tests/test-glib-proxy-client.c +++ b/tests/test-glib-proxy-client.c @@ -59,13 +59,6 @@ verify_root_to_layout(DbusmenuMenuitem * mi, proplayout_t * layout) { g_debug("Verifying ID: %d", layout->id); - if (layout->id != dbusmenu_menuitem_get_id(mi)) { - if (!dbusmenu_menuitem_get_root(mi)) { - g_debug("\tFailed as ID %d is not equal to %d", layout->id, dbusmenu_menuitem_get_id(mi)); - return FALSE; - } - } - if (!verify_props(mi, layout->properties)) { g_debug("\tFailed as unable to verify properties."); return FALSE; @@ -121,7 +114,7 @@ static void layout_updated (DbusmenuClient * client, gpointer data) { g_debug("Layout Updated"); - g_timeout_add (250, layout_verify_timer, client); + g_timeout_add (500, layout_verify_timer, client); return; } -- cgit v1.2.3 From 865f4cb66f4d41b3ee15faf27bd4412c8356d7da Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 10 Feb 2010 17:11:07 -0600 Subject: Lengthening the time to make it through all the proxies. --- tests/test-glib-proxy-client.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tests/test-glib-proxy-client.c') diff --git a/tests/test-glib-proxy-client.c b/tests/test-glib-proxy-client.c index 03b850d..0e52aa4 100644 --- a/tests/test-glib-proxy-client.c +++ b/tests/test-glib-proxy-client.c @@ -114,7 +114,7 @@ static void layout_updated (DbusmenuClient * client, gpointer data) { g_debug("Layout Updated"); - g_timeout_add (500, layout_verify_timer, client); + g_timeout_add (1500, layout_verify_timer, client); return; } -- cgit v1.2.3 From 2016dbb8bcacf970d5a4636d922597164cd66704 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Fri, 12 Feb 2010 16:00:22 -0600 Subject: Only changing layouts when they're updated. --- tests/test-glib-proxy-client.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'tests/test-glib-proxy-client.c') diff --git a/tests/test-glib-proxy-client.c b/tests/test-glib-proxy-client.c index 0e52aa4..b37cd61 100644 --- a/tests/test-glib-proxy-client.c +++ b/tests/test-glib-proxy-client.c @@ -26,7 +26,7 @@ with this program. If not, see . #include "test-glib-proxy.h" -static guint layouton = 0; +static guint layouton = -1; static GMainLoop * mainloop = NULL; static gboolean passed = TRUE; static guint death_timer = 0; @@ -114,6 +114,7 @@ static void layout_updated (DbusmenuClient * client, gpointer data) { g_debug("Layout Updated"); + layouton++; g_timeout_add (1500, layout_verify_timer, client); return; } @@ -121,6 +122,7 @@ layout_updated (DbusmenuClient * client, gpointer data) static gboolean layout_verify_timer (gpointer data) { + g_debug("Verifing Layout: %d", layouton); DbusmenuMenuitem * menuroot = dbusmenu_client_get_root(DBUSMENU_CLIENT(data)); proplayout_t * layout = &layouts[layouton]; @@ -133,9 +135,7 @@ layout_verify_timer (gpointer data) death_timer = g_timeout_add_seconds(10, timer_func, data); } - layouton++; - - if (layouts[layouton].id == -1) { + if (layouts[layouton+1].id == -1) { g_main_loop_quit(mainloop); } -- cgit v1.2.3 From fa7cb0d330eff5c22def277b1382d1328ffc40c2 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Fri, 12 Feb 2010 21:43:28 -0600 Subject: Ignoring Layout changes when they don't relate to having one. --- tests/test-glib-proxy-client.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'tests/test-glib-proxy-client.c') diff --git a/tests/test-glib-proxy-client.c b/tests/test-glib-proxy-client.c index b37cd61..50ad5d3 100644 --- a/tests/test-glib-proxy-client.c +++ b/tests/test-glib-proxy-client.c @@ -114,6 +114,10 @@ static void layout_updated (DbusmenuClient * client, gpointer data) { g_debug("Layout Updated"); + if (dbusmenu_client_get_root(client) == NULL) { + g_debug("\tIgnored, no root"); + return; + } layouton++; g_timeout_add (1500, layout_verify_timer, client); return; -- cgit v1.2.3