← Back to team overview

ayatana-commits team mailing list archive

[Merge] lp:~bratsche/dbusmenu/test-fixification into lp:dbusmenu

 

Cody Russell has proposed merging lp:~bratsche/dbusmenu/test-fixification into lp:dbusmenu.

Requested reviews:
  DBus Menu Team (dbusmenu-team)

-- 
https://code.launchpad.net/~bratsche/dbusmenu/test-fixification/+merge/30702
Your team ayatana-commits is subscribed to branch lp:dbusmenu.
=== modified file 'libdbusmenu-gtk/client.c'
--- libdbusmenu-gtk/client.c	2010-07-02 15:35:23 +0000
+++ libdbusmenu-gtk/client.c	2010-07-22 19:09:03 +0000
@@ -491,7 +491,7 @@
 
 	/* Oh, we're a child, let's deal with that */
 	if (parent != NULL) {
-		new_child(parent, item, dbusmenu_menuitem_get_position_realized(item, parent), DBUSMENU_GTKCLIENT(client));
+		new_child(parent, item, dbusmenu_menuitem_get_position(item, parent), DBUSMENU_GTKCLIENT(client));
 	}
 
 	return;
@@ -519,7 +519,7 @@
 	} 
 
 	GtkMenuItem * childmi  = dbusmenu_gtkclient_menuitem_get(gtkclient, child);
-	gtk_menu_shell_insert(GTK_MENU_SHELL(menu), GTK_WIDGET(childmi), dbusmenu_menuitem_get_position_realized(child, mi));
+	gtk_menu_shell_insert(GTK_MENU_SHELL(menu), GTK_WIDGET(childmi), position);
 	gtk_widget_show(GTK_WIDGET(menu));
 	
 	return;

=== modified file 'tests/Makefile.am'
--- tests/Makefile.am	2010-06-29 04:22:58 +0000
+++ tests/Makefile.am	2010-07-22 19:09:03 +0000
@@ -10,11 +10,11 @@
 	test-glib-proxy \
 	test-glib-simple-items \
 	test-glib-submenu \
-	test-json \
 	test-gtk-objects-test \
 	test-gtk-label \
 	test-gtk-shortcut \
-	test-gtk-reorder
+	test-gtk-reorder \
+	test-gtk-submenu
 
 check_PROGRAMS = \
 	glib-server-nomenu \
@@ -36,7 +36,9 @@
 	test-glib-simple-items \
 	test-gtk-reorder-server \
 	test-json-client \
-	test-json-server
+	test-json-server \
+	test-gtk-submenu-server \
+	test-gtk-submenu-client
 
 XVFB_RUN=". $(srcdir)/run-xvfb.sh"
 
@@ -454,6 +456,46 @@
 	$(DBUSMENUTESTS_LIBS)
 
 #########################
+# Test GTK Submenu
+#########################
+
+test-gtk-submenu: test-gtk-submenu-client test-gtk-submenu-server Makefile.am
+	@echo "#!/bin/bash" > $@
+	@echo $(XVFB_RUN) >> $@
+	@echo $(DBUS_RUNNER) --task ./test-gtk-submenu-client --task-name Client --task ./test-gtk-submenu-server --task-name Server --ignore-return >> $@
+	@chmod +x $@
+
+test_gtk_submenu_server_SOURCES = \
+	test-gtk-submenu-server.c
+
+test_gtk_submenu_server_CFLAGS = \
+	-I $(srcdir)/.. \
+	$(DBUSMENUGTK_CFLAGS) \
+	$(DBUSMENUTESTS_CFLAGS) \
+	$(DBUSMENUGLIB_CFLAGS) -Wall -Werror
+
+test_gtk_submenu_server_LDADD = \
+	../libdbusmenu-glib/libdbusmenu-glib.la \
+	../libdbusmenu-gtk/libdbusmenu-gtk.la \
+	$(DBUSMENUGTK_LIBS) \
+	$(DBUSMENUTESTS_LIBS)
+
+test_gtk_submenu_client_SOURCES = \
+	test-gtk-submenu-client.c
+
+test_gtk_submenu_client_CFLAGS = \
+	-I $(srcdir)/.. \
+	$(DBUSMENUGTK_CFLAGS) \
+	$(DBUSMENUTESTS_CFLAGS) \
+	$(DBUSMENUGLIB_CFLAGS) -Wall -Werror
+
+test_gtk_submenu_client_LDADD = \
+	../libdbusmenu-glib/libdbusmenu-glib.la \
+	../libdbusmenu-gtk/libdbusmenu-gtk.la \
+	$(DBUSMENUGTK_LIBS) \
+	$(DBUSMENUTESTS_LIBS)
+
+#########################
 # Test Mago
 #########################
 

=== added file 'tests/test-gtk-submenu-client.c'
--- tests/test-gtk-submenu-client.c	1970-01-01 00:00:00 +0000
+++ tests/test-gtk-submenu-client.c	2010-07-22 19:09:03 +0000
@@ -0,0 +1,143 @@
+/*
+A test for libdbusmenu to ensure its quality.
+
+Copyright 2009 Canonical Ltd.
+
+Authors:
+    Ted Gould <ted@xxxxxxxxxxxxx>
+
+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 <http://www.gnu.org/licenses/>.
+*/
+
+#include <gtk/gtk.h>
+#include <libdbusmenu-gtk/menu.h>
+
+static GMainLoop * mainloop = NULL;
+static gboolean passed = TRUE;
+
+static gboolean check_menu_content(GtkMenu * menu, char ** content)
+{
+	GList * child = gtk_container_get_children(GTK_CONTAINER(menu));
+	char ** expected = content;
+	for (; child != NULL; child = g_list_next(child), ++expected) {
+		if (*expected == NULL) {
+			g_warning("Too many gtk items");
+			return FALSE;
+		}
+		const char * label = gtk_menu_item_get_label(GTK_MENU_ITEM(child->data));
+		if (g_strcmp0(label, *expected) != 0) {
+			g_warning("Expected '%s', got '%s'", *expected, label);
+			return FALSE;
+		}
+	}
+	if (*expected != NULL) {
+		g_warning("Not enough gtk items");
+		return FALSE;
+	}
+	return TRUE;
+}
+
+static void
+abort_test(const char * message)
+{
+	if (message) {
+		g_warning("%s", message);
+	}
+	passed = FALSE;
+	g_main_loop_quit(mainloop);
+}
+
+static gboolean
+timer_func (gpointer data)
+{
+	static char * root_content[] = { "Folder 1", "Folder 2", NULL };
+	static char * folder1_content[] = { "1.1", "1.2", "1.3", NULL };
+	static char * folder2_content[] = { "2.1", "2.2", "2.3", NULL };
+
+	GtkMenuItem * root_item = GTK_MENU_ITEM(data);
+	GtkMenu * menu = GTK_MENU(gtk_menu_item_get_submenu(root_item));
+
+	/* Root */
+	if (!check_menu_content(menu, root_content)) {
+		abort_test("Checking root content failed");
+		return FALSE;
+	}
+
+	/* Folder 1 */
+	GList * child = gtk_container_get_children(GTK_CONTAINER(menu));
+	GtkMenuItem * item = GTK_MENU_ITEM(child->data);
+	GtkMenu * folder_menu = GTK_MENU(gtk_menu_item_get_submenu(item));
+	if (!folder_menu) {
+		abort_test("Folder 1 has no menu");
+		return FALSE;
+	}
+
+	if (!check_menu_content(folder_menu, folder1_content)) {
+		abort_test("Checking folder1 content failed");
+		return FALSE;
+	}
+
+	/* Folder 2 */
+	child = g_list_next(child);
+	item = GTK_MENU_ITEM(child->data);
+	folder_menu = GTK_MENU(gtk_menu_item_get_submenu(item));
+	if (!folder_menu) {
+		abort_test("Folder 2 has no menu");
+		return FALSE;
+	}
+
+	if (!check_menu_content(folder_menu, folder2_content)) {
+		abort_test("Checking folder2 content failed");
+		return FALSE;
+	}
+
+	passed = TRUE;
+	g_main_loop_quit(mainloop);
+	return FALSE;
+}
+
+int
+main (int argc, char ** argv)
+{
+	gtk_init(&argc, &argv);
+
+	g_debug("Client Initialized.  Waiting.");
+	/* Make sure the server starts up and all that */
+	g_usleep(500000);
+
+	g_debug("Building Window");
+	GtkWidget * window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+	GtkWidget * menubar = gtk_menu_bar_new();
+	GtkWidget * menuitem = gtk_menu_item_new_with_label("Test");
+	gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), GTK_WIDGET(dbusmenu_gtkmenu_new ("glib.label.test", "/org/test")));
+	gtk_widget_show(menuitem);
+	gtk_menu_bar_append(menubar, menuitem);
+	gtk_widget_show(menubar);
+	gtk_container_add(GTK_CONTAINER(window), menubar);
+	gtk_window_set_title(GTK_WINDOW(window), "libdbusmenu-gtk test");
+	gtk_widget_show(window);
+
+	g_timeout_add_seconds(1, timer_func, menuitem);
+
+	g_debug("Entering Mainloop");
+	mainloop = g_main_loop_new(NULL, FALSE);
+	g_main_loop_run(mainloop);
+
+	if (passed) {
+		g_debug("Quiting");
+		return 0;
+	} else {
+		g_debug("Quiting as we're a failure");
+		return 1;
+	}
+}

=== added file 'tests/test-gtk-submenu-server.c'
--- tests/test-gtk-submenu-server.c	1970-01-01 00:00:00 +0000
+++ tests/test-gtk-submenu-server.c	2010-07-22 19:09:03 +0000
@@ -0,0 +1,98 @@
+/*
+A test for libdbusmenu to ensure its quality.
+
+Copyright 2009 Canonical Ltd.
+
+Authors:
+    Ted Gould <ted@xxxxxxxxxxxxx>
+
+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 <http://www.gnu.org/licenses/>.
+*/
+
+#include <glib.h>
+
+#include <dbus/dbus.h>
+#include <dbus/dbus-glib.h>
+#include <dbus/dbus-glib-lowlevel.h>
+#include <dbus/dbus-glib-bindings.h>
+
+#include <libdbusmenu-glib/menuitem.h>
+#include <libdbusmenu-glib/server.h>
+
+static GMainLoop *mainloop = NULL;
+
+static gboolean
+timer_func (gpointer data)
+{
+  g_main_loop_quit (mainloop);
+
+  return FALSE;
+}
+
+DbusmenuMenuitem *
+add_item(DbusmenuMenuitem * parent, const char * label)
+{
+	DbusmenuMenuitem * item = dbusmenu_menuitem_new();
+	dbusmenu_menuitem_property_set(item, "label", label);
+	dbusmenu_menuitem_child_append(parent, item);
+	return item;
+}
+
+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, "glib.label.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;
+	}
+
+	DbusmenuServer * server = dbusmenu_server_new("/org/test");
+	DbusmenuMenuitem * root = dbusmenu_menuitem_new();
+	dbusmenu_server_set_root(server, root);
+
+	DbusmenuMenuitem * item;
+	item = add_item(root, "Folder 1");
+	add_item(item, "1.1");
+	add_item(item, "1.2");
+	add_item(item, "1.3");
+
+	item = add_item(root, "Folder 2");
+	add_item(item, "2.1");
+	add_item(item, "2.2");
+	add_item(item, "2.3");
+
+        g_timeout_add_seconds(3, timer_func, NULL);
+
+	mainloop = g_main_loop_new(NULL, FALSE);
+	g_main_loop_run(mainloop);
+
+	g_debug("Quiting");
+
+	return 0;
+}
+


Follow ups