X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/blobdiff_plain/a2a528f2015531bd9e4b49e0eb0f1f54568ff299..5dcfc065d123f6643b12ed1766c7976e58b6941a:/libtests/t-unicode.c diff --git a/libtests/t-unicode.c b/libtests/t-unicode.c index de04e47..6ab20f5 100644 --- a/libtests/t-unicode.c +++ b/libtests/t-unicode.c @@ -1,6 +1,6 @@ /* * This file is part of DisOrder. - * Copyright (C) 2005, 2007, 2008 Richard Kettlewell + * Copyright (C) 2005, 2007-2009, 2011 Richard Kettlewell * * 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 @@ -17,30 +17,30 @@ */ #include "test.h" +#ifndef SRCDIR +# define SRCDIR "." +#endif + /** @brief Open a Unicode test file */ static FILE *open_unicode_test(const char *path) { - const char *base; FILE *fp; char buffer[1024]; - int w; - if((base = strrchr(path, '/'))) - ++base; - else - base = path; - if(!(fp = fopen(base, "r"))) { - snprintf(buffer, sizeof buffer, - "wget http://www.unicode.org/Public/5.1.0/ucd/%s", path); - if((w = system(buffer))) - fatal(0, "%s: %s", buffer, wstat(w)); - if(chmod(base, 0444) < 0) - fatal(errno, "chmod %s", base); - if(!(fp = fopen(base, "r"))) - fatal(errno, "%s", base); - } + snprintf(buffer, sizeof buffer, "gzip -dc " SRCDIR "/%s.gz", path); + if(!(fp = popen(buffer, "r"))) + disorder_fatal(errno, "decompressing %s", path); return fp; } +/** @brief Close a Unicode test file */ +static void close_unicode_test(const char *path, FILE *fp) +{ + int w; + + if((w = pclose(fp))) + disorder_fatal(0, "decompressing %s: %s", path, wstat(w)); +} + /** @brief Run breaking tests for utf32_grapheme_boundary() etc */ static void breaktest(const char *path, int (*breakfn)(const uint32_t *, size_t, size_t)) { @@ -79,7 +79,7 @@ static void breaktest(const char *path, buffer[bn++] = strtoul(lp, &lp, 16); continue; } - fatal(0, "%s:%d: evil line: %s", path, lineno, l); + disorder_fatal(0, "%s:%d: evil line: %s", path, lineno, l); } for(n = 0; n <= bn; ++n) { if(breakfn(buffer, bn, n) != break_allowed[n]) { @@ -94,7 +94,7 @@ static void breaktest(const char *path, } xfree(l); } - fclose(fp); + close_unicode_test(path, fp); } /** @brief Tests for @ref lib/unicode.h */ @@ -179,9 +179,9 @@ static void test_unicode(void) { } xfree(l); } - fclose(fp); - breaktest("auxiliary/GraphemeBreakTest.txt", utf32_is_grapheme_boundary); - breaktest("auxiliary/WordBreakTest.txt", utf32_is_word_boundary); + close_unicode_test("NormalizationTest.txt", fp); + breaktest("GraphemeBreakTest.txt", utf32_is_grapheme_boundary); + breaktest("WordBreakTest.txt", utf32_is_word_boundary); insist(utf32_combining_class(0x40000) == 0); insist(utf32_combining_class(0xE0000) == 0); }