X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/blobdiff_plain/7affb40735592998dc047f216b48f9b771e4df1a..5f624baebe43889bb2810720cb9cc6d0812f49cb:/libtests/t-unicode.c?ds=inline diff --git a/libtests/t-unicode.c b/libtests/t-unicode.c index f50454e..6ab20f5 100644 --- a/libtests/t-unicode.c +++ b/libtests/t-unicode.c @@ -1,48 +1,46 @@ /* * 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 + * 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 2 of the License, or + * 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. - * + * + * 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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA + * along with this program. If not, see . */ #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.0.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)) { @@ -81,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]) { @@ -96,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 */ @@ -181,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); }