[gtk/image-loading: 4/15] Add tests for the png loader




commit 6588a1dde7332490d6706b6889ef86f7f3335fb2
Author: Matthias Clasen <mclasen redhat com>
Date:   Sat Sep 11 20:27:13 2021 -0400

    Add tests for the png loader

 testsuite/gdk/image-data/image.png | Bin 0 -> 1609 bytes
 testsuite/gdk/image.c              | 117 +++++++++++++++++++++++++++++++++++++
 testsuite/gdk/meson.build          |  26 +++++++++
 3 files changed, 143 insertions(+)
---
diff --git a/testsuite/gdk/image-data/image.png b/testsuite/gdk/image-data/image.png
new file mode 100644
index 0000000000..49ee0d459e
Binary files /dev/null and b/testsuite/gdk/image-data/image.png differ
diff --git a/testsuite/gdk/image.c b/testsuite/gdk/image.c
new file mode 100644
index 0000000000..c357674968
--- /dev/null
+++ b/testsuite/gdk/image.c
@@ -0,0 +1,117 @@
+#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_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 ();
+}
diff --git a/testsuite/gdk/meson.build b/testsuite/gdk/meson.build
index 5e62e98775..3933ed8587 100644
--- a/testsuite/gdk/meson.build
+++ b/testsuite/gdk/meson.build
@@ -48,6 +48,31 @@ foreach t : tests
   )
 endforeach
 
+internal_tests = [
+  'image'
+]
+
+foreach t : internal_tests
+  test_exe = executable(t, '@0@.c'.format(t),
+    c_args: common_cflags,
+    dependencies: libgtk_static_dep,
+    install: get_option('install-tests'),
+    install_dir: testexecdir,
+  )
+
+  test(t, test_exe,
+    args: [ '--tap', '-k' ],
+    protocol: 'tap',
+    env: [
+      'G_TEST_SRCDIR=@0@'.format(meson.current_source_dir()),
+      'G_TEST_BUILDDIR=@0@'.format(meson.current_build_dir()),
+      'DBUS_SESSION_BUS_ADDRESS=',
+    ],
+    suite: 'gdk',
+  )
+endforeach
+
+
 if get_option('install-tests')
   foreach t : tests
     test_cdata = configuration_data()
@@ -62,4 +87,5 @@ if get_option('install-tests')
   endforeach
 
   install_subdir('clipboard-data', install_dir: testexecdir)
+  install_subdir('image-data', install_dir: testexecdir)
 endif


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]