[glib: 8/9] tests: Fix bad node ordering assumption



commit 0600dd322022fea5f87276b61972bfe32cee9a77
Author: Hans Petter Jansson <hpj cl no>
Date:   Wed Sep 5 18:04:37 2018 +0200

    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.

 gio/tests/gdbus-export.c | 33 ++++++++++++++++++++++++++-------
 1 file changed, 26 insertions(+), 7 deletions(-)
---
diff --git a/gio/tests/gdbus-export.c b/gio/tests/gdbus-export.c
index 4d6d3a43e..506c7458a 100644
--- a/gio/tests/gdbus-export.c
+++ b/gio/tests/gdbus-export.c
@@ -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);
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]