diff options
author | Tor Didriksen <tor.didriksen@sun.com> | 2010-06-10 13:15:35 +0200 |
---|---|---|
committer | Tor Didriksen <tor.didriksen@sun.com> | 2010-06-10 13:15:35 +0200 |
commit | a24df71e95fb6379a3ba86322c9941a82b8d6527 (patch) | |
tree | cbbeaa1e16e995fa7ff3358a1069ebb16c27870d /unittest | |
parent | 34ceaa6a3d030c25500e7e39e95ca92d0f1448b4 (diff) | |
download | mariadb-git-a24df71e95fb6379a3ba86322c9941a82b8d6527.tar.gz |
Backport of Bug#53303 mytap tests should always have a plan()
The bug was caused by buffered output. Flushing resolved it.
We still recommend to allways call plan().
Also fix some compile warnings (formal parameter different from declaration)
unittest/examples/Makefile.am:
Omit core-t, since it will always fail.
unittest/examples/no_plan-t.c:
Comment that we recommend calling plan(NO_PLAN)
unittest/mytap/tap.c:
Use the named constant NO_PLAN
Flush all output.
unittest/mytap/tap.h:
Change documentation for the plan() function.
Diffstat (limited to 'unittest')
-rw-r--r-- | unittest/examples/Makefile.am | 3 | ||||
-rw-r--r-- | unittest/examples/no_plan-t.c | 11 | ||||
-rw-r--r-- | unittest/mytap/tap.c | 13 | ||||
-rw-r--r-- | unittest/mytap/tap.h | 13 |
4 files changed, 26 insertions, 14 deletions
diff --git a/unittest/examples/Makefile.am b/unittest/examples/Makefile.am index 94032c00928..a1627a58b4e 100644 --- a/unittest/examples/Makefile.am +++ b/unittest/examples/Makefile.am @@ -20,7 +20,8 @@ AM_LDFLAGS = -L$(top_builddir)/unittest/mytap LDADD = -lmytap -noinst_PROGRAMS = simple-t skip-t todo-t skip_all-t no_plan-t core-t +# We omit core-t here, since it will always fail. +noinst_PROGRAMS = simple-t skip-t todo-t skip_all-t no_plan-t # Don't update the files from bitkeeper %::SCCS/s.% diff --git a/unittest/examples/no_plan-t.c b/unittest/examples/no_plan-t.c index 56aabd6d752..f22340ae0d1 100644 --- a/unittest/examples/no_plan-t.c +++ b/unittest/examples/no_plan-t.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2006 MySQL AB +/* Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. 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 @@ -20,14 +20,19 @@ /* Sometimes, the number of tests is not known beforehand. In those - cases, the plan can be omitted and will instead be written at the - end of the test (inside exit_status()). + cases, you should invoke plan(NO_PLAN). + The plan will be printed at the end of the test (inside exit_status()). Use this sparingly, it is a last resort: planning how many tests you are going to run will help you catch that offending case when some tests are skipped for an unknown reason. */ int main() { + /* + We recommend calling plan(NO_PLAN), but want to verify that + omitting the call works as well. + plan(NO_PLAN); + */ ok(1, " "); ok(1, " "); ok(1, " "); diff --git a/unittest/mytap/tap.c b/unittest/mytap/tap.c index 4e053e3e745..a5831f2b71d 100644 --- a/unittest/mytap/tap.c +++ b/unittest/mytap/tap.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2006 MySQL AB +/* Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. 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 @@ -40,7 +40,7 @@ @ingroup MyTAP_Internal */ -static TEST_DATA g_test = { 0, 0, 0, "" }; +static TEST_DATA g_test = { NO_PLAN, 0, 0, "" }; /** Output stream for test report message. @@ -74,6 +74,7 @@ vemit_tap(int pass, char const *fmt, va_list ap) (fmt && *fmt) ? " - " : ""); if (fmt && *fmt) vfprintf(tapout, fmt, ap); + fflush(tapout); } @@ -96,6 +97,7 @@ static void emit_dir(const char *dir, const char *why) { fprintf(tapout, " # %s %s", dir, why); + fflush(tapout); } @@ -108,6 +110,7 @@ static void emit_endl() { fprintf(tapout, "\n"); + fflush(tapout); } static void @@ -183,7 +186,10 @@ plan(int const count) break; default: if (count > 0) + { fprintf(tapout, "1..%d\n", count); + fflush(tapout); + } break; } } @@ -196,6 +202,7 @@ skip_all(char const *reason, ...) va_start(ap, reason); fprintf(tapout, "1..0 # skip "); vfprintf(tapout, reason, ap); + fflush(tapout); va_end(ap); exit(0); } @@ -218,7 +225,7 @@ ok(int const pass, char const *fmt, ...) void -skip(int how_many, char const *const fmt, ...) +skip(int how_many, char const *fmt, ...) { char reason[80]; if (fmt && *fmt) diff --git a/unittest/mytap/tap.h b/unittest/mytap/tap.h index 31ec47d1ef2..4118207ca7a 100644 --- a/unittest/mytap/tap.h +++ b/unittest/mytap/tap.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2006 MySQL AB +/* Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. 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 @@ -72,10 +72,9 @@ extern "C" { /** Set number of tests that is planned to execute. - The function also accepts the predefined constant - <code>NO_PLAN</code>. If the function is not called, it is as if - it was called with <code>NO_PLAN</code>, i.e., the test plan will - be printed after all the test lines. + The function also accepts the predefined constant <code>NO_PLAN</code>. + If invoked with this constant -- or not invoked at all -- + the test plan will be printed after all the test lines. The plan() function will install signal handlers for all signals that generate a core, so if you want to override these signals, do @@ -84,7 +83,7 @@ extern "C" { @param count The planned number of tests to run. */ -void plan(int count); +void plan(int const count); /** @@ -103,7 +102,7 @@ void plan(int count); which case nothing is printed. */ -void ok(int pass, char const *fmt, ...) +void ok(int const pass, char const *fmt, ...) __attribute__((format(printf,2,3))); |