[gdk-pixbuf] Make testsuite robust against disabled formats



commit 9fa240c1ad5a815d63d8aa9126954152c2607f2e
Author: Matthias Clasen <mclasen redhat com>
Date:   Sat Jan 25 16:29:34 2014 -0500

    Make testsuite robust against disabled formats
    
    Skip tests if their file format is not supported by the
    available loaders.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=722651

 tests/Makefile.am             |   44 ++++++++++++++++++++++++++-
 tests/pixbuf-icc.c            |   14 ++++++++-
 tests/pixbuf-icon-serialize.c |    7 ++++
 tests/pixbuf-resource.c       |   13 ++++++++
 tests/pixbuf-save.c           |   13 ++++++++
 tests/pixbuf-scale.c          |    7 ++++
 tests/pixbuf-stream.c         |   25 ++++++++++++++++
 tests/pixbuf-threads.c        |   29 ++++++++++++------
 tests/test-common.c           |   65 +++++++++++++++++++++++++++++++++++++++++
 tests/test-common.h           |   33 +++++++++++++++++++++
 10 files changed, 238 insertions(+), 12 deletions(-)
---
diff --git a/tests/Makefile.am b/tests/Makefile.am
index de3442e..80840c2 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -42,17 +42,57 @@ dist_installed_test_data =          \
        icc-profile.png                 \
        $(wildcard $(srcdir)/test-images/*)
 
+pixbuf_icc_SOURCES =                   \
+       pixbuf-icc.c                    \
+       test-common.c                   \
+       test-common.h                   \
+       $(NULL)
+
+pixbuf_scale_SOURCES =                         \
+       pixbuf-scale.c                  \
+       test-common.c                   \
+       test-common.h                   \
+       $(NULL)
+
+pixbuf_stream_SOURCES =                        \
+       pixbuf-stream.c                 \
+       test-common.c                   \
+       test-common.h                   \
+       $(NULL)
+
+pixbuf_threads_SOURCES =               \
+       pixbuf-threads.c                \
+       test-common.c                   \
+       test-common.h                   \
+       $(NULL)
+
+pixbuf_icon_serialize_SOURCES =                \
+       pixbuf-icon-serialize.c         \
+       test-common.c                   \
+       test-common.h                   \
+       $(NULL)
+
+pixbuf_save_SOURCES =                  \
+       pixbuf-save.c                   \
+       test-common.c                   \
+       test-common.h                   \
+       $(NULL)
+
 pixbuf_resource_SOURCES =              \
        pixbuf-resource.c               \
+       test-common.c                   \
+       test-common.h                   \
        resources.h                     \
-       resources.c
+       resources.c                     \
+       $(NULL)
 
 BUILT_SOURCES += resources.h resources.c
 DISTCLEANFILES +=                      \
        resources.h resources.c         \
        pixbuf-save-options             \
        pixbuf-randomly-modified-image  \
-       pixbuf-save-roundtrip
+       pixbuf-save-roundtrip           \
+       $(NULL)
        
 EXTRA_DIST += resources.gresource.xml
 TESTS_ENVIRONMENT += GDK_PIXBUF_MODULE_FILE=$(top_builddir)/gdk-pixbuf/loaders.cache
diff --git a/tests/pixbuf-icc.c b/tests/pixbuf-icc.c
index 9cb9c90..3b95b09 100644
--- a/tests/pixbuf-icc.c
+++ b/tests/pixbuf-icc.c
@@ -22,6 +22,7 @@
 
 #include "config.h"
 #include "gdk-pixbuf/gdk-pixbuf.h"
+#include "test-common.h"
 
 static void
 test_incremental (gconstpointer data)
@@ -34,7 +35,12 @@ test_incremental (gconstpointer data)
   gchar *contents;
   gsize size;
 
-  
+  if (!format_supported (filename))
+    {
+      g_test_skip ("format not supported");
+      return;
+    }
+
   g_file_get_contents (g_test_get_filename (G_TEST_DIST, filename, NULL), &contents, &size, &error);
   g_assert_no_error (error);
 
@@ -62,6 +68,12 @@ test_nonincremental (gconstpointer data)
   GdkPixbuf *pixbuf;
   const gchar *profile;
 
+  if (!format_supported (filename))
+    {
+      g_test_skip ("format not supported");
+      return;
+    }
+
   pixbuf = gdk_pixbuf_new_from_file (g_test_get_filename (G_TEST_DIST, filename, NULL), &error);
   g_assert_no_error (error);
 
diff --git a/tests/pixbuf-icon-serialize.c b/tests/pixbuf-icon-serialize.c
index 20bf6e1..880c654 100644
--- a/tests/pixbuf-icon-serialize.c
+++ b/tests/pixbuf-icon-serialize.c
@@ -1,5 +1,6 @@
 #include "config.h"
 #include "gdk-pixbuf/gdk-pixbuf.h"
+#include "test-common.h"
 #include <string.h>
 #include <glib.h>
 
@@ -13,6 +14,12 @@ test_serialize (void)
   GIcon *icon;
   GInputStream *stream;
 
+  if (!format_supported ("png"))
+    {
+      g_test_skip ("format not supported");
+      return;
+    }
+
   pixbuf = gdk_pixbuf_new_from_file (g_test_get_filename (G_TEST_DIST, "test-image.png", NULL), &error);
   g_assert_no_error (error);
   g_assert (pixbuf != NULL);
diff --git a/tests/pixbuf-resource.c b/tests/pixbuf-resource.c
index a747bca..aa0bed8 100644
--- a/tests/pixbuf-resource.c
+++ b/tests/pixbuf-resource.c
@@ -22,6 +22,7 @@
 
 #include "config.h"
 #include "gdk-pixbuf/gdk-pixbuf.h"
+#include "test-common.h"
 #include <string.h>
 
 #define compare_option(p1, p2, key) \
@@ -77,6 +78,12 @@ test_resource (void)
   GError *error = NULL;
   GdkPixbuf *pixbuf, *ref;
 
+  if (!format_supported ("png"))
+    {
+      g_test_skip ("format not supported");
+      return;
+    }
+
   path = g_test_get_filename (G_TEST_DIST, "icc-profile.png", NULL);
   ref = gdk_pixbuf_new_from_file (path, &error);
   g_assert_no_error (error);
@@ -111,6 +118,12 @@ test_resource_at_scale (void)
   GError *error = NULL;
   GdkPixbuf *pixbuf, *ref;
 
+  if (!format_supported ("png"))
+    {
+      g_test_skip ("format not supported");
+      return;
+    }
+
   path = g_test_get_filename (G_TEST_DIST, "icc-profile.png", NULL);
   ref = gdk_pixbuf_new_from_file_at_scale (path, 40, 10, FALSE, &error);
   g_assert_no_error (error);
diff --git a/tests/pixbuf-save.c b/tests/pixbuf-save.c
index f7df29b..78ab288 100644
--- a/tests/pixbuf-save.c
+++ b/tests/pixbuf-save.c
@@ -21,6 +21,7 @@
  */
 
 #include "gdk-pixbuf/gdk-pixbuf.h"
+#include "test-common.h"
 #include <string.h>
 
 #define compare_option(p1, p2, key) \
@@ -76,6 +77,12 @@ test_save_roundtrip (void)
   GdkPixbuf *ref;
   GdkPixbuf *pixbuf;
 
+  if (!format_supported ("png"))
+    {
+      g_test_skip ("format not supported");
+      return;
+    }
+
   ref = gdk_pixbuf_new_from_file (g_test_get_filename (G_TEST_DIST, "test-image.png", NULL), &error);
   g_assert_no_error (error);
 
@@ -98,6 +105,12 @@ test_save_options (void)
   GdkPixbuf *pixbuf;
   GError *error = NULL;
 
+  if (!format_supported ("png"))
+    {
+      g_test_skip ("format not supported");
+      return;
+    }
+
   ref = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8, 10, 10);
   gdk_pixbuf_fill (ref, 0xff00ff00);
 
diff --git a/tests/pixbuf-scale.c b/tests/pixbuf-scale.c
index 4fd9fd5..d57e56a 100644
--- a/tests/pixbuf-scale.c
+++ b/tests/pixbuf-scale.c
@@ -22,6 +22,7 @@
 
 #include "config.h"
 #include "gdk-pixbuf/gdk-pixbuf.h"
+#include "test-common.h"
 
 static void
 test_scale (gconstpointer data)
@@ -33,6 +34,12 @@ test_scale (gconstpointer data)
   GdkPixbuf *pixbuf;
   gint width, height;
 
+  if (!format_supported (filename))
+    {
+      g_test_skip ("format not supported");
+      return;
+    }
+
   path = g_test_get_filename (G_TEST_DIST, filename, NULL);
   ref = gdk_pixbuf_new_from_file (path, &error);
   g_assert_no_error (error);
diff --git a/tests/pixbuf-stream.c b/tests/pixbuf-stream.c
index 0c2cebe..d66ce3e 100644
--- a/tests/pixbuf-stream.c
+++ b/tests/pixbuf-stream.c
@@ -22,6 +22,7 @@
 
 #include "config.h"
 #include "gdk-pixbuf/gdk-pixbuf.h"
+#include "test-common.h"
 #include <string.h>
 
 #define compare_option(p1, p2, key) \
@@ -71,6 +72,12 @@ test_stream (gconstpointer data)
   GFile *file;
   GInputStream *stream;
 
+  if (!format_supported (filename))
+    {
+      g_test_skip ("format not supported");
+      return;
+    }
+
   path = g_test_get_filename (G_TEST_DIST, filename, NULL);
   ref = gdk_pixbuf_new_from_file (path, &error);
   g_assert_no_error (error);
@@ -116,6 +123,12 @@ test_stream_async (gconstpointer data)
   gsize size;
   GInputStream *stream;
 
+  if (!format_supported (filename))
+    {
+      g_test_skip ("format not supported");
+      return;
+    }
+
   path = g_test_get_filename (G_TEST_DIST, filename, NULL);
   ref = gdk_pixbuf_new_from_file (path, &error);
   g_assert_no_error (error);
@@ -138,6 +151,12 @@ test_stream_at_scale (gconstpointer data)
   GFile *file;
   GInputStream *stream;
 
+  if (!format_supported (filename))
+    {
+      g_test_skip ("format not supported");
+      return;
+    }
+
   path = g_test_get_filename (G_TEST_DIST, filename, NULL);
   ref = gdk_pixbuf_new_from_file_at_scale (path, 20, 30, TRUE, &error);
   g_assert_no_error (error);
@@ -167,6 +186,12 @@ test_stream_at_scale_async (gconstpointer data)
   gsize size;
   GInputStream *stream;
 
+  if (!format_supported (filename))
+    {
+      g_test_skip ("format not supported");
+      return;
+    }
+
   path = g_test_get_filename (G_TEST_DIST, filename, NULL);
   ref = gdk_pixbuf_new_from_file_at_scale (path, 40, 10, FALSE, &error);
   g_assert_no_error (error);
diff --git a/tests/pixbuf-threads.c b/tests/pixbuf-threads.c
index 5eeb9dd..f2694fd 100644
--- a/tests/pixbuf-threads.c
+++ b/tests/pixbuf-threads.c
@@ -18,7 +18,9 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
  */
 
+#include "config.h"
 #include "gdk-pixbuf/gdk-pixbuf.h"
+#include "test-common.h"
 
 static void
 load_image (gpointer data, 
@@ -71,15 +73,24 @@ test_threads (void)
 
   for (i = 0; i < iterations; i++)
     {
-      g_thread_pool_push (pool, "valid_jpeg_test", NULL);
-      g_thread_pool_push (pool, "valid_png_test", NULL);
-      g_thread_pool_push (pool, "valid_gif_test", NULL);
-      g_thread_pool_push (pool, "valid_bmp_test", NULL);
-      g_thread_pool_push (pool, "valid_jpeg_progressive_test", NULL);
-      g_thread_pool_push (pool, "valid_xpm_test", NULL);
-      g_thread_pool_push (pool, "valid_ras_test", NULL);
-      g_thread_pool_push (pool, "valid_tga_test", NULL);
-      g_thread_pool_push (pool, "valid_tiff1_test", NULL);
+      if (format_supported ("jpeg"))
+        g_thread_pool_push (pool, "valid_jpeg_test", NULL);
+      if (format_supported ("png"))
+        g_thread_pool_push (pool, "valid_png_test", NULL);
+      if (format_supported ("gif"))
+        g_thread_pool_push (pool, "valid_gif_test", NULL);
+      if (format_supported ("bmp"))
+        g_thread_pool_push (pool, "valid_bmp_test", NULL);
+      if (format_supported ("jpeg"))
+        g_thread_pool_push (pool, "valid_jpeg_progressive_test", NULL);
+      if (format_supported ("xpm"))
+        g_thread_pool_push (pool, "valid_xpm_test", NULL);
+      if (format_supported ("ras"))
+        g_thread_pool_push (pool, "valid_ras_test", NULL);
+      if (format_supported ("tga"))
+        g_thread_pool_push (pool, "valid_tga_test", NULL);
+      if (format_supported ("tiff"))
+        g_thread_pool_push (pool, "valid_tiff1_test", NULL);
     }
 
   g_thread_pool_free (pool, FALSE, TRUE);
diff --git a/tests/test-common.c b/tests/test-common.c
new file mode 100644
index 0000000..c7673e3
--- /dev/null
+++ b/tests/test-common.c
@@ -0,0 +1,65 @@
+/* -*- Mode: C; c-basic-offset: 2; -*- */
+/* GdkPixbuf library - test loaders
+ *
+ * Copyright (C) 2014 Red Hat, Inc.
+ *
+ * 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Author: Matthias Clasen
+ */
+
+#include "config.h"
+#include "test-common.h"
+#include "gdk-pixbuf/gdk-pixbuf.h"
+
+#include <string.h>
+
+gboolean
+format_supported (const gchar *filename)
+{
+  const gchar *name = NULL;
+  GSList *formats, *l;
+  gboolean retval;
+  const gchar *names[] = { "png", "jpeg", "bmp", "gif", "ras",
+    "tga", "xpm", "xbm" };
+  gint i;
+
+  for (i = 0; i < G_N_ELEMENTS (names); i++)
+    {
+      if (strstr (filename, names[i]))
+        {
+          name = names[i];
+          break;
+        }
+    }
+  if (name == NULL)
+    return FALSE;
+
+  retval = FALSE;
+  formats = gdk_pixbuf_get_formats ();
+  for (l = formats; l; l = l->next)
+    {
+      GdkPixbufFormat *format = l->data;
+
+      if (g_str_equal (gdk_pixbuf_format_get_name (format), name))
+        {
+          retval = TRUE;
+          break;
+        }
+    }
+  g_slist_free (formats);
+
+  return retval;
+}
diff --git a/tests/test-common.h b/tests/test-common.h
new file mode 100644
index 0000000..32ff35a
--- /dev/null
+++ b/tests/test-common.h
@@ -0,0 +1,33 @@
+/* -*- Mode: C; c-basic-offset: 2; -*- */
+/* GdkPixbuf library - test loaders
+ *
+ * Copyright (C) 2014 Red Hat, Inc.
+ *
+ * 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Author: Matthias Clasen
+ */
+
+#ifndef __TEST_COMMON_H__
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+gboolean format_supported (const gchar *filename);
+
+G_END_DECLS
+
+#endif  /* __TEST_COMMON_H__ */


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