X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/blobdiff_plain/e7eb3a2744aa45179daea235800753d3d1955338..1f389ba56131238fd101fda7fdf73304f0d84932:/libtests/test.c diff --git a/libtests/test.c b/libtests/test.c index 65a3ab0..3270d47 100644 --- a/libtests/test.c +++ b/libtests/test.c @@ -1,6 +1,6 @@ /* * This file is part of DisOrder. - * Copyright (C) 2005, 2007, 2008 Richard Kettlewell + * Copyright (C) 2005, 2007-2009 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 @@ -15,23 +15,43 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -/** @file lib/test.c @brief Library tests */ +/** @file libtests/test.c @brief Library tests */ #include "test.h" #include "version.h" #include -long long tests, errors; +/** @brief Count of tests */ +long long tests; + +/** @brief Count of errors */ +long long errors; + +/** @brief If set, first error will fail whole test */ int fail_first; + +/** @brief Verbose mode */ int verbose; + +/** @brief If set, test will return 'skipped' indicator */ int skipped; +/** @brief Count up an error + * + * If @ref fail_first is set then the test run is aborted. + */ void count_error(void) { ++errors; if(fail_first) abort(); } +/** @brief Render a string into printable ASCII + * @param s String to format + * @return Allocated copy of formatted string + * + * Replaces any non-ASCII characters with a hex escape. + */ const char *format(const char *s) { struct dynstr d; int c; @@ -50,6 +70,12 @@ const char *format(const char *s) { return d.vec; } +/** @brief Format a UTF-32 string into hex + * @param s String to format + * @return Allocated copy of formatted string + * + * Returns the hex codes of @p s separated by spaces. + */ const char *format_utf32(const uint32_t *s) { struct dynstr d; uint32_t c; @@ -64,6 +90,10 @@ const char *format_utf32(const uint32_t *s) { return d.vec; } +/** @brief Convert a string of hex codes to a UTF-32 string + * @param s String of hex codes, separated by spaces + * @return Allocated string, 0-terminated + */ uint32_t *ucs4parse(const char *s) { struct dynstr_ucs4 d; char *e; @@ -72,13 +102,19 @@ uint32_t *ucs4parse(const char *s) { while(*s) { errno = 0; dynstr_ucs4_append(&d, strtoul(s, &e, 0)); - if(errno) fatal(errno, "strtoul (%s)", s); + if(errno) + disorder_fatal(errno, "strtoul (%s)", s); s = e; } dynstr_ucs4_terminate(&d); return d.vec; } +/** @brief Format a string like asprintf() + * @param fmt Format string, per printf(3) + * @param ... Arguments + * @return Formatted string or null pointer on error + */ const char *do_printf(const char *fmt, ...) { va_list ap; char *s; @@ -92,8 +128,13 @@ const char *do_printf(const char *fmt, ...) { return s; } +/** @brief Jump buffer for exitfn() testing */ jmp_buf fatal_env; +/** @brief exitfn() callback for testing + * @param rc Value to return from setjmp() + * Jumps to @ref fatal_env + */ void test_exitfn(int rc) { assert(rc != 0); longjmp(fatal_env, rc); @@ -120,6 +161,10 @@ static void help(void) { exit(0); } +/** @brief Standard test program initialization + * @param argc Argument count + * @param argv Arguments + */ void test_init(int argc, char **argv) { int n;