summaryrefslogtreecommitdiff
path: root/unittest/mytap
diff options
context:
space:
mode:
authorVladislav Vaintroub <vvaintroub@mysql.com>2009-11-25 01:50:10 +0100
committerVladislav Vaintroub <vvaintroub@mysql.com>2009-11-25 01:50:10 +0100
commita3e391dd3c5550b39eab3bd8964061c5bbc6a6b2 (patch)
tree3e8610a140fd90a32965b4a7851c798a353fa14f /unittest/mytap
parentafe4ee1e17edd8edbdc2d142da8ada747e759ea9 (diff)
parentbd6467805a4d232718589f8ba0f2b84493843aba (diff)
downloadmariadb-git-a3e391dd3c5550b39eab3bd8964061c5bbc6a6b2.tar.gz
merge
Diffstat (limited to 'unittest/mytap')
-rw-r--r--unittest/mytap/Makefile.am5
-rw-r--r--unittest/mytap/tap.c27
-rw-r--r--unittest/mytap/tap.h49
3 files changed, 69 insertions, 12 deletions
diff --git a/unittest/mytap/Makefile.am b/unittest/mytap/Makefile.am
index 8feefb134bb..d36dc25d0b5 100644
--- a/unittest/mytap/Makefile.am
+++ b/unittest/mytap/Makefile.am
@@ -13,7 +13,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include -I$(srcdir)
+AM_CPPFLAGS = -I$(top_srcdir)/include
noinst_LIBRARIES = libmytap.a
noinst_HEADERS = tap.h
@@ -23,6 +23,3 @@ libmytap_a_SOURCES = tap.c
EXTRA_DIST = CMakeLists.txt
SUBDIRS = . t
-
-# Don't update the files from bitkeeper
-%::SCCS/s.%
diff --git a/unittest/mytap/tap.c b/unittest/mytap/tap.c
index 34a3b933eba..a7552b15eed 100644
--- a/unittest/mytap/tap.c
+++ b/unittest/mytap/tap.c
@@ -19,7 +19,7 @@
#include "tap.h"
-#include "my_config.h"
+#include "my_global.h"
#include <stdlib.h>
#include <stdarg.h>
@@ -27,6 +27,16 @@
#include <string.h>
#include <signal.h>
+/*
+ Visual Studio 2003 does not know vsnprintf but knows _vsnprintf.
+ We don't put this #define in config-win.h because we prefer
+ my_vsnprintf everywhere instead, except when linking with libmysys
+ is not desirable - the case here.
+*/
+#if defined(_MSC_VER) && ( _MSC_VER == 1310 )
+#define vsnprintf _vsnprintf
+#endif
+
/**
@defgroup MyTAP_Internal MyTAP Internals
@@ -150,9 +160,9 @@ static signal_entry install_signal[]= {
{ SIGILL, handle_core_signal },
{ SIGABRT, handle_core_signal },
{ SIGFPE, handle_core_signal },
- { SIGSEGV, handle_core_signal },
+ { SIGSEGV, handle_core_signal }
#ifdef SIGBUS
- { SIGBUS, handle_core_signal }
+ , { SIGBUS, handle_core_signal }
#endif
#ifdef SIGXCPU
, { SIGXCPU, handle_core_signal }
@@ -168,13 +178,22 @@ static signal_entry install_signal[]= {
#endif
};
+int skip_big_tests= 1;
+
void
plan(int count)
{
+ char *config= getenv("MYTAP_CONFIG");
+ size_t i;
+
+ if (config)
+ skip_big_tests= strcmp(config, "big");
+
+ setvbuf(tapout, 0, _IONBF, 0); /* provide output at once */
/*
Install signal handler
*/
- size_t i;
+
for (i= 0; i < sizeof(install_signal)/sizeof(*install_signal); ++i)
signal(install_signal[i].signo, install_signal[i].handler);
diff --git a/unittest/mytap/tap.h b/unittest/mytap/tap.h
index 31ec47d1ef2..d8f617c88fb 100644
--- a/unittest/mytap/tap.h
+++ b/unittest/mytap/tap.h
@@ -62,6 +62,24 @@ extern "C" {
#endif
/**
+ Defines whether "big" tests should be skipped.
+
+ This variable is set by plan() function unless MYTAP_CONFIG environment
+ variable is set to the string "big". It is supposed to be used as
+
+ @code
+ if (skip_big_tests) {
+ skip(1, "Big test skipped");
+ } else {
+ ok(life_universe_and_everything() == 42, "The answer is CORRECT");
+ }
+ @endcode
+
+ @see SKIP_BIG_TESTS
+*/
+extern int skip_big_tests;
+
+/**
@defgroup MyTAP_API MyTAP API
MySQL support for performing unit tests according to TAP.
@@ -81,10 +99,15 @@ extern "C" {
that generate a core, so if you want to override these signals, do
it <em>after</em> you have called the plan() function.
- @param count The planned number of tests to run.
+ It will also set skip_big_tests variable if MYTAP_CONFIG environment
+ variable is defined.
+
+ @see skip_big_tests
+
+ @param count The planned number of tests to run.
*/
-void plan(int count);
+void plan(int const count);
/**
@@ -103,7 +126,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)));
@@ -135,7 +158,7 @@ void ok(int pass, char const *fmt, ...)
@param reason A reason for skipping the tests
*/
-void skip(int how_many, char const *reason, ...)
+void skip(int how_many, char const *const reason, ...)
__attribute__((format(printf,2,3)));
@@ -161,6 +184,24 @@ void skip(int how_many, char const *reason, ...)
/**
+ Helper macro to skip a group of "big" tests. It is used in the following
+ manner:
+
+ @code
+ SKIP_BIG_TESTS(1)
+ {
+ ok(life_universe_and_everything() == 42, "The answer is CORRECT");
+ }
+ @endcode
+
+ @see skip_big_tests
+ */
+
+#define SKIP_BIG_TESTS(COUNT) \
+ if (skip_big_tests) skip((COUNT), "big test"); else
+
+
+/**
Print a diagnostics message.
@param fmt Diagnostics message in printf() format.