testsuite: Make offload test do actual diffs

We have a testutils.c version for that.
This commit is contained in:
Benjamin Otte
2024-11-04 21:48:14 +01:00
parent bfbc3e7484
commit 2a7beb75e8
2 changed files with 15 additions and 32 deletions

View File

@@ -489,7 +489,8 @@ endforeach
# offload does not work outside of linux
if os_linux
offload = executable('offload', 'offload.c', 'gskrendernodeattach.c',
offload = executable('offload',
[ 'offload.c', 'gskrendernodeattach.c', '../testutils.c' ],
dependencies : libgtk_static_dep,
c_args: common_cflags + [ '-DGTK_COMPILATION=1' ],
)

View File

@@ -29,6 +29,8 @@
#include <gsk/gskoffloadprivate.h>
#include "gskrendernodeattach.h"
#include "../testutils.h"
static char *
test_get_sibling_file (const char *node_file,
const char *old_ext,
@@ -52,26 +54,6 @@ test_get_sibling_file (const char *node_file,
return g_string_free (file, FALSE);
}
static GBytes *
diff_with_file (const char *file1,
GBytes *input,
GError **error)
{
char *buffer;
gsize len;
static const char msg[] = "The output is not as expected";
g_file_get_contents (file1, &buffer, &len, NULL);
if (strcmp (buffer, (char *) g_bytes_get_data (input, NULL)) == 0)
{
g_free (buffer);
return NULL;
}
g_free (buffer);
return g_bytes_new_static (msg, strlen (msg) + 1);
}
static void
append_error_value (GString *string,
GType enum_type,
@@ -225,7 +207,7 @@ collect_offload_info (GdkSurface *surface,
info->was_offloaded ? "was offloaded, " : "");
}
bytes = g_bytes_new (s->str, s->len + 1);
bytes = g_bytes_new (s->str, s->len);
g_string_free (s, TRUE);
@@ -364,11 +346,11 @@ parse_node_file (GFile *file, const char *generate)
GdkSubsurface *subsurface;
GskOffload *offload;
GskRenderNode *node, *tmp;
GBytes *offload_state, *diff;
GBytes *offload_state;
GError *error = NULL;
gboolean result = TRUE;
cairo_region_t *clip, *region;
char *path;
char *path, *diff;
GskRenderNode *node2;
const char *generate_values[] = { "offload", "offload2", "diff", NULL };
@@ -425,20 +407,20 @@ parse_node_file (GFile *file, const char *generate)
if (reference_file == NULL)
return FALSE;
diff = diff_with_file (reference_file, offload_state, &error);
diff = diff_bytes_with_file (reference_file, offload_state, &error);
g_assert_no_error (error);
if (diff && g_bytes_get_size (diff) > 0)
if (diff)
{
char *basename = g_path_get_basename (reference_file);
g_print ("Resulting file doesn't match reference (%s):\n%s\n",
basename,
(const char *) g_bytes_get_data (diff, NULL));
diff);
g_free (basename);
result = FALSE;
}
g_clear_pointer (&offload_state, g_bytes_unref);
g_clear_pointer (&diff, g_bytes_unref);
g_clear_pointer (&diff, g_free);
g_clear_pointer (&reference_file, g_free);
path = test_get_sibling_file (g_file_peek_path (file), ".node", ".node2");
@@ -464,20 +446,20 @@ parse_node_file (GFile *file, const char *generate)
if (reference_file == NULL)
return FALSE;
diff = diff_with_file (reference_file, offload_state, &error);
diff = diff_bytes_with_file (reference_file, offload_state, &error);
g_assert_no_error (error);
if (diff && g_bytes_get_size (diff) > 0)
if (diff)
{
char *basename = g_path_get_basename (reference_file);
g_print ("Resulting file doesn't match reference (%s):\n%s\n",
basename,
(const char *) g_bytes_get_data (diff, NULL));
diff);
g_free (basename);
result = FALSE;
}
g_clear_pointer (&offload_state, g_bytes_unref);
g_clear_pointer (&diff, g_bytes_unref);
g_clear_pointer (&diff, g_free);
g_clear_pointer (&reference_file, g_free);
gsk_render_node_diff (node, node2, &(GskDiffData) { clip, surface });