summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorJohn-Mark Bell <jmb@netsurf-browser.org>2013-01-11 03:33:47 +0000
committerJohn-Mark Bell <jmb@netsurf-browser.org>2013-01-11 11:20:19 +0000
commit23deb46db03c3e7a2884a49edcf882d933315e70 (patch)
treec8d1c3bb87a616b4ce33a5a66ce26e84816f55f3 /test
parentefe52d57b2e0d1cb15ce3ccea5dd7d5e0359dae4 (diff)
downloadiconv-23deb46db03c3e7a2884a49edcf882d933315e70.tar.gz
iconv-23deb46db03c3e7a2884a49edcf882d933315e70.tar.bz2
Add proper transliteration support.
Diffstat (limited to 'test')
-rw-r--r--test/INDEX1
-rw-r--r--test/Makefile2
-rw-r--r--test/translit.c94
3 files changed, 96 insertions, 1 deletions
diff --git a/test/INDEX b/test/INDEX
index 1ab567a..9c3c013 100644
--- a/test/INDEX
+++ b/test/INDEX
@@ -3,5 +3,6 @@
# Test Description DataDir
iconv Iconv initialisation/finalisation
nullable Handling of nullable input sequences
+translit Handling of transliteration
# Regression tests
diff --git a/test/Makefile b/test/Makefile
index 89b8093..c5d298f 100644
--- a/test/Makefile
+++ b/test/Makefile
@@ -1,4 +1,4 @@
# Tests
-DIR_TEST_ITEMS := iconv:iconv.c nullable:nullable.c
+DIR_TEST_ITEMS := iconv:iconv.c nullable:nullable.c translit:translit.c
include $(NSBUILD)/Makefile.subdir
diff --git a/test/translit.c b/test/translit.c
new file mode 100644
index 0000000..8f17889
--- /dev/null
+++ b/test/translit.c
@@ -0,0 +1,94 @@
+#include <errno.h>
+#include <stdio.h>
+#include <string.h>
+
+#include <iconv/iconv.h>
+#include <iconv-internal/iconv.h>
+
+#include "testutils.h"
+
+#ifdef __riscos__
+#define ALIASES_FILE "Files.Aliases"
+#else
+#define ALIASES_FILE "Files/Aliases"
+#endif
+
+typedef struct translit_testcase {
+ const char *to_charset;
+ const char *source;
+ const char *expected;
+} translit_testcase;
+
+static const translit_testcase tests[] = {
+ { "iso-8859-1//TRANSLIT", "\xe2\x80\x93", "-" },
+ { NULL, NULL, NULL }
+};
+
+static void run_test(const translit_testcase *test)
+{
+ iconv_t cd;
+ char out[128];
+ char *inp = (char *) test->source, *outp = out;
+ size_t inlen = strlen(inp), outlen = sizeof(out);
+ size_t read;
+
+ cd = iconv_open(test->to_charset, "utf-8");
+ assert(cd != (iconv_t) -1);
+
+ read = iconv(cd, &inp, &inlen, &outp, &outlen);
+ assert(read == 0);
+
+ assert(sizeof(out) - outlen == strlen(test->expected));
+ assert(memcmp(out, test->expected, sizeof(out) - outlen) == 0);
+
+ iconv_close(cd);
+}
+
+static void run_tests(void)
+{
+ int index;
+
+ for (index = 0; tests[index].to_charset != NULL; index++) {
+ run_test(&tests[index]);
+ }
+}
+
+int main(int argc, char **argv)
+{
+ const char *ucpath;
+ int alen;
+ char aliases[4096];
+
+ UNUSED(argc);
+ UNUSED(argv);
+
+#ifdef __riscos__
+ ucpath = "Unicode:";
+#else
+ ucpath = getenv("UNICODE_DIR");
+#endif
+
+ assert(ucpath != NULL);
+
+ strncpy(aliases, ucpath, sizeof(aliases));
+ alen = strlen(aliases);
+#ifndef __riscos__
+ if (aliases[alen - 1] != '/') {
+ strncat(aliases, "/", sizeof(aliases) - alen - 1);
+ alen += 1;
+ }
+#endif
+ strncat(aliases, ALIASES_FILE, sizeof(aliases) - alen - 1);
+ aliases[sizeof(aliases) - 1] = '\0';
+
+ assert(iconv_initialise(aliases) == 1);
+
+ run_tests();
+
+ iconv_finalise();
+
+ printf("PASS\n");
+
+ return 0;
+}
+