From 96d62832ad1428de0aa2c7efcaf0754305dc3f60 Mon Sep 17 00:00:00 2001 From: Nathan Wagner Date: Wed, 28 Mar 2012 09:56:00 -0700 Subject: [PATCH] Major rewrite to eliminate duplicate code. --- Makefile | 3 ++ ctap.c | 106 ++++++++++++++++++++++++++++++------------------------- ctap.h | 2 ++ main.c | 15 +++++--- 4 files changed, 74 insertions(+), 52 deletions(-) diff --git a/Makefile b/Makefile index 6da29d4..46d37b0 100644 --- a/Makefile +++ b/Makefile @@ -6,3 +6,6 @@ main: $(OBJS) clean: rm -rf *.o main + +test: main + @prove --exec '' ./main diff --git a/ctap.c b/ctap.c index 6238747..9bdf9f3 100644 --- a/ctap.c +++ b/ctap.c @@ -10,6 +10,15 @@ /* global variable testnum? */ static int test = 0; /* the test number */ static int planned = 0; +static int intodo = 0; + +void begin_todo(void) { + intodo = 1; +} + +void end_todo(void) { + intodo = 0; +} void plan(int tests) { test = 0; @@ -32,7 +41,7 @@ void skip_all(const char *why, ...) { printf("1..0"); if (why) { va_list args; - printf(" # skip "); + printf(" # SKIP "); va_start(args, why); vfprintf(stdout, why, args); va_end(args); @@ -40,79 +49,80 @@ void skip_all(const char *why, ...) { printf("\n"); } -void okv(int pass, const char *fmt, va_list args) { +static void vfmtline(int pass, const char *directive, const char *fmt, va_list args) { printf("%sok %d", pass ? "" : "not ", ++test); + if (fmt && !directive) { + printf(" -"); + } + if (directive) { + printf(" # %s", directive); + } if (fmt) { - printf(" # "); + printf(" "); vfprintf(stdout, fmt, args); } printf("\n"); } +#if 0 +static void fmtline(int pass, const char *info, const char *fmt, ...) { + va_list args; + + va_start(args,fmt); + vfmtline(pass, info, fmt, args); + va_end(args); +} +#endif + +void okv(int pass, const char *fmt, va_list args) { + vfmtline(pass, intodo ? "TODO" : 0, fmt, args); +} + void ok(int pass, char *fmt, ...) { va_list args; - printf("%sok %d", pass ? "" : "not ", ++test); - if (fmt) { - printf(" # "); - va_start(args, fmt); - vfprintf(stdout, fmt, args); - va_end(args); - } - printf("\n"); + va_start(args, fmt); + okv(pass, fmt, args); + va_end(args); } void ok_block(unsigned long count, int pass, const char *fmt, ...) { + va_list args; + va_list copy; + if (count == 0) { return; } - if (fmt) { - va_list args; - va_list copy; - va_start(args, fmt); - while (count--) { - va_copy(copy, args); - okv(pass, fmt, copy); - va_end(copy); - } - va_end(args); - } else { - while (count--) { - ok(pass, NULL); - } + + va_start(args, fmt); + while (count--) { + va_copy(copy, args); + okv(pass, fmt, copy); + va_end(copy); } + va_end(args); } void skip(const char *why, ...) { va_list args; - printf("ok %d # skip", ++test); - if (why) { - printf(" "); - va_start(args, why); - vfprintf(stdout, why, args); - va_end(args); - } - printf("\n"); + va_start(args, why); + vfmtline(1, "SKIP", why, args); + va_end(args); } void skip_block(unsigned long count, const char *why, ...) { - if (why) { - va_list args; - va_list copy; - va_start(args, why); - while (count--) { - va_copy(copy, args); - printf("ok %d # skip", ++test); - printf(" "); - vfprintf(stdout, why, copy); - va_end(copy); - printf("\n"); - } - va_end(args); - } else { - printf("ok %d # skip\n", ++test); + va_list args; + va_list copy; + va_start(args, why); + + while (count--) { + va_copy(copy, args); + vfmtline(1, "SKIP", why, args); + va_end(copy); } + + va_end(args); } void bail(const char *fmt, ...) { diff --git a/ctap.h b/ctap.h index 43d8087..c641d2f 100644 --- a/ctap.h +++ b/ctap.h @@ -3,6 +3,8 @@ #include +void begin_todo(void); +void end_todo(void); void plan(int tests); void plan_lazy(void); void skip_all(const char *why, ...); diff --git a/main.c b/main.c index da49aee..55fbecd 100644 --- a/main.c +++ b/main.c @@ -3,17 +3,24 @@ int main(void) { /* plan(4); */ plan_lazy(); + ok(1, "ok pass"); + + begin_todo(); ok(0, "ok fail"); + is_int(1,2,"is_int fail"); + is_double(1.0,1.2,0.0,"is_double perfect fail"); + is_string("foo", "bar", "is_string fail"); + is_double(1.0,2.0,0.5,"is_double epsilon fail"); + end_todo(); + skip("skip one"); skip_block(2, "skip 2 block"); + is_int(1,1,"is_int pass"); - is_int(1,2,"is_int fail"); is_double(1.0,1.0,0.0,"is_double perfect pass"); - is_double(1.0,1.2,0.0,"is_double perfect fail"); is_double(1.0,1.1,0.5,"is_double epsilon pass"); - is_double(1.0,2.0,0.5,"is_double epsilon fail"); is_string("foo", "foo", "is_string pass"); - is_string("foo", "bar", "is_string fail"); + return 0; } -- 2.40.0