From 0e53a295c4a511067afedafc034bac30236512ba Mon Sep 17 00:00:00 2001
From: Simon McVittie <smcv@collabora.com>
Date: Tue, 15 Sep 2020 17:00:51 +0100
Subject: [PATCH] tests: Parse and re-serialize expected JSON output

This avoids test failure when using json-glib 1.6.x, which pretty-prints
empty arrays and empty objects differently.

Signed-off-by: Simon McVittie <smcv@collabora.com>
---
 tests/system-info-cli.c | 22 ++++++++++++++++++----
 1 file changed, 18 insertions(+), 4 deletions(-)

diff --git a/tests/system-info-cli.c b/tests/system-info-cli.c
index ea6cfea7e..665afc798 100644
--- a/tests/system-info-cli.c
+++ b/tests/system-info-cli.c
@@ -715,15 +715,30 @@ json_parsing (Fixture *f,
       gchar *output_json;
       gchar *output = NULL;
       gchar *expectation = NULL;
+      gchar *generated = NULL;
       gchar **envp;
       GError *error = NULL;
       const gchar *argv[] = { "steam-runtime-system-info", NULL };
+      JsonParser *parser = NULL;
+      JsonNode *node = NULL;  /* not owned */
+      JsonGenerator *generator = NULL;
 
       g_test_message ("%s: input=%s output=%s", test->description, test->input_name, test->output_name);
 
       input_json = g_build_filename (f->srcdir, "json-report", test->input_name, NULL);
       output_json = g_build_filename (f->srcdir, "json-report", test->output_name, NULL);
 
+      parser = json_parser_new ();
+      json_parser_load_from_file (parser, output_json, &error);
+      g_assert_no_error (error);
+      node = json_parser_get_root (parser);
+      g_assert_nonnull (node);
+      generator = json_generator_new ();
+      json_generator_set_root (generator, node);
+      json_generator_set_pretty (generator, TRUE);
+      generated = json_generator_to_data (generator, NULL);
+      expectation = g_strconcat (generated, "\n", NULL);
+
       envp = g_get_environ ();
       envp = g_environ_setenv (envp, "SRT_TEST_PARSE_JSON", input_json, TRUE);
 
@@ -741,15 +756,14 @@ json_parsing (Fixture *f,
       g_assert_true (result);
       g_assert_cmpint (exit_status, ==, 0);
       g_assert_nonnull (output);
-
-      g_assert_true (g_file_get_contents (output_json, &expectation, NULL, &error));
-      g_assert_no_error (error);
-
       g_assert_cmpstr (output, ==, expectation);
 
+      g_object_unref (parser);
+      g_object_unref (generator);
       g_free (input_json);
       g_free (output_json);
       g_free (output);
+      g_free (generated);
       g_free (expectation);
       g_strfreev (envp);
       g_clear_error (&error);
-- 
GitLab