X-Git-Url: https://git.distorted.org.uk/~mdw/disorder/blobdiff_plain/7affb40735592998dc047f216b48f9b771e4df1a..e7eb3a2744aa45179daea235800753d3d1955338:/libtests/test.h?ds=inline
diff --git a/libtests/test.h b/libtests/test.h
index 7a0ef5d..a03b5d1 100644
--- a/libtests/test.h
+++ b/libtests/test.h
@@ -2,46 +2,39 @@
* 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.h @brief Library tests */
#ifndef TEST_H
#define TEST_H
-#include
-#include "types.h"
+#include "common.h"
-#include
-#include
-#include
#include
#include
-#include
#include
#include
#include
#include
-#include
#include
#include
#include
#include
#include
#include
+#include
#include "mem.h"
#include "log.h"
@@ -73,6 +66,7 @@
extern long long tests, errors;
extern int fail_first;
extern int verbose;
+extern int skipped;
/** @brief Checks that @p expr is nonzero */
#define insist(expr) do { \
@@ -126,6 +120,21 @@ extern int verbose;
++tests; \
} while(0)
+#define check_fatal(WHAT) do { \
+ void (*const save_exitfn)(int) attribute((noreturn)) = exitfn; \
+ \
+ exitfn = test_exitfn; \
+ if(setjmp(fatal_env) == 0) { \
+ fprintf(stderr, "Expect an error:\n "); \
+ (void)(WHAT); \
+ fprintf(stderr, "\n%s:%d: %s unexpectedly returned\n", \
+ __FILE__, __LINE__, #WHAT); \
+ count_error(); \
+ } \
+ ++tests; \
+ exitfn = save_exitfn; \
+} while(0)
+
void count_error(void);
const char *format(const char *s);
const char *format_utf32(const uint32_t *s);
@@ -133,6 +142,9 @@ uint32_t *ucs4parse(const char *s);
const char *do_printf(const char *fmt, ...);
void test_init(int argc, char **argv);
+extern jmp_buf fatal_env;
+void test_exitfn(int) attribute((noreturn));
+
#define TEST(name) \
int main(int argc, char **argv) { \
test_init(argc, argv); \
@@ -140,7 +152,11 @@ void test_init(int argc, char **argv);
if(errors || verbose) \
fprintf(stderr, "test_"#name": %lld errors out of %lld tests\n", \
errors, tests); \
- return !!errors; \
+ if(errors) \
+ return 1; \
+ if(skipped) \
+ return 77; \
+ return 0; \
} \
\
struct swallow_semicolon