diff options
Diffstat (limited to 'test/translit.c')
-rw-r--r-- | test/translit.c | 94 |
1 files changed, 94 insertions, 0 deletions
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; +} + |