aboutsummaryrefslogtreecommitdiff
path: root/tests/test-gtk-label-server.c
diff options
context:
space:
mode:
authorTed Gould <ted@canonical.com>2009-06-17 14:26:13 -0500
committerTed Gould <ted@canonical.com>2009-06-17 14:26:13 -0500
commit649793765154a37d717d833d305e4a9671c996f9 (patch)
tree390cb9c3e6cf077506371d2626118729d033ef2e /tests/test-gtk-label-server.c
parent23b418faf95a4e8fef6c98726309292325b5919c (diff)
downloadlibdbusmenu-649793765154a37d717d833d305e4a9671c996f9.tar.gz
libdbusmenu-649793765154a37d717d833d305e4a9671c996f9.tar.bz2
libdbusmenu-649793765154a37d717d833d305e4a9671c996f9.zip
Switching from a header file to building the layout using a json definition.
Diffstat (limited to 'tests/test-gtk-label-server.c')
-rw-r--r--tests/test-gtk-label-server.c70
1 files changed, 54 insertions, 16 deletions
diff --git a/tests/test-gtk-label-server.c b/tests/test-gtk-label-server.c
index 4e2fe0a..349d7d1 100644
--- a/tests/test-gtk-label-server.c
+++ b/tests/test-gtk-label-server.c
@@ -8,33 +8,55 @@
#include <libdbusmenu-glib/menuitem.h>
#include <libdbusmenu-glib/server.h>
-#include "test-gtk-label.h"
+#include <json-glib/json-glib.h>
static void
-set_props (DbusmenuMenuitem * mi, gchar ** props)
+set_props (DbusmenuMenuitem * mi, JsonObject * node)
{
- if (props == NULL) return;
+ if (node == NULL) return;
- guint i;
- for (i = 0; props[i] != NULL; i += 2) {
- dbusmenu_menuitem_property_set(mi, props[i], props[i+1]);
+ GList * members = NULL;
+ for (members = json_object_get_members(node); members != NULL; members = g_list_next(members)) {
+ const gchar * member = members->data;
+
+ if (!g_strcmp0(member, "id")) { continue; }
+ if (!g_strcmp0(member, "submenu")) { continue; }
+
+ JsonNode * lnode = json_object_get_member(node, member);
+ if (JSON_NODE_TYPE(lnode) != JSON_NODE_VALUE) { continue; }
+
+ dbusmenu_menuitem_property_set(mi, member, json_node_get_string(lnode));
}
return;
}
static DbusmenuMenuitem *
-layout2menuitem (proplayout_t * layout)
+layout2menuitem (JsonNode * inlayout)
{
- if (layout == NULL || layout->id == 0) return NULL;
+ if (inlayout == NULL) return NULL;
+ if (JSON_NODE_TYPE(inlayout) != JSON_NODE_OBJECT) return NULL;
+
+ JsonObject * layout = json_node_get_object(inlayout);
+
+ DbusmenuMenuitem * local = NULL;
+ if (json_object_has_member(layout, "id")) {
+ JsonNode * node = json_object_get_member(layout, "id");
+ g_return_val_if_fail(JSON_NODE_TYPE(node) == JSON_NODE_VALUE, NULL);
+ local = dbusmenu_menuitem_new_with_id(json_node_get_int(node));
+ } else {
+ local = dbusmenu_menuitem_new();
+ }
- DbusmenuMenuitem * local = dbusmenu_menuitem_new_with_id(layout->id);
- set_props(local, layout->properties);
+ set_props(local, layout);
- if (layout->submenu != NULL) {
+ if (json_object_has_member(layout, "submenu")) {
+ JsonNode * node = json_object_get_member(layout, "submenu");
+ g_return_val_if_fail(JSON_NODE_TYPE(node) == JSON_NODE_ARRAY, local);
+ JsonArray * array = json_node_get_array(node);
guint count;
- for (count = 0; layout->submenu[count].id != 0; count++) {
- DbusmenuMenuitem * child = layout2menuitem(&layout->submenu[count]);
+ for (count = 0; count < json_array_get_length(array); count++) {
+ DbusmenuMenuitem * child = layout2menuitem(json_array_get_element(array, count));
if (child != NULL) {
dbusmenu_menuitem_child_append(local, child);
}
@@ -45,6 +67,7 @@ layout2menuitem (proplayout_t * layout)
return local;
}
+static JsonArray * root_array = NULL;
static guint layouton = 0;
static DbusmenuServer * server = NULL;
static GMainLoop * mainloop = NULL;
@@ -52,13 +75,14 @@ static GMainLoop * mainloop = NULL;
static gboolean
timer_func (gpointer data)
{
- if (layouts[layouton].id == 0) {
+ if (layouton == json_array_get_length(root_array)) {
+ g_debug("Completed %d layouts", layouton);
g_main_loop_quit(mainloop);
return FALSE;
}
g_debug("Updating to Layout %d", layouton);
- dbusmenu_server_set_root(server, layout2menuitem(&layouts[layouton]));
+ dbusmenu_server_set_root(server, layout2menuitem(json_array_get_element(root_array, layouton)));
layouton++;
return TRUE;
@@ -69,11 +93,25 @@ main (int argc, char ** argv)
{
g_type_init();
+ JsonParser * parser = json_parser_new();
+ GError * error = NULL;
+ if (!json_parser_load_from_file(parser, argv[1], &error)) {
+ g_debug("Failed parsing file %s because: %s", argv[1], error->message);
+ return 1;
+ }
+ JsonNode * root_node = json_parser_get_root(parser);
+ if (JSON_NODE_TYPE(root_node) != JSON_NODE_ARRAY) {
+ g_debug("Root node is not an array, fail. It's an: %s", json_node_type_name(root_node));
+ return 1;
+ }
+
+ root_array = json_node_get_array(root_node);
+ g_debug("%d layouts in test description '%s'", json_array_get_length(root_array), argv[1]);
+
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);
- GError * error = NULL;
guint nameret = 0;
if (!org_freedesktop_DBus_request_name(bus_proxy, "glib.label.test", 0, &nameret, &error)) {