[gimp] app: Add GIMP core unit testing framework and a simple first test
- From: Martin Nordholts <martinn src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gimp] app: Add GIMP core unit testing framework and a simple first test
- Date: Sat, 5 Sep 2009 14:01:44 +0000 (UTC)
commit 14aa5314af3a096e63cef5eb42934106d0a74451
Author: Martin Nordholts <martinn src gnome org>
Date: Sat Sep 5 15:52:01 2009 +0200
app: Add GIMP core unit testing framework and a simple first test
Enable us to have regression testing by introducing a core testing
framework that uses the GLib JUnit-like test library.
Do this by adding a new subdir app/tests that will contain all our
tests (it contains one trivial test already). Also add app/tests.[ch]
with a new function gimp_init_for_testing() so that test cases can
easily setup the core object system.
app/Makefile.am | 3 +
app/tests.c | 47 ++++++++++++++
app/tests.h | 23 +++++++
app/tests/.gitignore | 3 +
app/tests/Makefile.am | 74 ++++++++++++++++++++++
app/tests/test-layer-grouping.c | 129 +++++++++++++++++++++++++++++++++++++++
configure.ac | 1 +
7 files changed, 280 insertions(+), 0 deletions(-)
---
diff --git a/app/Makefile.am b/app/Makefile.am
index 6e606ce..e41e495 100644
--- a/app/Makefile.am
+++ b/app/Makefile.am
@@ -11,6 +11,7 @@ libgimpthumb = $(top_builddir)/libgimpthumb/libgimpthumb-$(GIMP_API_VERSION).la
# Sort this by architectural depenendencies
SUBDIRS = \
+ tests \
gui \
menus \
actions \
@@ -51,6 +52,8 @@ app_sources = \
sanity.h \
signals.c \
signals.h \
+ tests.c \
+ tests.h \
unique.c \
unique.h \
units.c \
diff --git a/app/tests.c b/app/tests.c
new file mode 100644
index 0000000..89ae96a
--- /dev/null
+++ b/app/tests.c
@@ -0,0 +1,47 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 2009 Martin Nordholts
+ *
+ * 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 3 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 <glib-object.h>
+
+#include "core/core-types.h"
+
+#include "core/gimp.h"
+
+#include "tests.h"
+#include "units.h"
+
+
+/**
+ * gimp_init_for_testing:
+ *
+ * Initialize the GIMP object system for unit testing. This is a
+ * selected subset of the initialization happning in app_run().
+ **/
+Gimp *
+gimp_init_for_testing (void)
+{
+ Gimp *gimp = gimp_new ("Unit Tested GIMP", NULL, TRUE, TRUE, TRUE, TRUE,
+ FALSE, TRUE, TRUE, FALSE);
+
+ units_init (gimp);
+
+ gimp_load_config (gimp, NULL, NULL);
+
+ return gimp;
+}
diff --git a/app/tests.h b/app/tests.h
new file mode 100644
index 0000000..19ea5be
--- /dev/null
+++ b/app/tests.h
@@ -0,0 +1,23 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 2009 Martin Nordholts
+ *
+ * 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 3 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/>.
+ */
+
+#ifndef __TESTS_H__
+#define __TESTS_H__
+
+Gimp * gimp_init_for_testing (void);
+
+#endif /* __TESTS_H__ */
diff --git a/app/tests/.gitignore b/app/tests/.gitignore
new file mode 100644
index 0000000..f53478a
--- /dev/null
+++ b/app/tests/.gitignore
@@ -0,0 +1,3 @@
+/.deps
+/Makefile
+/Makefile.in
diff --git a/app/tests/Makefile.am b/app/tests/Makefile.am
new file mode 100644
index 0000000..55512f2
--- /dev/null
+++ b/app/tests/Makefile.am
@@ -0,0 +1,74 @@
+TESTS = test-layer-grouping
+EXTRA_PROGRAMS = $(TESTS)
+
+test_layer_grouping_SOURCES = \
+ test-layer-grouping.c
+
+libgimpbase = $(top_builddir)/libgimpbase/libgimpbase-$(GIMP_API_VERSION).la
+libgimpconfig = $(top_builddir)/libgimpconfig/libgimpconfig-$(GIMP_API_VERSION).la
+libgimpcolor = $(top_builddir)/libgimpcolor/libgimpcolor-$(GIMP_API_VERSION).la
+libgimpmath = $(top_builddir)/libgimpmath/libgimpmath-$(GIMP_API_VERSION).la
+libgimpmodule = $(top_builddir)/libgimpmodule/libgimpmodule-$(GIMP_API_VERSION).la
+libgimpwidgets = $(top_builddir)/libgimpwidgets/libgimpwidgets-$(GIMP_API_VERSION).la
+libgimpthumb = $(top_builddir)/libgimpthumb/libgimpthumb-$(GIMP_API_VERSION).la
+
+AM_CPPFLAGS = \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/app \
+ $(PANGOCAIRO_CFLAGS) \
+ $(GDK_PIXBUF_CFLAGS) \
+ $(GEGL_CFLAGS) \
+ -I$(includedir)
+
+# We need this due to circular dependencies, see more detailed
+# comments about it in app/Makefile.am
+AM_LDFLAGS = \
+ -u $(SYMPREFIX)xcf_init \
+ -u $(SYMPREFIX)internal_procs_init \
+ -u $(SYMPREFIX)gimp_plug_in_manager_restore \
+ -u $(SYMPREFIX)gimp_pdb_compat_param_spec \
+ -u $(SYMPREFIX)plug_in_icc_profile_apply_rgb \
+ -u $(SYMPREFIX)gimp_image_map_config_get_type \
+ -u $(SYMPREFIX)gimp_vectors_undo_get_type \
+ -u $(SYMPREFIX)gimp_vectors_mod_undo_get_type \
+ -u $(SYMPREFIX)gimp_vectors_prop_undo_get_type \
+ -u $(SYMPREFIX)gimp_curve_map_pixels
+
+LDADD = \
+ $(top_builddir)/app/display/libappdisplay.a \
+ $(top_builddir)/app/widgets/widgets-enums.o \
+ $(top_builddir)/app/xcf/libappxcf.a \
+ $(top_builddir)/app/pdb/libappinternal-procs.a \
+ $(top_builddir)/app/pdb/libapppdb.a \
+ $(top_builddir)/app/plug-in/libappplug-in.a \
+ $(top_builddir)/app/vectors/libappvectors.a \
+ $(top_builddir)/app/core/libappcore.a \
+ $(top_builddir)/app/file/libappfile.a \
+ $(top_builddir)/app/text/libapptext.a \
+ $(top_builddir)/app/paint/libapppaint.a \
+ $(top_builddir)/app/composite/libappcomposite.a \
+ $(top_builddir)/app/gegl/libappgegl.a \
+ $(top_builddir)/app/config/libappconfig.a \
+ $(top_builddir)/app/display/libappdisplay.a \
+ $(top_builddir)/app/paint-funcs/libapppaint-funcs.a \
+ $(top_builddir)/app/base/libappbase.a \
+ $(top_builddir)/app/gimp-log.o \
+ $(top_builddir)/app/tests.o \
+ $(top_builddir)/app/units.o \
+ $(libgimpconfig) \
+ $(libgimpmath) \
+ $(libgimpthumb) \
+ $(libgimpcolor) \
+ $(libgimpmodule) \
+ $(libgimpbase) \
+ $(GIMPICONRC) \
+ $(GDK_PIXBUF_LIBS) \
+ $(FREETYPE_LIBS) \
+ $(FONTCONFIG_LIBS) \
+ $(PANGOCAIRO_LIBS) \
+ $(CAIRO_LIBS) \
+ $(GEGL_LIBS) \
+ $(GLIB_LIBS) \
+ $(INTLLIBS) \
+ $(RT_LIBS)
+
diff --git a/app/tests/test-layer-grouping.c b/app/tests/test-layer-grouping.c
new file mode 100644
index 0000000..ee5acc4
--- /dev/null
+++ b/app/tests/test-layer-grouping.c
@@ -0,0 +1,129 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 2009 Martin Nordholts
+ *
+ * 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 3 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 <gegl.h>
+
+#include "core/core-types.h"
+
+#include "core/gimp.h"
+#include "core/gimpimage.h"
+#include "core/gimplayer.h"
+
+#include "tests.h"
+
+
+#define GIMP_TEST_IMAGE_SIZE 100
+
+
+typedef struct
+{
+ GimpImage *image;
+} GimpTestFixture;
+
+
+static void gimp_test_image_setup (GimpTestFixture *fixture,
+ gconstpointer data);
+static void gimp_test_image_teardown (GimpTestFixture *fixture,
+ gconstpointer data);
+static void gimp_test_add_layer (GimpTestFixture *fixture,
+ gconstpointer data);
+
+
+static Gimp *gimp = NULL;
+
+
+int main(int argc, char **argv)
+{
+ g_type_init ();
+ g_test_init (&argc, &argv, NULL);
+
+ /* We share the same application instance across all tests */
+ gimp = gimp_init_for_testing ();
+
+ /* Setup the tests */
+ g_test_add ("/gimp-layer-grouping/add-layer",
+ GimpTestFixture,
+ NULL,
+ gimp_test_image_setup,
+ gimp_test_add_layer,
+ gimp_test_image_teardown);
+
+ /* Run the tests and return status */
+ return g_test_run ();
+}
+
+/**
+ * gimp_test_image_setup:
+ * @fixture:
+ * @data:
+ *
+ * Test fixture setup for a single image.
+ **/
+static void
+gimp_test_image_setup (GimpTestFixture *fixture,
+ gconstpointer data)
+{
+ fixture->image = gimp_image_new (gimp,
+ GIMP_TEST_IMAGE_SIZE,
+ GIMP_TEST_IMAGE_SIZE,
+ GIMP_RGB);
+}
+
+/**
+ * gimp_test_image_teardown:
+ * @fixture:
+ * @data:
+ *
+ * Test fixture teardown for a single image.
+ **/
+static void
+gimp_test_image_teardown (GimpTestFixture *fixture,
+ gconstpointer data)
+{
+ g_object_unref (fixture->image);
+}
+
+/**
+ * gimp_test_add_layer:
+ * @fixture:
+ * @data:
+ *
+ * Super basic test that makes sure we can add a layer.
+ **/
+static void
+gimp_test_add_layer (GimpTestFixture *fixture,
+ gconstpointer data)
+{
+ GimpImage *image = fixture->image;
+ GimpLayer *layer = gimp_layer_new (image,
+ GIMP_TEST_IMAGE_SIZE,
+ GIMP_TEST_IMAGE_SIZE,
+ GIMP_RGBA_IMAGE,
+ "Test Layer",
+ 1.0,
+ GIMP_NORMAL_MODE);
+
+ g_assert_cmpint (gimp_image_get_n_layers (image), ==, 0);
+
+ gimp_image_add_layer (image,
+ layer,
+ GIMP_IMAGE_ACTIVE_PARENT,
+ 0,
+ FALSE);
+
+ g_assert_cmpint (gimp_image_get_n_layers (image), ==, 1);
+}
diff --git a/configure.ac b/configure.ac
index 33de068..c9bab59 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1979,6 +1979,7 @@ app/tools/Makefile
app/vectors/Makefile
app/widgets/Makefile
app/xcf/Makefile
+app/tests/Makefile
plug-ins/Makefile
plug-ins/color-rotate/Makefile
plug-ins/color-rotate/images/Makefile
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]