tests: Fix bad node ordering assumption

The tests were making assumptions about the order of the returned D-Bus
introspection nodes. However, these are semantically unordered and
changes to e.g. GHashTable would break the tests.

Fix this by applying a sort prior to validation.
This commit is contained in:
Hans Petter Jansson 2018-09-05 18:04:37 +02:00
parent eed0f182fd
commit 0600dd3220

View File

@ -337,6 +337,22 @@ introspect_callback (GDBusProxy *proxy,
g_main_loop_quit (loop);
}
static gint
compare_strings (gconstpointer a,
gconstpointer b)
{
const gchar *sa = *(const gchar **) a;
const gchar *sb = *(const gchar **) b;
/* Array terminator must sort last */
if (sa == NULL)
return 1;
if (sb == NULL)
return -1;
return strcmp (sa, sb);
}
static gchar **
get_nodes_at (GDBusConnection *c,
const gchar *object_path)
@ -390,6 +406,9 @@ get_nodes_at (GDBusConnection *c,
g_free (xml_data);
g_dbus_node_info_unref (node_info);
/* Nodes are semantically unordered; sort array so tests can rely on order */
g_ptr_array_sort (p, compare_strings);
return (gchar **) g_ptr_array_free (p, FALSE);
}
@ -1240,9 +1259,9 @@ test_object_registration (void)
nodes = get_nodes_at (c, "/foo/dyna");
g_assert (nodes != NULL);
g_assert_cmpint (g_strv_length (nodes), ==, 3);
g_assert_cmpstr (nodes[0], ==, "lol");
g_assert_cmpstr (nodes[1], ==, "cat");
g_assert_cmpstr (nodes[2], ==, "cheezburger");
g_assert_cmpstr (nodes[0], ==, "cat");
g_assert_cmpstr (nodes[1], ==, "cheezburger");
g_assert_cmpstr (nodes[2], ==, "lol");
g_strfreev (nodes);
g_assert_cmpint (count_interfaces (c, "/foo/dyna/lol"), ==, 4);
g_assert_cmpint (count_interfaces (c, "/foo/dyna/cat"), ==, 4);
@ -1253,10 +1272,10 @@ test_object_registration (void)
nodes = get_nodes_at (c, "/foo/dyna");
g_assert (nodes != NULL);
g_assert_cmpint (g_strv_length (nodes), ==, 4);
g_assert_cmpstr (nodes[0], ==, "lol");
g_assert_cmpstr (nodes[1], ==, "cat");
g_assert_cmpstr (nodes[2], ==, "cheezburger");
g_assert_cmpstr (nodes[3], ==, "dynamicallycreated");
g_assert_cmpstr (nodes[0], ==, "cat");
g_assert_cmpstr (nodes[1], ==, "cheezburger");
g_assert_cmpstr (nodes[2], ==, "dynamicallycreated");
g_assert_cmpstr (nodes[3], ==, "lol");
g_strfreev (nodes);
g_assert_cmpint (count_interfaces (c, "/foo/dyna/dynamicallycreated"), ==, 4);