X-Git-Url: http://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Ftap%2Ftap.h;h=6a4c5e0520f683ff3e217644cb0d69b4e076ac62;hp=1dad63650e40a2c26f62f99d90964e6c9bedcd93;hb=bf57898eae29d70a166bf2df5c84601729f039ac;hpb=ac0e87d7ecf790c187ce3c5d837b971fdd016b57 diff --git a/ccan/tap/tap.h b/ccan/tap/tap.h index 1dad6365..6a4c5e05 100644 --- a/ccan/tap/tap.h +++ b/ccan/tap/tap.h @@ -23,6 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ +#include /** * plan_tests - announce the number of tests you plan to run @@ -52,7 +53,7 @@ void plan_tests(unsigned int tests); * file name, line number, and the expression itself. * * Example: - * ok1(init_subsystem() == 1); + * ok1(somefunc() == 1); */ # define ok1(e) ((e) ? \ _gen_result(1, __func__, __FILE__, __LINE__, "%s", #e) : \ @@ -68,8 +69,8 @@ void plan_tests(unsigned int tests); * than simply the expression itself. * * Example: - * ok1(init_subsystem() == 1); - * ok(init_subsystem() == 0, "Second initialization should fail"); + * ok1(somefunc() == 1); + * ok(somefunc() == 0, "Second somefunc() should fail"); */ # define ok(e, ...) ((e) ? \ _gen_result(1, __func__, __FILE__, __LINE__, \ @@ -85,11 +86,11 @@ void plan_tests(unsigned int tests); * branch and fail() in another. * * Example: - * x = do_something(); - * if (!checkable(x) || check_value(x)) - * pass("do_something() returned a valid value"); + * int x = somefunc(); + * if (x > 0) + * pass("somefunc() returned a valid value"); * else - * fail("do_something() returned an invalid value"); + * fail("somefunc() returned an invalid value"); */ # define pass(...) ok(1, __VA_ARGS__) @@ -116,16 +117,8 @@ void plan_tests(unsigned int tests); # define skip_end } while(0) -#ifndef PRINTF_ATTRIBUTE -#ifdef __GNUC__ -#define PRINTF_ATTRIBUTE(a1, a2) __attribute__ ((format (__printf__, a1, a2))) -#else -#define PRINTF_ATTRIBUTE(a1, a2) -#endif -#endif - unsigned int _gen_result(int, const char *, const char *, unsigned int, - const char *, ...) PRINTF_ATTRIBUTE(5, 6); + const char *, ...) PRINTF_FMT(5, 6); /** * diag - print a diagnostic message (use instead of printf/fprintf) @@ -137,7 +130,7 @@ unsigned int _gen_result(int, const char *, const char *, unsigned int, * Example: * diag("Now running complex tests"); */ -void diag(const char *fmt, ...) PRINTF_ATTRIBUTE(1, 2); +void diag(const char *fmt, ...) PRINTF_FMT(1, 2); /** * skip - print a diagnostic message (use instead of printf/fprintf) @@ -155,12 +148,12 @@ void diag(const char *fmt, ...) PRINTF_ATTRIBUTE(1, 2); * * Example: * #ifdef HAVE_SOME_FEATURE - * ok1(test_some_feature()); + * ok1(somefunc()); * #else * skip(1, "Don't have SOME_FEATURE"); * #endif */ -void skip(unsigned int n, const char *fmt, ...) PRINTF_ATTRIBUTE(2, 3); +void skip(unsigned int n, const char *fmt, ...) PRINTF_FMT(2, 3); /** * todo_start - mark tests that you expect to fail. @@ -181,11 +174,16 @@ void skip(unsigned int n, const char *fmt, ...) PRINTF_ATTRIBUTE(2, 3); * put tests in your testing script (always a good idea). * * Example: + * static bool dwim(void) + * { + * return false; // NYI + * } + * ... * todo_start("dwim() not returning true yet"); * ok(dwim(), "Did what the user wanted"); * todo_end(); */ -void todo_start(const char *fmt, ...) PRINTF_ATTRIBUTE(1, 2); +void todo_start(const char *fmt, ...) PRINTF_FMT(1, 2); /** * todo_end - end of tests you expect to fail. @@ -220,7 +218,7 @@ int exit_status(void); * Example: * plan_no_plan(); * while (random() % 2) - * ok1(some_test()); + * ok1(somefunc()); * exit(exit_status()); */ void plan_no_plan(void); @@ -235,12 +233,21 @@ void plan_no_plan(void); * in the running kernel) use plan_skip_all() instead of plan_tests(). * * Example: - * if (!have_some_feature) { - * plan_skip_all("Need some_feature support"); - * exit(exit_status()); - * } + * #ifndef HAVE_SOME_FEATURE + * plan_skip_all("Need SOME_FEATURE support"); + * exit(exit_status()); + * #else * plan_tests(13); + * ... + * #endif */ void plan_skip_all(const char *reason); +/** + * tap_fail_callback - function to call when we fail + * + * This can be used to ease debugging, or exit on the first failure. + */ +void (*tap_fail_callback)(void); + #endif /* C99 or gcc */