summaryrefslogtreecommitdiff
path: root/testsuite/gdk/image.c
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2021-09-11 20:27:13 -0400
committerBenjamin Otte <otte@redhat.com>2021-09-17 00:25:22 +0200
commitd6ce65f81c2914640746e9ae8d12e0096da6ab11 (patch)
tree06bb8fd59d73f018e770f7f66068871558c5d55d /testsuite/gdk/image.c
parent7949aaabb7fcafab3aa683330437737783f22665 (diff)
downloadgtk+-d6ce65f81c2914640746e9ae8d12e0096da6ab11.tar.gz
Add tests for the png loader
Diffstat (limited to 'testsuite/gdk/image.c')
-rw-r--r--testsuite/gdk/image.c118
1 files changed, 118 insertions, 0 deletions
diff --git a/testsuite/gdk/image.c b/testsuite/gdk/image.c
new file mode 100644
index 0000000000..0a916eb404
--- /dev/null
+++ b/testsuite/gdk/image.c
@@ -0,0 +1,118 @@
+#include <gtk/gtk.h>
+#include "gdk/loaders/gdkpngprivate.h"
+
+static void
+assert_texture_equal (GdkTexture *t1,
+ GdkTexture *t2)
+{
+ int width;
+ int height;
+ int stride;
+ guchar *d1;
+ guchar *d2;
+
+ width = gdk_texture_get_width (t1);
+ height = gdk_texture_get_height (t1);
+ stride = 4 * width;
+
+ g_assert_cmpint (width, ==, gdk_texture_get_width (t2));
+ g_assert_cmpint (height, ==, gdk_texture_get_height (t2));
+
+ d1 = g_malloc (stride * height);
+ d2 = g_malloc (stride * height);
+
+ gdk_texture_download (t1, d1, stride);
+ gdk_texture_download (t2, d2, stride);
+
+ g_assert_cmpmem (d1, stride * height, d2, stride * height);
+
+ g_free (d1);
+ g_free (d2);
+}
+
+static void
+test_load_image (gconstpointer data)
+{
+ const char *filename = data;
+ GdkTexture *texture;
+ char *path;
+ GFile *file;
+ GBytes *bytes;
+ GError *error = NULL;
+
+ path = g_test_build_filename (G_TEST_DIST, "image-data", filename, NULL);
+ file = g_file_new_for_path (path);
+ bytes = g_file_load_bytes (file, NULL, NULL, &error);
+ g_assert_no_error (error);
+
+ if (g_str_has_suffix (filename, ".png"))
+ texture = gdk_load_png (bytes, &error);
+ else
+ g_assert_not_reached ();
+
+ g_assert_no_error (error);
+ g_assert_true (GDK_IS_TEXTURE (texture));
+ g_assert_cmpint (gdk_texture_get_width (texture), ==, 32);
+ g_assert_cmpint (gdk_texture_get_height (texture), ==, 32);
+
+ g_object_unref (texture);
+ g_bytes_unref (bytes);
+ g_object_unref (file);
+ g_free (path);
+}
+
+static void
+test_save_image (gconstpointer test_data)
+{
+ const char *filename = test_data;
+ char *path;
+ GFile *file;
+ GdkTexture *texture;
+ GFile *file2;
+ GdkTexture *texture2;
+ GError *error = NULL;
+ GBytes *bytes = NULL;
+ GIOStream *stream;
+
+ path = g_test_build_filename (G_TEST_DIST, "image-data", filename, NULL);
+ file = g_file_new_for_path (path);
+ texture = gdk_texture_new_from_file (file, &error);
+ g_assert_no_error (error);
+
+ if (g_str_has_suffix (filename, ".png"))
+ bytes = gdk_save_png (texture);
+ else
+ g_assert_not_reached ();
+
+ file2 = g_file_new_tmp ("imageXXXXXX", (GFileIOStream **)&stream, NULL);
+ g_object_unref (stream);
+ g_file_replace_contents (file2,
+ g_bytes_get_data (bytes, NULL),
+ g_bytes_get_size (bytes),
+ NULL, FALSE, 0,
+ NULL, NULL, &error);
+ g_assert_no_error (error);
+
+ texture2 = gdk_texture_new_from_file (file2, &error);
+ g_assert_no_error (error);
+
+ assert_texture_equal (texture, texture2);
+
+ g_bytes_unref (bytes);
+ g_object_unref (texture2);
+ g_object_unref (file2);
+ g_object_unref (texture);
+ g_object_unref (file);
+ g_free (path);
+}
+
+int
+main (int argc, char *argv[])
+{
+ (g_test_init) (&argc, &argv, NULL);
+
+ g_test_add_data_func ("/image/load/png", "image.png", test_load_image);
+ g_test_add_data_func ("/image/save/png", "image.png", test_save_image);
+
+ return g_test_run ();
+}