|
Packit |
1e8aac |
#include <glib.h>
|
|
Packit |
1e8aac |
#include <glib/gstdio.h>
|
|
Packit |
1e8aac |
#include <glib-object.h>
|
|
Packit |
1e8aac |
#include <stdarg.h>
|
|
Packit |
1e8aac |
#include <gladeui/glade-tsort.h>
|
|
Packit |
1e8aac |
#include <gladeui/glade-app.h>
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
typedef struct
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GList *nodes;
|
|
Packit |
1e8aac |
GList *edges;
|
|
Packit |
1e8aac |
gchar **orig_nodes;
|
|
Packit |
1e8aac |
} TsortData;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static void
|
|
Packit |
1e8aac |
tsort_data_free (gpointer udata)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
TsortData *data = udata;
|
|
Packit |
1e8aac |
g_list_free (data->nodes);
|
|
Packit |
1e8aac |
_node_edge_list_free (data->edges);
|
|
Packit |
1e8aac |
g_free (data);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static void
|
|
Packit |
1e8aac |
test_tsort_order (gconstpointer userdata)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
TsortData *data = (gpointer) userdata;
|
|
Packit |
1e8aac |
gchar **orig_nodes = data->orig_nodes;
|
|
Packit |
1e8aac |
GList *nodes, *l;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
nodes = _glade_tsort (&data->nodes, &data->edges);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
for (l = nodes; l && *orig_nodes; l = g_list_next (l), orig_nodes++)
|
|
Packit |
1e8aac |
g_assert_cmpstr (l->data, ==, *orig_nodes);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* make sure all items where tested */
|
|
Packit |
1e8aac |
g_assert (l == NULL && *orig_nodes == NULL);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
g_list_free (nodes);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static void
|
|
Packit |
1e8aac |
add_tsort_test_real (const gchar *path, gchar *nodes[], gchar *edges[][2])
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
TsortData *data = g_new0(TsortData, 1);
|
|
Packit |
1e8aac |
gint i;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* insert sorted alphabetically */
|
|
Packit |
1e8aac |
for (i = 0; nodes[i]; i++)
|
|
Packit |
1e8aac |
data->nodes = g_list_insert_sorted (data->nodes, nodes[i], (GCompareFunc)g_strcmp0);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
for (i = 0; edges[i][0]; i++)
|
|
Packit |
1e8aac |
data->edges = _node_edge_prepend (data->edges, edges[i][0], edges[i][1]);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
data->orig_nodes = nodes;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
g_test_add_data_func_full (path, data, test_tsort_order, tsort_data_free);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
#define add_tsort_test(nodes, edges) add_tsort_test_real ("/Tsort/"#nodes, nodes, edges)
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static void
|
|
Packit |
1e8aac |
test_toplevel_order (gconstpointer userdata)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
gchar **data = (gpointer) userdata;
|
|
Packit |
1e8aac |
gchar *project_path = *data;
|
|
Packit |
1e8aac |
gchar **names = &data[1];
|
|
Packit |
1e8aac |
GladeProject *project;
|
|
Packit |
1e8aac |
GList *toplevels, *l;
|
|
Packit |
1e8aac |
gchar *temp_path;
|
|
Packit |
1e8aac |
const gchar *xml_data;
|
|
Packit |
1e8aac |
gsize xml_size;
|
|
Packit |
1e8aac |
GBytes *xml;
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
g_assert (g_close (g_file_open_tmp ("glade-toplevel-order-XXXXXX.glade", &temp_path, NULL), NULL));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* Dump contents to a temp file */
|
|
Packit |
1e8aac |
g_assert ((xml = g_resources_lookup_data (project_path, 0, NULL)));
|
|
Packit |
1e8aac |
xml_data = g_bytes_get_data (xml, &xml_size);
|
|
Packit |
1e8aac |
g_assert (g_file_set_contents (temp_path, xml_data, xml_size, NULL));
|
|
Packit |
1e8aac |
g_bytes_unref (xml);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* Load project */
|
|
Packit |
1e8aac |
g_assert ((project = glade_project_load (temp_path)));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* And save it, order should be the same */
|
|
Packit |
1e8aac |
g_assert (glade_project_save (project, temp_path, NULL));
|
|
Packit |
1e8aac |
g_object_unref (project);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* Reload saved project */
|
|
Packit |
1e8aac |
g_assert ((project = glade_project_load (temp_path)));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
g_unlink (temp_path);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* And get toplevels to check order */
|
|
Packit |
1e8aac |
g_assert ((toplevels = glade_project_toplevels (project)));
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
for (l = toplevels; l && names; l = g_list_next (l), names++)
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
GladeWidget *toplevel;
|
|
Packit |
1e8aac |
g_assert ((toplevel = glade_widget_get_from_gobject (l->data)));
|
|
Packit |
1e8aac |
g_assert_cmpstr (glade_widget_get_name (toplevel), ==, *names);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* make sure all items where tested */
|
|
Packit |
1e8aac |
g_assert (!l && !*names);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
g_list_free (toplevels);
|
|
Packit |
1e8aac |
g_object_unref (project);
|
|
Packit |
1e8aac |
g_free (temp_path);
|
|
Packit |
1e8aac |
}
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
#define add_project_test(data) g_test_add_data_func_full ("/ToplevelOrder/"#data, data, test_toplevel_order, NULL);
|
|
Packit |
1e8aac |
#define RESOURCE_PATH "/org/gnome/glade/tests/toplevel-order"
|
|
Packit |
1e8aac |
/* _glade_tsort() test cases */
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* the array must be properly ordered, since it will be used to test order */
|
|
Packit |
1e8aac |
static gchar *tsort_test[] = {"bbb", "ccc", "aaa", NULL };
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static gchar *tsort_test_edges[][2] = { {"ccc","aaa"}, { NULL, NULL} };
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* GladeProject toplevel order test */
|
|
Packit |
1e8aac |
static gchar *order_test[] = {RESOURCE_PATH"/toplevel_order_test.glade",
|
|
Packit |
1e8aac |
"bbb", "ccc", "aaa", NULL};
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static gchar *order_test2[] = {RESOURCE_PATH"/toplevel_order_test2.glade",
|
|
Packit |
1e8aac |
"aa", "bbb", "ccc", "aaa", "ddd", NULL };
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
static gchar *order_test3[] = {RESOURCE_PATH"/toplevel_order_test3.glade",
|
|
Packit |
1e8aac |
"aaa", "ccc", "bbb", NULL };
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* toplevels with circular dependencies get ordered alphabetically at the end */
|
|
Packit |
1e8aac |
static gchar *order_test4[] = {RESOURCE_PATH"/toplevel_order_test4.glade",
|
|
Packit |
1e8aac |
"aa", "bbb", "cc", "ddd", "aaa", "ccc", NULL };
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* children dependency */
|
|
Packit |
1e8aac |
static gchar *order_test5[] = {RESOURCE_PATH"/toplevel_order_test5.glade",
|
|
Packit |
1e8aac |
"xaction", "awindow", NULL };
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
/* Commonly used widgets with dependencies */
|
|
Packit |
1e8aac |
static gchar *order_test6[] = {RESOURCE_PATH"/toplevel_order_test6.glade",
|
|
Packit |
1e8aac |
"ziconfactory", "label_a", "label_b", "asizegroup", "label_c", "xaction",
|
|
Packit |
1e8aac |
"xactiongroup", "anotherwindow", "xentrybuffer", "xliststore", "treeview",
|
|
Packit |
1e8aac |
"zaccelgroup", "awindow", NULL };
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
int
|
|
Packit |
1e8aac |
main (int argc, char *argv[])
|
|
Packit |
1e8aac |
{
|
|
Packit |
1e8aac |
gtk_test_init (&argc, &argv, NULL);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
glade_init ();
|
|
Packit |
1e8aac |
glade_app_get ();
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
add_tsort_test (tsort_test, tsort_test_edges);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
add_project_test (order_test);
|
|
Packit |
1e8aac |
add_project_test (order_test2);
|
|
Packit |
1e8aac |
add_project_test (order_test3);
|
|
Packit |
1e8aac |
add_project_test (order_test4);
|
|
Packit |
1e8aac |
add_project_test (order_test5);
|
|
Packit |
1e8aac |
add_project_test (order_test6);
|
|
Packit |
1e8aac |
|
|
Packit |
1e8aac |
return g_test_run ();
|
|
Packit |
1e8aac |
}
|