X-Git-Url: https://pd.if.org/git/?p=ctap;a=blobdiff_plain;f=prove.c;h=afb5a73e2c5a16742562a00e1697f413c2582d07;hp=a0931c4c71e88484bcfc8826d7f214549536c8b2;hb=fdcc11b029058dd4555a8c04a1cac4f6ca58bc81;hpb=0e1d3c29ca96ab38343972209ed6e8c73719bb03 diff --git a/prove.c b/prove.c index a0931c4..afb5a73 100644 --- a/prove.c +++ b/prove.c @@ -2,6 +2,7 @@ #include #include #include +#include #include #include #include @@ -72,6 +73,9 @@ int runone(struct testrun *run) { close(1); /* close stdout */ dup(pipefd[1]); /* set stdout to the write end of the pipe */ execlp(run->name, run->name, NULL); + /* only gets here if exec failed */ + printf("Bail Out! exec %s failed: %s\n", run->name, strerror(errno)); + exit(EXIT_FAILURE); } close(pipefd[1]); @@ -120,6 +124,15 @@ int runone(struct testrun *run) { int skip = 0; int pass = 0; + run->ran++; + + if (run->interactive) { + backup(written); + written = printf("%d/%d", run->ran, run->plan); + fflush(stdout); + } + + /* if the "not" match fails, the test passed */ pass = match[1].rm_so == -1; @@ -133,26 +146,26 @@ int runone(struct testrun *run) { } /* check for diagnostics */ - if (test != run->ran+1) { + if (test != run->ran) { fprintf(stderr, "expected test %d, got %d\n", run->ran+1, test); } - run->ran++; - - if (pass || todo) { + /* pass, todo, or skip are all pass */ + if (pass || todo || skip) { run->pass++; + } else { + run->fail++; } - if (todo) { - if (pass) { - run->todo_pass++; - } + if (todo && pass) { + run->todo_pass++; } + if (skip) { run->skip++; } - if (!pass) { + if (!pass && !todo) { struct result *r; r = malloc(sizeof *r); @@ -168,11 +181,6 @@ int runone(struct testrun *run) { /* push test number onto fail list */ } - if (run->interactive) { - backup(written); - written = printf("%d/%d", run->ran, run->plan); - fflush(stdout); - } } else if (rmatch(&diagnostic, line, match)) { @@ -280,7 +288,6 @@ int main(int ac, char *av[]) { for (i=optind; i 0 ) printf("not "); - printf("ok\n"); + if (run.bailout) { + printf("Bail out!\n"); + } else { + if (run.fail > 0 ) printf("not "); + printf("ok\n"); + } } runs[i-optind] = run; } if (summary) { - printf("ran: %d/%d, pass: %d, fail: %d, %.2f%% ok\n", + printf("ran: %d/%d, pass: %d, fail: %d, skip: %d", total.ran, total.plan, total.pass, total.fail, - 100.0*(double)total.pass/(double)total.plan + total.skip ); + if (total.plan > 0) { + printf(", %.2f%% ok", + 100.0*(double)total.pass/(double)total.plan + ); + } + printf("\n"); }