diff options
author | Ted Gould <ted@canonical.com> | 2009-06-18 22:35:48 -0500 |
---|---|---|
committer | Ted Gould <ted@canonical.com> | 2009-06-18 22:35:48 -0500 |
commit | 31d98b4d59d61ba5f22554e00a3152829f488617 (patch) | |
tree | 7ce7e26e636322f417cb82954267f8dbe52ed627 /tests/test-gtk-label-server.c | |
parent | 8c20e20e5a4863e53b39503f443c5a733169e55c (diff) | |
parent | 9293879744bb732b416c6c57f38808381c282759 (diff) | |
download | libdbusmenu-31d98b4d59d61ba5f22554e00a3152829f488617.tar.gz libdbusmenu-31d98b4d59d61ba5f22554e00a3152829f488617.tar.bz2 libdbusmenu-31d98b4d59d61ba5f22554e00a3152829f488617.zip |
Dbus death branch.
Diffstat (limited to 'tests/test-gtk-label-server.c')
-rw-r--r-- | tests/test-gtk-label-server.c | 72 |
1 files changed, 55 insertions, 17 deletions
diff --git a/tests/test-gtk-label-server.c b/tests/test-gtk-label-server.c index 4e2fe0a..a7534f2 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)) { @@ -89,7 +127,7 @@ main (int argc, char ** argv) server = dbusmenu_server_new("/org/test"); timer_func(NULL); - g_timeout_add(2500, timer_func, NULL); + g_timeout_add_seconds(15, timer_func, NULL); mainloop = g_main_loop_new(NULL, FALSE); g_main_loop_run(mainloop); |