#include #include #include #include #include #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; }