chiark / gitweb /
plugins/tracklength-gstreamer.c: Rewrite to use `GstDiscoverer'.
[disorder] / libtests / t-unicode.c
index ba6bba5f6a15ad5fddc02b5d54559352c507b8e9..6ab20f5d8270bb258d515ab3ece0c95dc05c1e9c 100644 (file)
@@ -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
  */
 #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)) {
@@ -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);
 }