X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Ftest.c;h=258517e76a19b13818d9b6eb0f79260197b78e4f;hp=b39d22140b09f189b39a7bc40f2ce3da5c947f83;hb=b111819a3d4c8dea01efe2c12ef21689ea0c21ed;hpb=5c35a542079457f2f5bcb9f367d6c449a2879822 diff --git a/src/test.c b/src/test.c index b39d221..258517e 100644 --- a/src/test.c +++ b/src/test.c @@ -1,8 +1,6 @@ -/* - * Copyright (C) 1995-2005, Index Data ApS +/* This file is part of the YAZ toolkit. + * Copyright (C) Index Data * See the file LICENSE for details. - * - * $Id: test.c,v 1.9 2006-07-07 06:59:49 adam Exp $ */ /** \file test.c @@ -26,11 +24,13 @@ static FILE *test_fout = 0; /* can't use '= stdout' on some systems */ static int test_total = 0; static int test_failed = 0; +static int test_todo = 0; static int test_verbose = 1; static const char *test_prog = 0; -static int log_tests = 0; +static int log_tests = 0; +static int test_stop = 0; -static FILE *get_file() +static FILE *get_file(void) { if (test_fout) return test_fout; @@ -75,11 +75,17 @@ void yaz_check_init1(int *argc_p, char ***argv_p) test_verbose = atoi(argv[i]); continue; } + else if (i < argc && !strcmp(suf, "stop")) + { + test_stop = 1; + continue; + } else if (!strcmp(suf, "help")) { - fprintf(stderr, + fprintf(stderr, "--test-help help\n" "--test-file fname output to fname\n" + "--test-stop stop at first failing test\n" "--test-verbose level verbose level\n" " 0=Quiet. Only exit code tells what's wrong\n" " 1=Report+Summary only if tests fail.\n" @@ -96,7 +102,7 @@ void yaz_check_init1(int *argc_p, char ***argv_p) fprintf(stderr, "Use --test-help for more info\n"); exit(1); } - + } break; } @@ -111,28 +117,44 @@ void yaz_check_init1(int *argc_p, char ***argv_p) void yaz_check_init_log(const char *argv0) { char logfilename[2048]; - log_tests = 1; + log_tests = 1; sprintf(logfilename,"%s.log", progname(argv0) ); - unlink(logfilename); yaz_log_init_file(logfilename); yaz_log_trunc(); } +void yaz_check_inc_todo(void) +{ + test_todo++; +} + void yaz_check_term1(void) { /* summary */ if (test_failed) { - if (test_verbose >= 1) - fprintf(get_file(), "%d out of %d tests failed for program %s\n", + if (test_verbose >= 1) { + if (test_todo) + fprintf(get_file(), "%d out of %d tests failed for program %s" + " (%d TODO's remaining)\n", + test_failed, test_total, test_prog,test_todo); + else + fprintf(get_file(), "%d out of %d tests failed for program %s\n", test_failed, test_total, test_prog); + } } else { - if (test_verbose >= 2) - fprintf(get_file(), "%d tests passed for program %s\n", + if (test_verbose >= 2) { + if (test_todo) + fprintf(get_file(), "%d tests passed for program %s" + " (%d TODO's remaining)\n", + test_total, test_prog,test_todo); + else + fprintf(get_file(), "%d tests passed for program %s\n", test_total, test_prog); + } } if (test_fout) fclose(test_fout); @@ -145,15 +167,15 @@ void yaz_check_eq1(int type, const char *file, int line, const char *left, const char *right, int lval, int rval) { char formstr[2048]; - - if (type == YAZ_TEST_TYPE_OK) + + if (type == YAZ_TEST_TYPE_OK) sprintf(formstr, "%.500s == %.500s ", left, right); else sprintf(formstr, "%.500s != %.500s\n %d != %d", left, right, lval,rval); yaz_check_print1(type, file, line, formstr); } -void yaz_check_print1(int type, const char *file, int line, +void yaz_check_print1(int type, const char *file, int line, const char *expr) { const char *msg = "unknown"; @@ -176,13 +198,17 @@ void yaz_check_print1(int type, const char *file, int line, } if (printit) { - fprintf(get_file(), "%s:%d %s: ", file, line, msg); + fprintf(get_file(), "%s:%d: %s: ", file, line, msg); fprintf(get_file(), "%s\n", expr); } if (log_tests) { yaz_log(YLOG_LOG, "%s:%d %s: ", file, line, msg); - yaz_log(YLOG_LOG, "%s\n", expr); + yaz_log(YLOG_LOG, "%s", expr); + } + if ( type == YAZ_TEST_TYPE_FAIL && test_stop ) + { + exit(1); } } @@ -195,6 +221,7 @@ int yaz_test_get_verbosity() /* * Local variables: * c-basic-offset: 4 + * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab