projects
/
ccan
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'master' of ozlabs.org:ccan
[ccan]
/
ccan
/
tap
/
tap.c
diff --git
a/ccan/tap/tap.c
b/ccan/tap/tap.c
index 0eaec9a5f852827d879553cfd50cd8bdf252f2c6..7c01e140d5c206c475957f439b47eb3462fff994 100644
(file)
--- a/
ccan/tap/tap.c
+++ b/
ccan/tap/tap.c
@@
-23,10
+23,7
@@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
-/* FIXME: The real fix is an asprintf module. */
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE 1
-#endif
+#include "config.h"
#include <ctype.h>
#include <stdarg.h>
#include <stdio.h>
#include <ctype.h>
#include <stdarg.h>
#include <stdio.h>
@@
-42,14
+39,19
@@
static unsigned int test_count = 0; /* Number of tests that have been run */
static unsigned int e_tests = 0; /* Expected number of tests to run */
static unsigned int failures = 0; /* Number of tests that failed */
static char *todo_msg = NULL;
static unsigned int e_tests = 0; /* Expected number of tests to run */
static unsigned int failures = 0; /* Number of tests that failed */
static char *todo_msg = NULL;
-static char *todo_msg_fixed = "libtap malloc issue";
+static c
onst c
har *todo_msg_fixed = "libtap malloc issue";
static int todo = 0;
static int test_died = 0;
static int test_pid;
/* Encapsulate the pthread code in a conditional. In the absence of
static int todo = 0;
static int test_died = 0;
static int test_pid;
/* Encapsulate the pthread code in a conditional. In the absence of
- libpthread the code does nothing */
-#ifdef HAVE_LIBPTHREAD
+ libpthread the code does nothing.
+
+ If you have multiple threads calling ok() etc. at the same time you would
+ need this, but in that case your test numbers will be random and I'm not
+ sure it makes sense. --RR
+*/
+#ifdef WANT_PTHREAD
#include <pthread.h>
static pthread_mutex_t M = PTHREAD_MUTEX_INITIALIZER;
# define LOCK pthread_mutex_lock(&M)
#include <pthread.h>
static pthread_mutex_t M = PTHREAD_MUTEX_INITIALIZER;
# define LOCK pthread_mutex_lock(&M)
@@
-68,7
+70,7
@@
_expected_tests(unsigned int tests)
}
static void
}
static void
-diagv(char *fmt, va_list ap)
+diagv(c
onst c
har *fmt, va_list ap)
{
fputs("# ", stdout);
vfprintf(stdout, fmt, ap);
{
fputs("# ", stdout);
vfprintf(stdout, fmt, ap);
@@
-76,7
+78,7
@@
diagv(char *fmt, va_list ap)
}
static void
}
static void
-_diag(char *fmt, ...)
+_diag(c
onst c
har *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
{
va_list ap;
va_start(ap, fmt);
@@
-92,8
+94,8
@@
_diag(char *fmt, ...)
* test_comment -- a comment to print afterwards, may be NULL
*/
unsigned int
* test_comment -- a comment to print afterwards, may be NULL
*/
unsigned int
-_gen_result(int ok, const char *func, c
har *file, unsigned int line,
- char *test_name, ...)
+_gen_result(int ok, const char *func, c
onst char *file, unsigned int line,
+ c
onst c
har *test_name, ...)
{
va_list ap;
char *local_test_name = NULL;
{
va_list ap;
char *local_test_name = NULL;
@@
-118,7
+120,8
@@
_gen_result(int ok, const char *func, char *file, unsigned int line,
if(local_test_name) {
name_is_digits = 1;
for(c = local_test_name; *c != '\0'; c++) {
if(local_test_name) {
name_is_digits = 1;
for(c = local_test_name; *c != '\0'; c++) {
- if(!isdigit(*c) && !isspace(*c)) {
+ if(!isdigit((unsigned char)*c)
+ && !isspace((unsigned char)*c)) {
name_is_digits = 0;
break;
}
name_is_digits = 0;
break;
}
@@
-172,13
+175,16
@@
_gen_result(int ok, const char *func, char *file, unsigned int line,
printf("\n");
if(!ok)
printf("\n");
if(!ok)
- _diag(" Failed %stest (%s:%s() at line %d)",
+ _diag(" Failed %stest (%s:%s() at line %d)",
todo ? "(TODO) " : "", file, func, line);
free(local_test_name);
UNLOCK;
todo ? "(TODO) " : "", file, func, line);
free(local_test_name);
UNLOCK;
+ if (!ok && tap_fail_callback)
+ tap_fail_callback();
+
/* We only care (when testing) that ok is positive, but here we
specifically only want to return 1 or 0 */
return ok ? 1 : 0;
/* We only care (when testing) that ok is positive, but here we
specifically only want to return 1 or 0 */
return ok ? 1 : 0;
@@
-230,7
+236,7
@@
_cleanup(void)
_diag("Looks like you planned %d tests but only ran %d.",
e_tests, test_count);
if(failures) {
_diag("Looks like you planned %d tests but only ran %d.",
e_tests, test_count);
if(failures) {
- _diag("Looks like you failed %d tests of %d run.",
+ _diag("Looks like you failed %d tests of %d run.",
failures, test_count);
}
UNLOCK;
failures, test_count);
}
UNLOCK;
@@
-238,7
+244,7
@@
_cleanup(void)
}
if(failures)
}
if(failures)
- _diag("Looks like you failed %d tests of %d.",
+ _diag("Looks like you failed %d tests of %d.",
failures, test_count);
UNLOCK;
failures, test_count);
UNLOCK;
@@
-258,9
+264,9
@@
_tap_init(void)
atexit(_cleanup);
/* stdout needs to be unbuffered so that the output appears
atexit(_cleanup);
/* stdout needs to be unbuffered so that the output appears
- in the same place relative to stderr output as it does
+ in the same place relative to stderr output as it does
with Test::Harness */
with Test::Harness */
-
setbuf(stdout, 0);
+
//
setbuf(stdout, 0);
run_once = 1;
}
}
run_once = 1;
}
}
@@
-293,7
+299,7
@@
plan_no_plan(void)
* Note that the plan is to skip all tests
*/
void
* Note that the plan is to skip all tests
*/
void
-plan_skip_all(char *reason)
+plan_skip_all(c
onst c
har *reason)
{
LOCK;
{
LOCK;
@@
-345,7
+351,7
@@
plan_tests(unsigned int tests)
}
void
}
void
-diag(char *fmt, ...)
+diag(c
onst c
har *fmt, ...)
{
va_list ap;
{
va_list ap;
@@
-359,7
+365,7
@@
diag(char *fmt, ...)
}
void
}
void
-skip(unsigned int n, char *fmt, ...)
+skip(unsigned int n, c
onst c
har *fmt, ...)
{
va_list ap;
char *skip_msg;
{
va_list ap;
char *skip_msg;
@@
-373,8
+379,8
@@
skip(unsigned int n, char *fmt, ...)
while(n-- > 0) {
test_count++;
while(n-- > 0) {
test_count++;
- printf("ok %d # skip %s\n", test_count,
- skip_msg != NULL ?
+ printf("ok %d # skip %s\n", test_count,
+ skip_msg != NULL ?
skip_msg : "libtap():malloc() failed");
}
skip_msg : "libtap():malloc() failed");
}
@@
-384,7
+390,7
@@
skip(unsigned int n, char *fmt, ...)
}
void
}
void
-todo_start(char *fmt, ...)
+todo_start(c
onst c
har *fmt, ...)
{
va_list ap;
{
va_list ap;
@@
-433,7
+439,7
@@
exit_status(void)
return r;
}
return r;
}
- /* Return the number of tests that failed + the number of tests
+ /* Return the number of tests that failed + the number of tests
that weren't run */
r = failures + e_tests - test_count;
UNLOCK;
that weren't run */
r = failures + e_tests - test_count;
UNLOCK;