testsuite: Make offload test do actual diffs
We have a testutils.c version for that.
This commit is contained in:
@@ -489,7 +489,8 @@ endforeach
|
|||||||
|
|
||||||
# offload does not work outside of linux
|
# offload does not work outside of linux
|
||||||
if os_linux
|
if os_linux
|
||||||
offload = executable('offload', 'offload.c', 'gskrendernodeattach.c',
|
offload = executable('offload',
|
||||||
|
[ 'offload.c', 'gskrendernodeattach.c', '../testutils.c' ],
|
||||||
dependencies : libgtk_static_dep,
|
dependencies : libgtk_static_dep,
|
||||||
c_args: common_cflags + [ '-DGTK_COMPILATION=1' ],
|
c_args: common_cflags + [ '-DGTK_COMPILATION=1' ],
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -29,6 +29,8 @@
|
|||||||
#include <gsk/gskoffloadprivate.h>
|
#include <gsk/gskoffloadprivate.h>
|
||||||
#include "gskrendernodeattach.h"
|
#include "gskrendernodeattach.h"
|
||||||
|
|
||||||
|
#include "../testutils.h"
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
test_get_sibling_file (const char *node_file,
|
test_get_sibling_file (const char *node_file,
|
||||||
const char *old_ext,
|
const char *old_ext,
|
||||||
@@ -52,26 +54,6 @@ test_get_sibling_file (const char *node_file,
|
|||||||
return g_string_free (file, FALSE);
|
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
|
static void
|
||||||
append_error_value (GString *string,
|
append_error_value (GString *string,
|
||||||
GType enum_type,
|
GType enum_type,
|
||||||
@@ -225,7 +207,7 @@ collect_offload_info (GdkSurface *surface,
|
|||||||
info->was_offloaded ? "was offloaded, " : "");
|
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);
|
g_string_free (s, TRUE);
|
||||||
|
|
||||||
@@ -364,11 +346,11 @@ parse_node_file (GFile *file, const char *generate)
|
|||||||
GdkSubsurface *subsurface;
|
GdkSubsurface *subsurface;
|
||||||
GskOffload *offload;
|
GskOffload *offload;
|
||||||
GskRenderNode *node, *tmp;
|
GskRenderNode *node, *tmp;
|
||||||
GBytes *offload_state, *diff;
|
GBytes *offload_state;
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
gboolean result = TRUE;
|
gboolean result = TRUE;
|
||||||
cairo_region_t *clip, *region;
|
cairo_region_t *clip, *region;
|
||||||
char *path;
|
char *path, *diff;
|
||||||
GskRenderNode *node2;
|
GskRenderNode *node2;
|
||||||
const char *generate_values[] = { "offload", "offload2", "diff", NULL };
|
const char *generate_values[] = { "offload", "offload2", "diff", NULL };
|
||||||
|
|
||||||
@@ -425,20 +407,20 @@ parse_node_file (GFile *file, const char *generate)
|
|||||||
if (reference_file == NULL)
|
if (reference_file == NULL)
|
||||||
return FALSE;
|
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);
|
g_assert_no_error (error);
|
||||||
if (diff && g_bytes_get_size (diff) > 0)
|
if (diff)
|
||||||
{
|
{
|
||||||
char *basename = g_path_get_basename (reference_file);
|
char *basename = g_path_get_basename (reference_file);
|
||||||
g_print ("Resulting file doesn't match reference (%s):\n%s\n",
|
g_print ("Resulting file doesn't match reference (%s):\n%s\n",
|
||||||
basename,
|
basename,
|
||||||
(const char *) g_bytes_get_data (diff, NULL));
|
diff);
|
||||||
g_free (basename);
|
g_free (basename);
|
||||||
result = FALSE;
|
result = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
g_clear_pointer (&offload_state, g_bytes_unref);
|
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);
|
g_clear_pointer (&reference_file, g_free);
|
||||||
|
|
||||||
path = test_get_sibling_file (g_file_peek_path (file), ".node", ".node2");
|
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)
|
if (reference_file == NULL)
|
||||||
return FALSE;
|
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);
|
g_assert_no_error (error);
|
||||||
if (diff && g_bytes_get_size (diff) > 0)
|
if (diff)
|
||||||
{
|
{
|
||||||
char *basename = g_path_get_basename (reference_file);
|
char *basename = g_path_get_basename (reference_file);
|
||||||
g_print ("Resulting file doesn't match reference (%s):\n%s\n",
|
g_print ("Resulting file doesn't match reference (%s):\n%s\n",
|
||||||
basename,
|
basename,
|
||||||
(const char *) g_bytes_get_data (diff, NULL));
|
diff);
|
||||||
g_free (basename);
|
g_free (basename);
|
||||||
result = FALSE;
|
result = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
g_clear_pointer (&offload_state, g_bytes_unref);
|
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);
|
g_clear_pointer (&reference_file, g_free);
|
||||||
|
|
||||||
gsk_render_node_diff (node, node2, &(GskDiffData) { clip, surface });
|
gsk_render_node_diff (node, node2, &(GskDiffData) { clip, surface });
|
||||||
|
|||||||
Reference in New Issue
Block a user