X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/blobdiff_plain/3943e9eceb6a7fb8d93c9fa8d23422eae8aabafd..1ddfe26cfb76aac9286cc62ad1e677ad44659758:/libtests/test.c diff --git a/libtests/test.c b/libtests/test.c index d37d70f..354106b 100644 --- a/libtests/test.c +++ b/libtests/test.c @@ -2,37 +2,56 @@ * This file is part of DisOrder. * Copyright (C) 2005, 2007, 2008 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 . */ -/** @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; @@ -51,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; @@ -65,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; @@ -73,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; @@ -93,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); @@ -121,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;