[dia] [unit test] Initial version of dia-svg test
- From: Hans Breuer <hans src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [dia] [unit test] Initial version of dia-svg test
- Date: Sun, 16 Mar 2014 15:25:30 +0000 (UTC)
commit c6ba5da078968114c959abb2519302a87cc208e3
Author: Hans Breuer <hans breuer org>
Date: Sun Mar 16 12:41:09 2014 +0100
[unit test] Initial version of dia-svg test
tests/Makefile.am | 3 +
tests/test-svg.c | 136 +++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 139 insertions(+), 0 deletions(-)
---
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 47bb6d4..9e32f28 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -33,3 +33,6 @@ TEST_PROGS += objects
objects_SOURCES = test-objects.c
objects_LDADD = $(progs_ldadd)
+TEST_PROGS += testsvg
+testsvg_SOURCES = test-svg.c
+testsvg_LDADD = $(progs_ldadd)
diff --git a/tests/test-svg.c b/tests/test-svg.c
new file mode 100644
index 0000000..6acc80d
--- /dev/null
+++ b/tests/test-svg.c
@@ -0,0 +1,136 @@
+/* test-svg.c -- Unit test for Dia svg parsing helpers
+ * Copyright (C) 2008 Hans Breuer
+ *
+ * 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.
+ */
+
+#include <config.h>
+
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+
+#undef G_DISABLE_ASSERT
+#undef G_LOG_DOMAIN
+#define G_LOG_DOMAIN "Dia"
+
+#include <glib.h>
+#include <glib-object.h>
+
+#include "dialib.h"
+#include "geometry.h"
+#include "dia_svg.h"
+
+typedef struct _PathData
+{
+ int num_points; /* >1 to be valid */
+ int num_splits;
+ gboolean closed;
+ const char* data;
+} PathData;
+
+PathData _test_path[] = {
+ { 2, 0, FALSE, "M0,0L1,1" },
+ { 3, 0, TRUE, "M0,0L1,1z" },
+ { 3, 1, TRUE, "M0,0L1,1z z" }, /* ignore extra closing */
+ { 3, 0, FALSE, "M0,0 0,1 1,1" }, /* implicit line-to */
+ { 4, 0, TRUE, "M0,0 0,1 1,1z" },
+ /* 5: variations of elements (from path-variations.svg) */
+ { 5, 0, TRUE, "M0,0 20,0 20,20 0,20 0,0z"},
+ { 5, 0, TRUE, "M0,0h20v20h-20z"},
+ { 5, 0, FALSE, "M20,20L40,20 40,40 20,40 20,20"},
+ { 5, 0, TRUE, "m180,20 20,0 0,20 -20,0 z"}, /* relative move does not matter */
+ { 10, 1, TRUE, "M20,20 80,20 80,80 20,80z M40,40 40,60 60,60 60,40 40,40z"}, /* with hole */
+ { 10, 1, TRUE, "M20,20 80,20 80,80 20,80z M40,40 60,40 60,60 40,60 40,40z"}, /* changed direction */
+ /* 11: variations from test-boundingbox */
+ { 2, 0, FALSE, "M0.0,2.0C0.0,0.0,2.0,0.0,2.0,2.0"},
+ { 2, 0, FALSE, "M-2.0,2.0 C-2.0,0.0, 0.0,0.0, 0.0,2.0"},
+ { 3, 0, FALSE, "M1.0,2.0 C 0.0,2.0 0.0,0.0 1.0,0.0\n2.0,0.0 2.0,2.0 1.0,2.0\n"},
+ { 5, 0, FALSE, "M C0,0, 0,2, 1,1 C2,0, 2,2, 1,1 C0,0, 2,0, 1,1 C0,2, 2,2, 1,1"},
+ /* 15: paths-data-01-t.svg */
+ { 6, 1, FALSE, "M 210 130 C 145 130 110 80 110 80 S 75 25 10 25 m 0 105 c 65 0 100 -50 100 -50 s 35 -55
100 -55" },
+ /* 16: paths-data-02-t.svg */
+ { 5, 1, TRUE, "M15 20 Q30 120 130 30 M 180 80 q -75 -100 -163 -60z" },
+ { 4, 0, TRUE, "M208 168Q258 268 308 168T258 118Q128 88 208 168z" },
+ { 7, 0, TRUE, "M240 296q25-100 47 0t47 0t47 0t47 0t47 0z" },
+ /* 19: paths-data-03-f.svg */
+ { 6, 0, TRUE, "M25 70 A40 40 0 1 0 25 69 Z" }, /* number of points depends on the coordinates */
+ /* 20: paths-data-06-t.svg */
+ { 9, 0, TRUE, "M240 56H270V86H300V116H330V146H240V56Z"},
+ /* 21: paths-data-06-t.svg */
+ { 9, 0, TRUE, "m240 190h30v30h30v30h30v30h-90v-90z" },
+ /* xxx: other */
+ { 0,-1, TRUE, "M0,0Z"}, /* Dia does not want this */
+/*
+ { 2, 0, FALSE, ""},
+ { 4, 0, TRUE, ""},
+ */
+};
+
+static void
+_check_one_path (const PathData* pd)
+{
+ const gchar* p;
+ gchar* unparsed = NULL;
+ gboolean closed = FALSE;
+ Point current_point = {0.0, 0.0};
+ GArray* points = g_array_new(FALSE, FALSE, sizeof(BezPoint));
+ int calls = 0;
+ g_array_set_size(points, 0);
+
+ p = pd->data;
+ while (dia_svg_parse_path (points, p, &unparsed, &closed, ¤t_point))
+ {
+ calls++;
+ if (!unparsed)
+ break;
+ p = unparsed;
+ }
+
+ g_assert (pd->num_points == points->len);
+ g_assert (pd->num_splits == calls - 1);
+ g_assert (pd->closed == closed);
+
+ g_array_free (points, TRUE);
+}
+static void
+_add_path_tests (void)
+{
+ int i, num = sizeof(_test_path)/sizeof(PathData);
+
+ for (i = 0; i < num; ++i)
+ {
+ gchar *testpath = g_strdup_printf ("/Dia/svg/test-path%d", i);
+
+ g_test_add_data_func (testpath, &_test_path[i], _check_one_path);
+
+ g_free (testpath);
+ }
+}
+int
+main (int argc, char** argv)
+{
+ int ret;
+
+ g_test_init (&argc, &argv, NULL);
+
+ libdia_init (DIA_MESSAGE_STDERR);
+
+ _add_path_tests ();
+
+ ret = g_test_run ();
+
+ return ret;
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]