Make the ASSERT macro a bit more reusable.
* tests/macros.h (ASSERT): Depend on ASSERT_STREAM.
(ASSERT_STREAM): Provide default of stderr.
* tests/test-dirent-safer.c: Include macros.h, using alternate
stream for assertions.
* tests/test-dup-safer.c: Likewise.
* tests/test-freopen-safer.c: Likewise.
* tests/test-getopt.c: Likewise.
* tests/test-openat-safer.c: Likewise.
* tests/test-pipe.c: Likewise.
* tests/test-popen-safer.c: Likewise.
* modules/dirent-safer-tests (Files): Include macros.h.
* modules/unistd-safer-tests (Files): Likewise.
* modules/freopen-safer-tests (Files): Likewise.
* modules/getopt-posix-tests (Files): Likewise.
* modules/openat-safer-tests (Files): Likewise.
* modules/pipe-tests (Files): Likewise.
Signed-off-by: Eric Blake <ebb9@byu.net>
+2009-12-26 Eric Blake <ebb9@byu.net>
+
+ tests: use macros.h in more places
+ * tests/macros.h (ASSERT): Depend on ASSERT_STREAM.
+ (ASSERT_STREAM): Provide default of stderr.
+ * tests/test-dirent-safer.c: Include macros.h, using alternate
+ stream for assertions.
+ * tests/test-dup-safer.c: Likewise.
+ * tests/test-freopen-safer.c: Likewise.
+ * tests/test-getopt.c: Likewise.
+ * tests/test-openat-safer.c: Likewise.
+ * tests/test-pipe.c: Likewise.
+ * tests/test-popen-safer.c: Likewise.
+ * modules/dirent-safer-tests (Files): Include macros.h.
+ * modules/unistd-safer-tests (Files): Likewise.
+ * modules/freopen-safer-tests (Files): Likewise.
+ * modules/getopt-posix-tests (Files): Likewise.
+ * modules/openat-safer-tests (Files): Likewise.
+ * modules/pipe-tests (Files): Likewise.
+
2009-12-26 Bruno Haible <bruno@clisp.org>
javacomp: Portability fix.
Files:
tests/test-dirent-safer.c
+tests/macros.h
Depends-on:
dup2
Files:
tests/test-freopen-safer.c
+tests/macros.h
Depends-on:
Files:
+tests/macros.h
tests/signature.h
tests/test-getopt.c
tests/test-getopt.h
Files:
tests/test-openat-safer.c
+tests/macros.h
Depends-on:
Files:
tests/test-pipe.sh
tests/test-pipe.c
+tests/macros.h
Depends-on:
progname
Files:
tests/test-dup-safer.c
+tests/macros.h
Depends-on:
binary-io
#include <stdio.h>
#include <stdlib.h>
+/* Define ASSERT_STREAM before including this file if ASSERT must
+ target a stream other than stderr. */
+#ifndef ASSERT_STREAM
+# define ASSERT_STREAM stderr
+#endif
+
/* ASSERT (condition);
verifies that the specified condition is fulfilled. If not, a message
- is printed to stderr and the program is terminated with an error code.
+ is printed to ASSERT_STREAM if defined (defaulting to stderr if
+ undefined) and the program is terminated with an error code.
This macro has the following properties:
- The programmer specifies the expected condition, not the failure
- On Unix platforms, the tester can debug the test program with a
debugger (provided core dumps are enabled: "ulimit -c unlimited").
- For the sake of platforms where no debugger is available (such as
- some mingw systems), an error message is printed on stderr that
- includes the source location of the ASSERT invocation.
+ some mingw systems), an error message is printed on the error
+ stream that includes the source location of the ASSERT invocation.
*/
#define ASSERT(expr) \
do \
{ \
if (!(expr)) \
{ \
- fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \
- fflush (stderr); \
+ fprintf (ASSERT_STREAM, "%s:%d: assertion failed\n", \
+ __FILE__, __LINE__); \
+ fflush (ASSERT_STREAM); \
abort (); \
} \
} \
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
-#include <stdlib.h>
#include <unistd.h>
#include "unistd-safer.h"
duplicate the original stderr. */
#define BACKUP_STDERR_FILENO 10
-static FILE *myerr;
+#define ASSERT_STREAM myerr
+#include "macros.h"
-#define ASSERT(expr) \
- do \
- { \
- if (!(expr)) \
- { \
- fprintf (myerr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \
- fflush (myerr); \
- abort (); \
- } \
- } \
- while (0)
+static FILE *myerr;
int
main (void)
#include <errno.h>
#include <stdbool.h>
#include <stdio.h>
-#include <stdlib.h>
-#include <sys/stat.h>
#include "binary-io.h"
#include "cloexec.h"
duplicate the original stderr. */
#define BACKUP_STDERR_FILENO 10
-static FILE *myerr;
+#define ASSERT_STREAM myerr
+#include "macros.h"
-#define ASSERT(expr) \
- do \
- { \
- if (!(expr)) \
- { \
- fprintf (myerr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \
- fflush (myerr); \
- abort (); \
- } \
- } \
- while (0)
+static FILE *myerr;
/* Return true if FD is open. */
static bool
#include "stdio--.h"
/* Helpers. */
-#include <stdlib.h>
#include <unistd.h>
/* This test intentionally closes stderr. So, we arrange to have fd 10
duplicate the original stderr. */
#define BACKUP_STDERR_FILENO 10
-static FILE *myerr;
+#define ASSERT_STREAM myerr
+#include "macros.h"
-#define ASSERT(expr) \
- do \
- { \
- if (!(expr)) \
- { \
- fprintf (myerr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \
- fflush (myerr); \
- abort (); \
- } \
- } \
- while (0)
+static FILE *myerr;
int
main (void)
duplicate the original stderr. */
#define BACKUP_STDERR_FILENO 10
-static FILE *myerr;
+#define ASSERT_STREAM myerr
+#include "macros.h"
-#define ASSERT(expr) \
- do \
- { \
- if (!(expr)) \
- { \
- fprintf (myerr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \
- fflush (myerr); \
- abort (); \
- } \
- } \
- while (0)
+static FILE *myerr;
#include "test-getopt.h"
#if GNULIB_GETOPT_GNU
#include <errno.h>
#include <stdio.h>
-#include <stdlib.h>
#include <sys/stat.h>
#include <unistd.h>
duplicate the original stderr. */
#define BACKUP_STDERR_FILENO 10
-static FILE *myerr;
+#define ASSERT_STREAM myerr
+#include "macros.h"
-#define ASSERT(expr) \
- do \
- { \
- if (!(expr)) \
- { \
- fprintf (myerr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \
- fflush (myerr); \
- abort (); \
- } \
- } \
- while (0)
+static FILE *myerr;
#define witness "test-openat-safer.txt"
duplicate the original stderr. */
#define BACKUP_STDERR_FILENO 10
-static FILE *myerr;
+#define ASSERT_STREAM myerr
+#include "macros.h"
-#define ASSERT(expr) \
- do \
- { \
- if (!(expr)) \
- { \
- fprintf (myerr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \
- fflush (myerr); \
- abort (); \
- } \
- } \
- while (0)
+static FILE *myerr;
/* Code executed by the child process. argv[1] = "child". */
static int
#include "stdio--.h"
/* Helpers. */
-#include <stdlib.h>
#include <sys/wait.h>
#include <unistd.h>
duplicate the original stderr. */
#define BACKUP_STDERR_FILENO 10
-static FILE *myerr;
+#define ASSERT_STREAM myerr
+#include "macros.h"
-#define ASSERT(expr) \
- do \
- { \
- if (!(expr)) \
- { \
- fprintf (myerr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \
- fflush (myerr); \
- abort (); \
- } \
- } \
- while (0)
+static FILE *myerr;
int
main (int argc, char **argv)