diff options
author | Bastien Nocera <hadess@hadess.net> | 2016-12-28 16:11:22 +0100 |
---|---|---|
committer | Bastien Nocera <hadess@hadess.net> | 2016-12-28 16:45:24 +0100 |
commit | e96cbf246b530d508106fdc528e24ca384e6cff0 (patch) | |
tree | b52d99dcc835dfa77fa564c9bb505edb4fd7fed2 /tests | |
parent | f63a1d4125a9a67b73c6867c4f0c98b9c6b58888 (diff) | |
download | gdk-pixbuf-e96cbf246b530d508106fdc528e24ca384e6cff0.tar.gz |
tests: Add small tool to save a reference image
This makes it easier to create a reference image after a bug has been
fixed. Reverting the fix is enough to show that the reftest fails
without it.
https://bugzilla.gnome.org/show_bug.cgi?id=696331
Diffstat (limited to 'tests')
-rw-r--r-- | tests/Makefile.am | 1 | ||||
-rw-r--r-- | tests/pixbuf-save-ref.c | 102 |
2 files changed, 103 insertions, 0 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am index ca91ed199..71e39bc97 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -20,6 +20,7 @@ noinst_PROGRAMS += \ pixbuf-read \ pixbuf-random \ pixbuf-lowmem \ + pixbuf-save-ref \ $(NULL) test_programs = \ diff --git a/tests/pixbuf-save-ref.c b/tests/pixbuf-save-ref.c new file mode 100644 index 000000000..e805c139b --- /dev/null +++ b/tests/pixbuf-save-ref.c @@ -0,0 +1,102 @@ +/* -*- Mode: C; c-basic-offset: 2; -*- */ +/* GdkPixbuf library - test loaders + * + * Copyright (C) 2001 Søren Sandmann (sandmann@daimi.au.dk) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see <http://www.gnu.org/licenses/>. + */ + +#include "config.h" +#include "gdk-pixbuf/gdk-pixbuf.h" +#include <stdio.h> +#include <stdlib.h> + +static gboolean +load_and_save (const char *filename, GError **error) +{ + GdkPixbuf *pixbuf; + GdkPixbufLoader *loader; + guchar *contents; + char *new_filename = NULL; + gsize size; + gboolean ret = TRUE; + + if (!g_file_get_contents (filename, (char **) &contents, &size, error)) + return FALSE; + + loader = gdk_pixbuf_loader_new (); + if (!gdk_pixbuf_loader_write (loader, contents, size, error)) + { + ret = FALSE; + goto out; + } + + pixbuf = gdk_pixbuf_loader_get_pixbuf (loader); + g_assert (pixbuf); + g_object_ref (pixbuf); + + if (!gdk_pixbuf_loader_close (loader, error)) + { + ret = FALSE; + goto out; + } + g_object_unref (loader); + + new_filename = g_strdup_printf ("%s.ref.png", filename); + ret = gdk_pixbuf_save (pixbuf, new_filename, "png", error, NULL); + +out: + g_free (contents); + g_free (new_filename); + g_object_unref (pixbuf); + + return ret; +} + +static void +usage (void) +{ + g_print ("usage: pixbuf-save-ref <files>\n"); + exit (EXIT_FAILURE); +} + +int +main (int argc, char **argv) +{ + int i; + + g_log_set_always_fatal (G_LOG_LEVEL_WARNING | G_LOG_LEVEL_ERROR | G_LOG_LEVEL_CRITICAL); + + if (argc == 1) + usage(); + + for (i = 1; i < argc; ++i) + { + GError *err = NULL; + + g_print ("%s\t\t", argv[i]); + fflush (stdout); + if (!load_and_save (argv[i], &err)) + { + fprintf (stderr, "%s: error: %s\n", argv[i], err->message); + g_clear_error (&err); + } + else + { + g_print ("success\n"); + } + } + + return 0; +} |