Blame tests/toplevel-order.c

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
}