[lasem] tests: add rendering of the test suite file to the unit tests.
- From: Emmanuel Pacaud <emmanuel src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [lasem] tests: add rendering of the test suite file to the unit tests.
- Date: Wed, 3 Nov 2010 22:12:54 +0000 (UTC)
commit fb59f4b1a22a3f3c3ae478d933abcc6b164486b7
Author: Emmanuel Pacaud <emmanuel gnome org>
Date: Wed Nov 3 23:12:18 2010 +0100
tests: add rendering of the test suite file to the unit tests.
tests/.gitignore | 1 +
tests/Makefile.am | 6 ++-
tests/suite.c | 115 +++++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 121 insertions(+), 1 deletions(-)
---
diff --git a/tests/.gitignore b/tests/.gitignore
index 857664f..159e1c4 100644
--- a/tests/.gitignore
+++ b/tests/.gitignore
@@ -1,2 +1,3 @@
dom
+suite
lsm-test
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 38293e4..2e04d94 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -12,9 +12,13 @@ noinst_PROGRAMS = lsm-test
lsm_test_SOURCES = lsmtest.c
lsm_test_LDADD = $(test_progs_ldadd)
-TEST_PROGS += dom
+TEST_PROGS += dom suite
noinst_PROGRAMS += $(TEST_PROGS)
dom_SOURCES = dom.c
dom_LDADD = $(test_progs_ldadd)
+
+suite_SOURCES = suite.c
+suite_LDADD = $(test_progs_ldadd)
+suite_CFLAGS = -DSUITE_DATA_DIRECTORY="\"$(top_srcdir)/tests/data\""
diff --git a/tests/suite.c b/tests/suite.c
new file mode 100644
index 0000000..aeeec8d
--- /dev/null
+++ b/tests/suite.c
@@ -0,0 +1,115 @@
+#include <glib.h>
+#include <string.h>
+#include <lsmdomparser.h>
+
+static GSList *
+build_file_list (const char *path, GRegex *filename_regex)
+{
+ GSList *files = NULL;
+ GDir *directory;
+ GError *error = NULL;
+ const char *entry;
+ char *filename;
+
+ directory = g_dir_open (path, 0, &error);
+ g_assert (error == NULL);
+
+ do {
+ entry = g_dir_read_name (directory);
+ if (entry != NULL &&
+ strstr (entry, "ignore-") != entry &&
+ strcmp (entry, "images") != 0)
+ {
+ filename = g_build_filename (path, entry, NULL);
+
+ if (g_file_test (filename, G_FILE_TEST_IS_DIR))
+ files = g_slist_concat (files, build_file_list (filename, filename_regex));
+ else if (g_file_test (filename, G_FILE_TEST_IS_REGULAR) &&
+ g_regex_match (filename_regex, filename, 0, NULL)) {
+ files = g_slist_prepend (files, g_strdup (filename));
+ }
+
+ g_free (filename);
+ }
+ } while (entry != NULL);
+
+ g_dir_close (directory);
+
+ return files;
+}
+
+static void
+render_test (gconstpointer user_data)
+{
+ const char *filename = user_data;
+ LsmDomDocument *document;
+ LsmDomView *view;
+ LsmBox viewport;
+ unsigned int width, height;
+ cairo_t *cairo;
+ cairo_surface_t *surface;
+
+ document = lsm_dom_document_new_from_path (filename, NULL);
+ g_assert (LSM_IS_DOM_DOCUMENT (document));
+
+ view = lsm_dom_document_create_view (document);
+ g_assert (LSM_IS_DOM_VIEW (view));
+
+ viewport.x = 0.0;
+ viewport.y = 0.0;
+ viewport.width = 480.0;
+ viewport.height = 360.0;
+
+ lsm_dom_document_set_resolution (document, 96);
+ lsm_dom_document_set_viewport_px (document, &viewport);
+ lsm_dom_view_get_size_pixels (LSM_DOM_VIEW (view), &width, &height);
+
+ surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height);
+ cairo = cairo_create (surface);
+ cairo_surface_destroy (surface);
+
+ lsm_dom_view_render (LSM_DOM_VIEW (view), cairo, 1, 1);
+
+ g_assert (cairo_status (cairo) == CAIRO_STATUS_SUCCESS);
+
+ cairo_destroy (cairo);
+
+ g_object_unref (view);
+ g_object_unref (document);
+}
+
+static void
+add_render_tests (gpointer element, gpointer user_data)
+{
+ const char *filename = element;
+ char *test_path = g_strdup_printf ("/render/%s", (char *) element + sizeof (SUITE_DATA_DIRECTORY));
+
+ g_test_add_data_func (test_path, filename, render_test);
+
+ g_free (test_path);
+}
+
+int
+main (int argc, char *argv[])
+{
+ GRegex *filename_regex;
+ GSList *files;
+ int i;
+ int result;
+
+ g_type_init ();
+
+ g_test_init (&argc, &argv, NULL);
+
+ filename_regex = g_regex_new ("\\.(svg|mml)$", 0, 0, NULL);
+ files = build_file_list (SUITE_DATA_DIRECTORY, filename_regex);
+ g_slist_foreach (files, add_render_tests, NULL);
+
+ result = g_test_run();
+
+ g_slist_foreach (files, (GFunc) g_free, NULL);
+ g_slist_free (files);
+ g_regex_unref (filename_regex);
+
+ return result;
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]