]> begriffs open source - libtap/blob - tap.h
Really test output, dont just demo it. Add make check command.
[libtap] / tap.h
1 #ifndef __TAP_H__\r
2 #define __TAP_H__\r
3
4 #include <stdio.h>
5 #include <stdlib.h>
6 \r
7 #define NO_PLAN          -1\r
8 #define ok(...)          ok_at_loc(__FILE__, __LINE__, __VA_ARGS__, NULL)
9 #define pass(...)        ok(1, ## __VA_ARGS__)
10 #define fail(...)        ok(0, ## __VA_ARGS__)
11 #define is(...)          is_at_loc(__FILE__, __LINE__, __VA_ARGS__, NULL)
12 #define isnt(...)        isnt_at_loc(__FILE__, __LINE__, __VA_ARGS__, NULL)
13 #define cmp_ok(...)      cmp_ok_at_loc(__FILE__, __LINE__, __VA_ARGS__, NULL)
14 \r
15 void    plan            (int tests);\r
16 int     ok_at_loc       (const char *file, int line, int test, const char *fmt,
17                          ...);
18 int     diag            (const char *fmt, ...);\r
19 int     note            (const char *fmt, ...);\r
20 int     exit_status     (void);\r
21 void    skippy          (int n, const char *fmt, ...);
22 void    ctodo           (int ignore, const char *fmt, ...);
23 void    cendtodo        (void);
24 int     is_at_loc       (const char *file, int line, const char *got,
25                          const char *expected, const char *fmt, ...);
26 int     isnt_at_loc     (const char *file, int line, const char *got,
27                          const char *expected, const char *fmt, ...);
28 int     cmp_ok_at_loc   (const char *file, int line, int a, const char *op,
29                          int b, const char *fmt, ...);
30
31 #ifdef _WIN32
32 #define like(...)   skippy(1, "like is not implemented on MSWin32")
33 #define unlike(...) like()
34 #else
35 #define like(...)   like_at_loc(1, __FILE__, __LINE__, __VA_ARGS__, NULL)
36 #define unlike(...) like_at_loc(0, __FILE__, __LINE__, __VA_ARGS__, NULL)
37 int     like_at_loc     (int for_match, const char *file, int line,
38                          const char *got, const char *expected,
39                          const char *fmt, ...);
40 #endif
41
42 #define skip(test, ...)  do {if (test) {skippy(__VA_ARGS__, NULL); break;}
43 #define endskip          } while (0)
44
45 #define todo(...)        ctodo(0, ## __VA_ARGS__, NULL)
46 #define endtodo          cendtodo()
47
48 #define dies_ok(code, ...)  dies_ok_common(code, 1, ## __VA_ARGS__)\r
49 #define lives_ok(code, ...) dies_ok_common(code, 0, ## __VA_ARGS__)
50
51 #ifdef _WIN32
52 #define dies_ok_common(...) \
53     skippy(1, "Death detection is not supported on MSWin32")\r
54 #else\r
55 #include <unistd.h>
56 #include <sys/types.h>
57 #include <sys/wait.h>
58 int tap_test_died (int status);
59 #define dies_ok_common(code, for_death, ...)                \\r
60     do {                                                    \\r
61         tap_test_died(1);                                   \\r
62         int cpid = fork();                                  \\r
63         switch (cpid) {                                     \\r
64         case -1:                                            \\r
65             perror("fork error");                           \\r
66             exit(EXIT_FAILURE);                             \\r
67         case 0: /* child  */                                \\r
68             close(1); close(2);                             \\r
69             code                                            \\r
70             tap_test_died(0);                               \\r
71             exit(EXIT_SUCCESS);                             \\r
72         }                                                   \\r
73         if (waitpid(cpid, NULL, 0) < 0) {                   \\r
74             perror("waitpid error");                        \\r
75             exit(EXIT_FAILURE);                             \\r
76         }                                                   \\r
77         int it_died = tap_test_died(0);                     \\r
78         if (!it_died) {code}                                \\r
79         ok(for_death ? it_died : !it_died, ## __VA_ARGS__); \\r
80     } while (0)\r
81 #endif
82 #endif\r