summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2021-01-22 05:16:08 +0000
committerMatthias Clasen <mclasen@redhat.com>2021-01-22 05:16:08 +0000
commit4d609149d23259340011d6e985974415944ab11a (patch)
treecdae8d59e963102184769b55e04d3c137d4edfb6
parent6c54abeca719cb98d6ce84c0c03114b426cb1c51 (diff)
parente808fb424ae10baa31ba92a2e3bbec38689c246a (diff)
downloadgtk+-4d609149d23259340011d6e985974415944ab11a.tar.gz
Merge branch 'tests-without-diff' into 'master'
testsuite: Stop requiring diff See merge request GNOME/gtk!3103
-rw-r--r--testsuite/css/change/meson.build1
-rw-r--r--testsuite/css/change/test-css-change.c49
-rw-r--r--testsuite/css/nodes/meson.build2
-rw-r--r--testsuite/css/nodes/test-css-nodes.c49
-rw-r--r--testsuite/css/parser/meson.build2
-rw-r--r--testsuite/css/parser/test-css-parser.c62
-rw-r--r--testsuite/css/style/meson.build1
-rw-r--r--testsuite/css/style/test-css-style.c54
-rw-r--r--testsuite/gtk/meson.build2
-rw-r--r--testsuite/gtk/test-focus-chain.c49
-rw-r--r--testsuite/meson.build4
-rw-r--r--testsuite/testutils.c88
-rw-r--r--testsuite/testutils.h7
13 files changed, 116 insertions, 254 deletions
diff --git a/testsuite/css/change/meson.build b/testsuite/css/change/meson.build
index 01a6829fbd..9409f483c1 100644
--- a/testsuite/css/change/meson.build
+++ b/testsuite/css/change/meson.build
@@ -13,6 +13,7 @@ testdatadir = join_paths(installed_test_datadir, 'css')
test_change = executable(
'test-css-change',
'test-css-change.c',
+ '../../testutils.c',
c_args: common_cflags,
dependencies: libgtk_dep,
install: get_option('install-tests'),
diff --git a/testsuite/css/change/test-css-change.c b/testsuite/css/change/test-css-change.c
index 830f53fbfd..1d60f0bcff 100644
--- a/testsuite/css/change/test-css-change.c
+++ b/testsuite/css/change/test-css-change.c
@@ -21,6 +21,7 @@
#include <string.h>
#include <glib/gstdio.h>
#include <gtk/gtk.h>
+#include "testsuite/testutils.h"
#ifdef G_OS_WIN32
# include <io.h>
@@ -50,54 +51,6 @@ test_get_other_file (const char *ui_file, const char *extension)
return g_string_free (file, FALSE);
}
-static char *
-diff_with_file (const char *file1,
- char *text,
- gssize len,
- GError **error)
-{
- const char *command[] = { "diff", "-u", file1, NULL, NULL };
- char *diff, *tmpfile;
- int fd;
-
- diff = NULL;
-
- if (len < 0)
- len = strlen (text);
-
- /* write the text buffer to a temporary file */
- fd = g_file_open_tmp (NULL, &tmpfile, error);
- if (fd < 0)
- return NULL;
-
- if (write (fd, text, len) != (int) len)
- {
- close (fd);
- g_set_error (error,
- G_FILE_ERROR, G_FILE_ERROR_FAILED,
- "Could not write data to temporary file '%s'", tmpfile);
- goto done;
- }
- close (fd);
- command[3] = tmpfile;
-
- /* run diff command */
- g_spawn_sync (NULL,
- (char **) command,
- NULL,
- G_SPAWN_SEARCH_PATH,
- NULL, NULL,
- &diff,
- NULL, NULL,
- error);
-
-done:
- g_unlink (tmpfile);
- g_free (tmpfile);
-
- return diff;
-}
-
static void
style_context_changed (GtkWidget *window, const char **output)
{
diff --git a/testsuite/css/nodes/meson.build b/testsuite/css/nodes/meson.build
index 97a739f1b3..eb619cf29c 100644
--- a/testsuite/css/nodes/meson.build
+++ b/testsuite/css/nodes/meson.build
@@ -10,7 +10,7 @@ nodetest_env.set('G_ENABLE_DIAGNOSTIC', '0')
testexecdir = join_paths(installed_test_bindir, 'css', 'nodes')
testdatadir = join_paths(installed_test_datadir, 'css')
-test_nodes = executable('test-css-nodes', 'test-css-nodes.c',
+test_nodes = executable('test-css-nodes', 'test-css-nodes.c', '../../testutils.c',
c_args: common_cflags,
install: get_option('install-tests'),
install_dir: testexecdir,
diff --git a/testsuite/css/nodes/test-css-nodes.c b/testsuite/css/nodes/test-css-nodes.c
index 28bdfcb9b1..a44c4e4508 100644
--- a/testsuite/css/nodes/test-css-nodes.c
+++ b/testsuite/css/nodes/test-css-nodes.c
@@ -21,6 +21,7 @@
#include <string.h>
#include <glib/gstdio.h>
#include <gtk/gtk.h>
+#include "testsuite/testutils.h"
#ifdef G_OS_WIN32
# include <io.h>
@@ -48,54 +49,6 @@ test_get_reference_file (const char *ui_file)
return g_string_free (file, FALSE);
}
-static char *
-diff_with_file (const char *file1,
- char *text,
- gssize len,
- GError **error)
-{
- const char *command[] = { "diff", "-u", file1, NULL, NULL };
- char *diff, *tmpfile;
- int fd;
-
- diff = NULL;
-
- if (len < 0)
- len = strlen (text);
-
- /* write the text buffer to a temporary file */
- fd = g_file_open_tmp (NULL, &tmpfile, error);
- if (fd < 0)
- return NULL;
-
- if (write (fd, text, len) != (int) len)
- {
- close (fd);
- g_set_error (error,
- G_FILE_ERROR, G_FILE_ERROR_FAILED,
- "Could not write data to temporary file '%s'", tmpfile);
- goto done;
- }
- close (fd);
- command[3] = tmpfile;
-
- /* run diff command */
- g_spawn_sync (NULL,
- (char **) command,
- NULL,
- G_SPAWN_SEARCH_PATH,
- NULL, NULL,
- &diff,
- NULL, NULL,
- error);
-
-done:
- g_unlink (tmpfile);
- g_free (tmpfile);
-
- return diff;
-}
-
static void
style_context_changed (GtkWidget *window, const char **output)
{
diff --git a/testsuite/css/parser/meson.build b/testsuite/css/parser/meson.build
index 7e501aebda..f70753c2b5 100644
--- a/testsuite/css/parser/meson.build
+++ b/testsuite/css/parser/meson.build
@@ -1,7 +1,7 @@
testexecdir = join_paths(installed_test_bindir, 'css', 'parser')
testdatadir = join_paths(installed_test_datadir, 'css')
-test_parser = executable('test-css-parser', 'test-css-parser.c',
+test_parser = executable('test-css-parser', 'test-css-parser.c', '../../testutils.c',
c_args: common_cflags,
install: get_option('install-tests'),
install_dir: testexecdir,
diff --git a/testsuite/css/parser/test-css-parser.c b/testsuite/css/parser/test-css-parser.c
index b2c4f69746..5d18e00cb8 100644
--- a/testsuite/css/parser/test-css-parser.c
+++ b/testsuite/css/parser/test-css-parser.c
@@ -25,6 +25,7 @@
#include <string.h>
#include <glib/gstdio.h>
#include <gtk/gtk.h>
+#include "testsuite/testutils.h"
#ifdef G_OS_WIN32
# include <io.h>
@@ -72,51 +73,6 @@ test_get_errors_file (const char *css_file)
return g_string_free (file, FALSE);
}
-static GBytes *
-diff_with_file (const char *file1,
- char *text,
- gssize len,
- GError **error)
-{
- GSubprocess *process;
- GBytes *input, *output;
-
- process = g_subprocess_new (G_SUBPROCESS_FLAGS_STDIN_PIPE
- | G_SUBPROCESS_FLAGS_STDOUT_PIPE,
- error,
- "diff", "-u", file1, "-", NULL);
- if (process == NULL)
- return NULL;
-
- input = g_bytes_new_static (text, len >= 0 ? len : strlen (text));
- if (!g_subprocess_communicate (process,
- input,
- NULL,
- &output,
- NULL,
- error))
- {
- g_object_unref (process);
- g_bytes_unref (input);
- return NULL;
- }
-
- if (!g_subprocess_get_successful (process) &&
- /* this is the condition when the files differ */
- !(g_subprocess_get_if_exited (process) && g_subprocess_get_exit_status (process) == 1))
- {
- g_clear_pointer (&output, g_bytes_unref);
- g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- "The `diff' process exited with error status %d",
- g_subprocess_get_exit_status (process));
- }
-
- g_object_unref (process);
- g_bytes_unref (input);
-
- return output;
-}
-
static void
append_error_value (GString *string,
GType enum_type,
@@ -167,7 +123,7 @@ parse_css_file (GFile *file, gboolean generate)
GtkCssProvider *provider;
char *css, *css_file, *reference_file, *errors_file;
GString *errors;
- GBytes *diff;
+ char *diff;
GError *error = NULL;
css_file = g_file_get_path (file);
@@ -193,14 +149,13 @@ parse_css_file (GFile *file, gboolean generate)
diff = diff_with_file (reference_file, css, -1, &error);
g_assert_no_error (error);
- if (diff && g_bytes_get_size (diff) > 0)
+ if (diff && diff[0])
{
- g_test_message ("Resulting CSS doesn't match reference:\n%s",
- (const char *) g_bytes_get_data (diff, NULL));
+ g_test_message ("Resulting CSS doesn't match reference:\n%s", diff);
g_test_fail ();
}
g_free (reference_file);
- g_clear_pointer (&diff, g_bytes_unref);
+ g_free (diff);
errors_file = test_get_errors_file (css_file);
@@ -209,13 +164,12 @@ parse_css_file (GFile *file, gboolean generate)
diff = diff_with_file (errors_file, errors->str, errors->len, &error);
g_assert_no_error (error);
- if (diff && g_bytes_get_size (diff) > 0)
+ if (diff && diff[0])
{
- g_test_message ("Errors don't match expected errors:\n%s",
- (const char *) g_bytes_get_data (diff, NULL));
+ g_test_message ("Errors don't match expected errors:\n%s", diff);
g_test_fail ();
}
- g_clear_pointer (&diff, g_bytes_unref);
+ g_free (diff);
}
else if (errors->str[0])
{
diff --git a/testsuite/css/style/meson.build b/testsuite/css/style/meson.build
index 4026c5f3be..9dc0f4c34c 100644
--- a/testsuite/css/style/meson.build
+++ b/testsuite/css/style/meson.build
@@ -19,6 +19,7 @@ cssresources = gnome.compile_resources(
test_style = executable(
'test-css-style',
'test-css-style.c',
+ '../../testutils.c',
cssresources,
c_args: common_cflags,
dependencies: libgtk_dep,
diff --git a/testsuite/css/style/test-css-style.c b/testsuite/css/style/test-css-style.c
index 5c40c5cdac..93367fc336 100644
--- a/testsuite/css/style/test-css-style.c
+++ b/testsuite/css/style/test-css-style.c
@@ -21,6 +21,7 @@
#include <string.h>
#include <glib/gstdio.h>
#include <gtk/gtk.h>
+#include "testsuite/testutils.h"
#ifdef G_OS_WIN32
# include <io.h>
@@ -50,51 +51,6 @@ test_get_other_file (const char *ui_file, const char *extension)
return g_string_free (file, FALSE);
}
-static GBytes *
-diff_with_file (const char *file1,
- char *text,
- gssize len,
- GError **error)
-{
- GSubprocess *process;
- GBytes *input, *output;
-
- process = g_subprocess_new (G_SUBPROCESS_FLAGS_STDIN_PIPE
- | G_SUBPROCESS_FLAGS_STDOUT_PIPE,
- error,
- "diff", "-u", file1, "-", NULL);
- if (process == NULL)
- return NULL;
-
- input = g_bytes_new_static (text, len >= 0 ? len : strlen (text));
- if (!g_subprocess_communicate (process,
- input,
- NULL,
- &output,
- NULL,
- error))
- {
- g_object_unref (process);
- g_bytes_unref (input);
- return NULL;
- }
-
- if (!g_subprocess_get_successful (process) &&
- /* this is the condition when the files differ */
- !(g_subprocess_get_if_exited (process) && g_subprocess_get_exit_status (process) == 1))
- {
- g_clear_pointer (&output, g_bytes_unref);
- g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- "The `diff' process exited with error status %d",
- g_subprocess_get_exit_status (process));
- }
-
- g_object_unref (process);
- g_bytes_unref (input);
-
- return output;
-}
-
static char *
fixup_style_differences (const char *str)
{
@@ -133,7 +89,7 @@ load_ui_file (GFile *file, gboolean generate)
GtkBuilder *builder;
GtkWidget *window;
char *output;
- GBytes *diff;
+ char *diff;
char *ui_file, *css_file, *reference_file;
GtkCssProvider *provider;
GError *error = NULL;
@@ -174,13 +130,13 @@ load_ui_file (GFile *file, gboolean generate)
diff = diff_with_file (reference_file, output, -1, &error);
g_assert_no_error (error);
- if (diff && g_bytes_get_size (diff) > 0)
+ if (diff && diff[0])
{
- g_test_message ("Resulting output doesn't match reference:\n%s", (const char *) g_bytes_get_data (diff, NULL));
+ g_test_message ("Resulting output doesn't match reference:\n%s", diff);
g_test_fail ();
}
g_free (reference_file);
- g_clear_pointer (&diff, g_bytes_unref);
+ g_free (diff);
out:
gtk_style_context_remove_provider_for_display (gdk_display_get_default (),
diff --git a/testsuite/gtk/meson.build b/testsuite/gtk/meson.build
index f3710546ef..382e6369e9 100644
--- a/testsuite/gtk/meson.build
+++ b/testsuite/gtk/meson.build
@@ -250,7 +250,7 @@ focus_chain_tests = [
focus_chain = executable(
'test-focus-chain',
- sources: ['test-focus-chain.c'],
+ sources: ['test-focus-chain.c', '../testutils.c'],
dependencies: libgtk_dep,
c_args: common_cflags,
install: get_option('install-tests'),
diff --git a/testsuite/gtk/test-focus-chain.c b/testsuite/gtk/test-focus-chain.c
index 033cec98b5..cffedc1add 100644
--- a/testsuite/gtk/test-focus-chain.c
+++ b/testsuite/gtk/test-focus-chain.c
@@ -21,6 +21,7 @@
#include <string.h>
#include <glib/gstdio.h>
#include <gtk/gtk.h>
+#include "testsuite/testutils.h"
#ifdef G_OS_WIN32
# include <io.h>
@@ -38,54 +39,6 @@ struct {
{ GTK_DIR_RIGHT, "right" }
};
-static char *
-diff_with_file (const char *file1,
- char *text,
- gssize len,
- GError **error)
-{
- const char *command[] = { "diff", "-u", file1, NULL, NULL };
- char *diff, *tmpfile;
- int fd;
-
- diff = NULL;
-
- if (len < 0)
- len = strlen (text);
-
- /* write the text buffer to a temporary file */
- fd = g_file_open_tmp (NULL, &tmpfile, error);
- if (fd < 0)
- return NULL;
-
- if (write (fd, text, len) != (int) len)
- {
- close (fd);
- g_set_error (error,
- G_FILE_ERROR, G_FILE_ERROR_FAILED,
- "Could not write data to temporary file '%s'", tmpfile);
- goto done;
- }
- close (fd);
- command[3] = tmpfile;
-
- /* run diff command */
- g_spawn_sync (NULL,
- (char **) command,
- NULL,
- G_SPAWN_SEARCH_PATH,
- NULL, NULL,
- &diff,
- NULL, NULL,
- error);
-
-done:
- g_unlink (tmpfile);
- g_free (tmpfile);
-
- return diff;
-}
-
static void
check_focus_states (GtkWidget *focus_widget)
{
diff --git a/testsuite/meson.build b/testsuite/meson.build
index 4ef7cced9a..fafe6ea140 100644
--- a/testsuite/meson.build
+++ b/testsuite/meson.build
@@ -2,10 +2,6 @@ gtk_libexecdir = join_paths(gtk_prefix, get_option('libexecdir'))
installed_test_bindir = join_paths(gtk_libexecdir, 'installed-tests', 'gtk-4.0')
installed_test_datadir = join_paths(gtk_datadir, 'installed-tests', 'gtk-4.0')
-# We call diff in various tests, so we need to check it's available,
-# otherwise we're going to have failures down the line
-diff = find_program('diff', required: true)
-
common_env = [
'GIO_USE_VOLUME_MONITOR=unix',
'GSETTINGS_BACKEND=memory',
diff --git a/testsuite/testutils.c b/testsuite/testutils.c
new file mode 100644
index 0000000000..3d537e80dc
--- /dev/null
+++ b/testsuite/testutils.c
@@ -0,0 +1,88 @@
+/*
+ * Copyright © 2021 Red Hat, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Authors: Matthias Clasen <mclasen@redhat.com>
+ */
+
+#include <glib.h>
+#include <glib/gstdio.h>
+#include <unistd.h>
+#include "testsuite/testutils.h"
+
+char *
+diff_with_file (const char *file1,
+ char *text,
+ gssize len,
+ GError **error)
+{
+ const char *command[] = { "diff", "-u", file1, NULL, NULL };
+ char *diff, *tmpfile;
+ int fd;
+
+ diff = NULL;
+
+ if (g_find_program_in_path ("diff"))
+ {
+ if (len < 0)
+ len = strlen (text);
+
+ /* write the text buffer to a temporary file */
+ fd = g_file_open_tmp (NULL, &tmpfile, error);
+ if (fd < 0)
+ return NULL;
+
+ if (write (fd, text, len) != (int) len)
+ {
+ close (fd);
+ g_set_error (error,
+ G_FILE_ERROR, G_FILE_ERROR_FAILED,
+ "Could not write data to temporary file '%s'", tmpfile);
+ goto done;
+ }
+ close (fd);
+ command[3] = tmpfile;
+
+ /* run diff command */
+ g_spawn_sync (NULL,
+ (char **) command,
+ NULL,
+ G_SPAWN_SEARCH_PATH,
+ NULL, NULL,
+ &diff,
+ NULL, NULL,
+ error);
+
+done:
+ g_unlink (tmpfile);
+ g_free (tmpfile);
+ }
+ else
+ {
+ char *buf1;
+ gsize len1;
+
+ if (!g_file_get_contents (file1, &buf1, &len1, error))
+ return NULL;
+
+ if ((len != -1 && len != len1) ||
+ strncmp (text, buf1, len1) != 0)
+ diff = g_strdup ("Files differ.\n");
+
+ g_free (buf1);
+ }
+
+ return diff;
+}
diff --git a/testsuite/testutils.h b/testsuite/testutils.h
new file mode 100644
index 0000000000..7250ca6160
--- /dev/null
+++ b/testsuite/testutils.h
@@ -0,0 +1,7 @@
+#pragma once
+
+char * diff_with_file (const char *file1,
+ char *text,
+ gssize len,
+ GError **error);
+