[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 1/2] i18n: Add simple tests.
From: |
Ben Pfaff |
Subject: |
[PATCH 1/2] i18n: Add simple tests. |
Date: |
Tue, 21 Sep 2010 22:19:38 -0700 |
---
src/libpspp/i18n.c | 36 ++++++++++++++++------------------
tests/atlocal.in | 1 +
tests/automake.mk | 7 +++++-
tests/libpspp/i18n-test.c | 46 +++++++++++++++++++++++++++++++++++++++++++++
tests/libpspp/i18n.at | 44 +++++++++++++++++++++++++++++++++++++++++++
5 files changed, 114 insertions(+), 20 deletions(-)
create mode 100644 tests/libpspp/i18n-test.c
create mode 100644 tests/libpspp/i18n.at
diff --git a/src/libpspp/i18n.c b/src/libpspp/i18n.c
index 60dc693..6cb721a 100644
--- a/src/libpspp/i18n.c
+++ b/src/libpspp/i18n.c
@@ -15,31 +15,29 @@
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include <config.h>
-#include <xalloc.h>
+
+#include "libpspp/i18n.h"
+
#include <assert.h>
+#include <errno.h>
+#include <iconv.h>
+#include <langinfo.h>
+#include <libintl.h>
#include <locale.h>
-#include <stdlib.h>
#include <stdio.h>
+#include <stdlib.h>
#include <string.h>
-#include <libintl.h>
-#include <iconv.h>
-#include <errno.h>
-#include <relocatable.h>
-#include "assertion.h"
-#include "hmapx.h"
-#include "hash-functions.h"
-#include "pool.h"
-
-#include "i18n.h"
-#include "version.h"
+#include "libpspp/assertion.h"
+#include "libpspp/hmapx.h"
+#include "libpspp/hash-functions.h"
+#include "libpspp/pool.h"
+#include "libpspp/version.h"
-#include <localcharset.h>
-#include "xstrndup.h"
-
-#if HAVE_NL_LANGINFO
-#include <langinfo.h>
-#endif
+#include "gl/localcharset.h"
+#include "gl/xalloc.h"
+#include "gl/relocatable.h"
+#include "gl/xstrndup.h"
struct converter
{
diff --git a/tests/atlocal.in b/tests/atlocal.in
index ecfd2d7..cd61f44 100644
--- a/tests/atlocal.in
+++ b/tests/atlocal.in
@@ -3,3 +3,4 @@ PERL='@PERL@'
CHARSETALIASDIR="$abs_top_builddir/gl"
export CHARSETALIASDIR
WITH_PERL_MODULE='@WITH_PERL_MODULE@'
+host='@host@'
diff --git a/tests/automake.mk b/tests/automake.mk
index f64a669..a27e4d3 100644
--- a/tests/automake.mk
+++ b/tests/automake.mk
@@ -169,6 +169,7 @@ check_PROGRAMS += \
$(nodist_TESTS) \
tests/data/datasheet-test \
tests/formats/inexactify \
+ tests/libpspp/i18n-test \
tests/libpspp/sparse-xarray-test \
tests/output/render-test
@@ -219,6 +220,9 @@ tests_libpspp_hmapx_test_SOURCES = \
tests_libpspp_hmapx_test_LDADD = gl/libgl.la $(LIBINTL)
tests_libpspp_hmapx_test_CPPFLAGS = $(AM_CPPFLAGS) -DASSERT_LEVEL=10
+tests_libpspp_i18n_test_SOURCES = tests/libpspp/i18n-test.c
+tests_libpspp_i18n_test_LDADD = src/libpspp/libpspp.la gl/libgl.la $(LIBINTL)
+
tests_libpspp_abt_test_SOURCES = \
src/libpspp/abt.c \
src/libpspp/abt.h \
@@ -434,6 +438,7 @@ TESTSUITE_AT = \
tests/language/xforms/compute.at \
tests/language/xforms/count.at \
tests/language/xforms/recode.at \
+ tests/libpspp/i18n.at \
tests/math/moments.at \
tests/output/render.at \
tests/output/charts.at \
@@ -451,7 +456,7 @@ $(srcdir)/tests/testsuite.at: tests/testsuite.in Makefile
CHECK_LOCAL += tests_check
tests_check: tests/atconfig tests/atlocal $(TESTSUITE)
- $(SHELL) '$(TESTSUITE)' -C tests
AUTOTEST_PATH=tests/output:src/ui/terminal $(TESTSUITEFLAGS)
+ $(SHELL) '$(TESTSUITE)' -C tests
AUTOTEST_PATH=tests/libpspp:tests/output:src/ui/terminal $(TESTSUITEFLAGS)
CLEAN_LOCAL += tests_clean
tests_clean:
diff --git a/tests/libpspp/i18n-test.c b/tests/libpspp/i18n-test.c
new file mode 100644
index 0000000..f2bead9
--- /dev/null
+++ b/tests/libpspp/i18n-test.c
@@ -0,0 +1,46 @@
+/* PSPP - a program for statistical analysis.
+ Copyright (C) 2010 Free Software Foundation, 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 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 <stdio.h>
+#include <stdlib.h>
+
+#include "libpspp/i18n.h"
+
+int
+main (int argc, char *argv[])
+{
+ char *s;
+
+ if (argc != 4)
+ {
+ fprintf (stderr,
+ "usage: %s FROM TO STRING\n"
+ "where FROM is the source encoding,\n"
+ " TO is the target encoding,\n"
+ " and STRING is the text to recode.\n",
+ argv[0]);
+ return EXIT_FAILURE;
+ }
+
+ i18n_init ();
+ s = recode_string (argv[2], argv[1], argv[3], -1);
+ puts (s);
+ free (s);
+
+ return 0;
+}
diff --git a/tests/libpspp/i18n.at b/tests/libpspp/i18n.at
new file mode 100644
index 0000000..c845519
--- /dev/null
+++ b/tests/libpspp/i18n.at
@@ -0,0 +1,44 @@
+AT_BANNER([i18n routines])
+
+# CHECK_I18N([TITLE], [FROM-CODING], [TO-CODING], [FROM-TEXT], [TO-TEXT])
+#
+# Converts FROM-TEXT from FROM-CODING to TO-CODING and checks that the result
+# is TO-TEXT. The "printf" program is applied to both FROM-TEXT and TO-TEXT
+# to allow for backslash-escapes. (Be aware that hex escapes are not portable;
+# use octal escapes instead.)
+m4_define([CHECK_I18N],
+ [AT_SETUP([convert $1])
+ AT_KEYWORDS([i18n])
+
+ dnl Skip the test if this host doesn't know the source and target encodings.
+ AT_CHECK(
+ [case "$host" in
+ *-*-linux* | *-*-*-gnu*)
+ dnl GNU/Linux always has the encodings we want. We can't ask
+ dnl config.charset about them because it has a special case here
+ dnl too and won't tell us.
+ ;;
+ *)
+ $SHELL $top_srcdir/gl/config.charset "$host" | grep '$2' || exit 77
+ $SHELL $top_srcdir/gl/config.charset "$host" | grep '$3' || exit 77
+ ;;
+ esac
+ ], [0], [ignore])
+ AT_CHECK_UNQUOTED([i18n-test '$2' '$3' `printf '$4'`], [0], [`printf '$5'`
+])
+ AT_CLEANUP])
+
+CHECK_I18N([reflexively], [ASCII], [ASCII], [abc], [abc])
+CHECK_I18N([without any change], [ASCII], [UTF-8], [abc], [abc])
+
+CHECK_I18N([from ISO-8859-1 to UTF-8], [ISO-8859-1], [UTF-8],
+ [\242], [\302\242])
+CHECK_I18N([from UTF-8 to ISO-8859-1], [UTF-8], [ISO-8859-1],
+ [\302\242], [\242])
+
+# 0xc0 == 0300 is invalid in UTF-8
+CHECK_I18N([invalid UTF-8 to ISO-8859-1], [UTF-8], [ISO-8859-1],
+ [xy\300z], [xy?z])
+# 0xc2 == 0302 is the first byte of a 2-byte UTF-8 sequence
+CHECK_I18N([truncated UTF-8 to ISO-8559-1], [UTF-8], [ISO-8859-1],
+ [xy\302], [xy?])
--
1.7.1
- [PATCH 1/2] i18n: Add simple tests.,
Ben Pfaff <=