diff --git a/tests/system-info-cli.c b/tests/system-info-cli.c
index a42076fb1f0d99dbcc6b139a7eaf715e3b88dd93..44ff386dbf2f43cbacb1b88fd7f208eb958046f6 100644
--- a/tests/system-info-cli.c
+++ b/tests/system-info-cli.c
@@ -43,6 +43,7 @@
 #include <json-glib/json-glib.h>
 
 #include "test-utils.h"
+#include "test-json-utils.h"
 #include "fake-home.h"
 
 #if defined(__i386__) || defined(__x86_64__)
@@ -737,34 +738,6 @@ static const JsonTest json_test[] =
   },
 };
 
-static void
-stdout_to_stderr_child_setup (gpointer nil)
-{
-  if (dup2 (STDERR_FILENO, STDOUT_FILENO) != STDOUT_FILENO)
-    _srt_async_signal_safe_error ("test-system-info-cli",
-                                  "Unable to redirect stdout to stderr",
-                                  1);
-}
-
-static gchar *
-pretty_print_json (const char *unformatted)
-{
-  g_autoptr(JsonParser) parser = NULL;
-  JsonNode *node = NULL;  /* not owned */
-  g_autoptr(JsonGenerator) generator = NULL;
-  g_autoptr(GError) error = NULL;
-
-  parser = json_parser_new ();
-  json_parser_load_from_data (parser, unformatted, -1, &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);
-  return json_generator_to_data (generator, NULL);
-}
-
 static void
 json_parsing (Fixture *f,
               gconstpointer context)
@@ -782,7 +755,6 @@ json_parsing (Fixture *f,
       g_auto(GStrv) envp = NULL;
       g_autoptr(GError) error = NULL;
       const gchar *argv[] = { "steam-runtime-system-info", "--verbose", NULL };
-      gsize len;
 
       g_test_message ("%s: input=%s output=%s", test->description, test->input_name, test->output_name);
 
@@ -791,10 +763,7 @@ json_parsing (Fixture *f,
       output_json = g_build_filename (f->srcdir, "json-report", multiarch_tuples[0],
                                       test->output_name, NULL);
 
-      g_file_get_contents (output_json, &unformatted, &len, &error);
-      g_assert_no_error (error);
-      g_assert_cmpuint (len, ==, strlen (unformatted));
-      expectation = pretty_print_json (unformatted);
+      expectation = _srt_json_pretty_from_file (output_json);
       g_clear_pointer (&unformatted, g_free);
 
       envp = g_get_environ ();
@@ -814,51 +783,9 @@ json_parsing (Fixture *f,
       g_assert_true (result);
       g_assert_cmpint (exit_status, ==, 0);
       g_assert_nonnull (unformatted);
-      output = pretty_print_json (unformatted);
-
-      if (g_strcmp0 (output, expectation) != 0)
-        {
-          const char *artifacts = g_getenv ("AUTOPKGTEST_ARTIFACTS");
-          g_autofree gchar *tmpdir = NULL;
-          g_autofree gchar *expected_path = NULL;
-          g_autofree gchar *output_path = NULL;
-          const gchar *diff_argv[] = { "diff", "-u", "<expected>", "<output>", NULL };
-
-          if (artifacts == NULL)
-            {
-              tmpdir = g_dir_make_tmp ("srt-tests-XXXXXX", &error);
-              g_assert_no_error (error);
-              artifacts = tmpdir;
-            }
-
-          expected_path = g_build_filename (artifacts, "expected.json", NULL);
-          g_file_set_contents (expected_path, expectation, -1, &error);
-          g_assert_no_error (error);
-
-          output_path = g_build_filename (artifacts, "output.json", NULL);
-          g_file_set_contents (output_path, output, -1, &error);
-          g_assert_no_error (error);
-
-          g_assert_cmpstr (diff_argv[2], ==, "<expected>");
-          diff_argv[2] = expected_path;
-          g_assert_cmpstr (diff_argv[3], ==, "<output>");
-          diff_argv[3] = output_path;
-          g_assert_null (diff_argv[4]);
-
-          /* Ignore error from calling diff, if any: we're running it
-           * for its side-effect of producing output on our stderr. */
-          g_spawn_sync (NULL, (gchar **) diff_argv, NULL, G_SPAWN_SEARCH_PATH,
-                        stdout_to_stderr_child_setup, NULL,
-                        NULL, NULL, NULL, NULL);
-
-          g_test_message ("Output for comparison: %s %s",
-                          expected_path, output_path);
-
-          if (tmpdir != NULL)
-            _srt_rm_rf (tmpdir);
-        }
+      output = _srt_json_pretty (unformatted);
 
-      g_assert_cmpstr (output, ==, expectation);
+      _srt_assert_streq_diff (expectation, output);
     }
 }