X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/4a201b7ceece70d2bc461ac48c8b746a36d07243..cc63d7b267be4c20633a0be7db63b3d88030bee6:/src/xbt/cunit.c diff --git a/src/xbt/cunit.c b/src/xbt/cunit.c index 8b9204c0d5..08f52bb112 100644 --- a/src/xbt/cunit.c +++ b/src/xbt/cunit.c @@ -1,6 +1,7 @@ /* cunit - A little C Unit facility */ -/* Copyright (c) 2005 Martin Quinson. All rights reserved. */ +/* Copyright (c) 2005-2014. The SimGrid Team. + * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ @@ -9,7 +10,7 @@ #include "portable.h" -#include "xbt/sysdep.h" /* vasprintf */ +#include "xbt/sysdep.h" /* bvprintf */ #include "xbt/cunit.h" #include "xbt/dynar.h" @@ -71,7 +72,7 @@ static void xbt_test_test_dump(xbt_test_test_t test) test, test->file, test->line, test->title, test->failed ? "failed" : "not failed"); xbt_dynar_foreach(test->logs, it_log, log) - xbt_test_log_dump(log); + xbt_test_log_dump(log); } else fprintf(stderr, " test=NULL\n"); } @@ -100,7 +101,7 @@ static void xbt_test_unit_dump(xbt_test_unit_t unit) (unit->enabled ? "enabled" : "disabled")); if (unit->enabled) xbt_dynar_foreach(unit->tests, it_test, test) - xbt_test_test_dump(test); + xbt_test_test_dump(test); } else { fprintf(stderr, " unit=NULL\n"); } @@ -159,15 +160,15 @@ xbt_test_suite_t xbt_test_suite_new(const char *name, const char *fmt, ...) { xbt_test_suite_t suite = xbt_new0(struct s_xbt_test_suite, 1); va_list ap; - int vres; if (!_xbt_test_suites) _xbt_test_suites = - xbt_dynar_new(sizeof(xbt_test_suite_t), xbt_test_suite_free); + xbt_dynar_new(sizeof(xbt_test_suite_t), xbt_test_suite_free); va_start(ap, fmt); - vres = vasprintf(&suite->title, fmt, ap); - suite->units = xbt_dynar_new(sizeof(xbt_test_unit_t), &xbt_test_unit_free); + suite->title = bvprintf(fmt, ap); + suite->units = + xbt_dynar_new(sizeof(xbt_test_unit_t), &xbt_test_unit_free); va_end(ap); suite->name = name; suite->enabled = 1; @@ -186,15 +187,14 @@ xbt_test_suite_t xbt_test_suite_by_name(const char *name, const char *fmt, char *bufname; va_list ap; - int vres; if (_xbt_test_suites) xbt_dynar_foreach(_xbt_test_suites, it_suite, suite) - if (!strcmp(suite->name, name)) + if (!strcmp(suite->name, name)) return suite; va_start(ap, fmt); - vres = vasprintf(&bufname, fmt, ap); + bufname = bvprintf(fmt, ap); va_end(ap); suite = xbt_test_suite_new(name, bufname, NULL); free(bufname); @@ -212,7 +212,7 @@ void xbt_test_suite_dump(xbt_test_suite_t suite) suite->enabled ? "enabled" : "disabled"); if (suite->enabled) xbt_dynar_foreach(suite->units, it_unit, unit) - xbt_test_unit_dump(unit); + xbt_test_unit_dump(unit); } else { fprintf(stderr, "TESTSUITE IS NULL!\n"); } @@ -224,7 +224,6 @@ void xbt_test_suite_push(xbt_test_suite_t suite, const char *name, { xbt_test_unit_t unit; va_list ap; - int vres; xbt_assert(suite); xbt_assert(func); @@ -232,7 +231,7 @@ void xbt_test_suite_push(xbt_test_suite_t suite, const char *name, unit = xbt_new0(struct s_xbt_test_unit, 1); va_start(ap, fmt); - vres = vasprintf(&unit->title, fmt, ap); + unit->title = bvprintf(fmt, ap); va_end(ap); unit->name = (char *) name; unit->func = func; @@ -246,7 +245,7 @@ void xbt_test_suite_push(xbt_test_suite_t suite, const char *name, } /* run test one suite */ -static int xbt_test_suite_run(xbt_test_suite_t suite) +static int xbt_test_suite_run(xbt_test_suite_t suite, int verbosity) { xbt_test_unit_t unit; xbt_test_test_t test; @@ -258,7 +257,6 @@ static int xbt_test_suite_run(xbt_test_suite_t suite) unsigned int it_unit, it_test, it_log; int first = 1; /* for result pretty printing */ - int vres; if (suite == NULL) return 0; @@ -269,7 +267,7 @@ static int xbt_test_suite_run(xbt_test_suite_t suite) int suite_len = strlen(suite->title); int i; - xbt_assert2(suite_len < 68, + xbt_assert(suite_len < 68, "suite title \"%s\" too long (%d should be less than 68", suite->title, suite_len); @@ -279,7 +277,8 @@ static int xbt_test_suite_run(xbt_test_suite_t suite) suite_title[i++] = '\n'; suite_title[80] = '\0'; - sprintf(suite_title + 40 - (suite_len + 4) / 2, "[ %s ]", suite->title); + sprintf(suite_title + 40 - (suite_len + 4) / 2, "[ %s ]", + suite->title); suite_title[40 + (suite_len + 5) / 2] = '='; if (!suite->enabled) snprintf(suite_title + 70, 11, " DISABLED "); @@ -296,8 +295,8 @@ static int xbt_test_suite_run(xbt_test_suite_t suite) unit->test_expect = 0; /* display unit title */ - vres = asprintf(&cp, " Unit: %s ......................................" - "......................................", unit->title); + cp = bprintf(" Unit: %s ......................................" + "......................................", unit->title); cp[70] = '\0'; fprintf(stderr, "%s", cp); free(cp); @@ -325,7 +324,8 @@ static int xbt_test_suite_run(xbt_test_suite_t suite) /* Display whether this unit went well */ - if (unit->test_failed > 0 || unit->test_expect) { + if (unit->test_failed > 0 || unit->test_expect || + (verbosity && unit->nb_tests > 0)) { /* some tests failed (or were supposed to), so do detailed reporting of test case */ if (unit->test_failed > 0) { fprintf(stderr, ".. failed\n"); @@ -340,9 +340,10 @@ static int xbt_test_suite_run(xbt_test_suite_t suite) fprintf(stderr, " %s: %s [%s:%d]\n", (test->ignored ? " SKIP" : (test->expected_failure - ? (test->failed ? "EFAIL" : "EPASS") : (test->failed ? - " FAIL" : - " PASS"))), + ? (test-> + failed ? "EFAIL" : "EPASS") : (test->failed ? + " FAIL" : + " PASS"))), test->title, file, line); if ((test->expected_failure && !test->failed) @@ -431,7 +432,8 @@ static int xbt_test_suite_run(xbt_test_suite_t suite) first = 0; } if (suite->unit_failed) { - fprintf(stderr, "%s%d failed", (first ? "" : ", "), suite->unit_failed); + fprintf(stderr, "%s%d failed", (first ? "" : ", "), + suite->unit_failed); first = 0; } if (suite->unit_ignore) { @@ -442,7 +444,6 @@ static int xbt_test_suite_run(xbt_test_suite_t suite) if (suite->unit_disabled) { fprintf(stderr, "%s%d disabled", (first ? "" : ", "), suite->unit_disabled); - first = 0; } fprintf(stderr, ")\n Tests: %.0f%% ok (%d tests: ", suite->nb_tests @@ -457,7 +458,8 @@ static int xbt_test_suite_run(xbt_test_suite_t suite) first = 0; } if (suite->test_failed) { - fprintf(stderr, "%s%d failed", (first ? "" : ", "), suite->test_failed); + fprintf(stderr, "%s%d failed", (first ? "" : ", "), + suite->test_failed); first = 0; } if (suite->test_ignore) { @@ -468,7 +470,6 @@ static int xbt_test_suite_run(xbt_test_suite_t suite) if (suite->test_expect) { fprintf(stderr, "%s%d expected to fail", (first ? "" : "; "), suite->test_expect); - first = 0; } fprintf(stderr, ")\n"); } @@ -549,7 +550,7 @@ static void apply_selection(char *selection) unsigned int it; for (it = 0; it < xbt_dynar_length(_xbt_test_suites); it++) { xbt_test_suite_t thissuite = - xbt_dynar_get_as(_xbt_test_suites, it, xbt_test_suite_t); + xbt_dynar_get_as(_xbt_test_suites, it, xbt_test_suite_t); if (!strcmp(suitename, thissuite->name)) { /* Do not disable the whole suite when we just want to disable a child */ if (enabling || (unitname[0] == '\0')) @@ -562,10 +563,12 @@ static void apply_selection(char *selection) } else { /* act on one child only */ unsigned int it2_unit; /* search it, first (we won't reuse it for external loop which gets broken) */ - for (it2_unit = 0; it2_unit < xbt_dynar_length(thissuite->units); + for (it2_unit = 0; + it2_unit < xbt_dynar_length(thissuite->units); it2_unit++) { xbt_test_unit_t thisunit = - xbt_dynar_get_as(thissuite->units, it2_unit, xbt_test_unit_t); + xbt_dynar_get_as(thissuite->units, it2_unit, + xbt_test_unit_t); if (!strcmp(thisunit->name, unitname)) { thisunit->enabled = enabling; break; @@ -602,13 +605,13 @@ void xbt_test_dump(char *selection) xbt_test_suite_t suite; xbt_dynar_foreach(_xbt_test_suites, it_suite, suite) - xbt_test_suite_dump(suite); + xbt_test_suite_dump(suite); } else { printf(" No suite defined."); } } -int xbt_test_run(char *selection) +int xbt_test_run(char *selection, int verbosity) { apply_selection(selection); @@ -619,7 +622,7 @@ int xbt_test_run(char *selection) /* Run all the suites */ xbt_dynar_foreach(_xbt_test_suites, it_suite, suite) - xbt_test_suite_run(suite); + xbt_test_suite_run(suite, verbosity); /* Display some more statistics */ fprintf(stderr, "\n\n TOTAL: Suites: %.0f%% ok (%d suites: ", @@ -629,7 +632,8 @@ int xbt_test_run(char *selection) (double) _xbt_test_nb_suites) * 100.0) : 100.0, _xbt_test_nb_suites); if (_xbt_test_nb_suites != _xbt_test_suite_failed) { - fprintf(stderr, "%d ok", _xbt_test_nb_suites - _xbt_test_suite_failed); + fprintf(stderr, "%d ok", + _xbt_test_nb_suites - _xbt_test_suite_failed); first = 0; } if (_xbt_test_suite_failed) { @@ -641,7 +645,6 @@ int xbt_test_run(char *selection) if (_xbt_test_suite_ignore) { fprintf(stderr, "%s%d ignored", (first ? "" : ", "), _xbt_test_suite_ignore); - first = 0; } fprintf(stderr, ")\n Units: %.0f%% ok (%d units: ", _xbt_test_nb_units @@ -663,7 +666,6 @@ int xbt_test_run(char *selection) if (_xbt_test_unit_ignore) { fprintf(stderr, "%s%d ignored", (first ? "" : ", "), _xbt_test_unit_ignore); - first = 0; } fprintf(stderr, ")\n Tests: %.0f%% ok (%d tests: ", _xbt_test_nb_tests @@ -711,14 +713,13 @@ void _xbt_test_add(const char *file, int line, const char *fmt, ...) xbt_test_unit_t unit = _xbt_test_current_unit; xbt_test_test_t test; va_list ap; - int vres; xbt_assert(unit); xbt_assert(fmt); test = xbt_new0(struct s_xbt_test_test, 1); va_start(ap, fmt); - vres = vasprintf(&test->title, fmt, ap); + test->title = bvprintf(fmt, ap); va_end(ap); test->failed = 0; test->expected_failure = 0; @@ -737,18 +738,17 @@ void _xbt_test_fail(const char *file, int line, const char *fmt, ...) xbt_test_test_t test; xbt_test_log_t log; va_list ap; - int vres; xbt_assert(unit); xbt_assert(fmt); - xbt_assert1(xbt_dynar_length(_xbt_test_current_unit->tests), + xbt_assert(xbt_dynar_length(_xbt_test_current_unit->tests), "Test failed even before being declared (broken unit: %s)", unit->title); log = xbt_new(struct s_xbt_test_log, 1); va_start(ap, fmt); - vres = vasprintf(&log->text, fmt, ap); + log->text = bvprintf(fmt, ap); va_end(ap); log->file = file; log->line = line; @@ -768,10 +768,11 @@ void xbt_test_exception(xbt_ex_t e) void xbt_test_expect_failure(void) { xbt_test_test_t test; - xbt_assert1(xbt_dynar_length(_xbt_test_current_unit->tests), + xbt_assert(xbt_dynar_length(_xbt_test_current_unit->tests), "Cannot expect the failure of a test before declaring it (broken unit: %s)", _xbt_test_current_unit->title); - test = xbt_dynar_getlast_as(_xbt_test_current_unit->tests, xbt_test_test_t); + test = + xbt_dynar_getlast_as(_xbt_test_current_unit->tests, xbt_test_test_t); test->expected_failure = 1; } @@ -779,11 +780,12 @@ void xbt_test_skip(void) { xbt_test_test_t test; - xbt_assert1(xbt_dynar_length(_xbt_test_current_unit->tests), + xbt_assert(xbt_dynar_length(_xbt_test_current_unit->tests), "Test skiped even before being declared (broken unit: %s)", _xbt_test_current_unit->title); - test = xbt_dynar_getlast_as(_xbt_test_current_unit->tests, xbt_test_test_t); + test = + xbt_dynar_getlast_as(_xbt_test_current_unit->tests, xbt_test_test_t); test->ignored = 1; } @@ -794,18 +796,17 @@ void _xbt_test_log(const char *file, int line, const char *fmt, ...) xbt_test_test_t test; xbt_test_log_t log; va_list ap; - int vres; xbt_assert(unit); xbt_assert(fmt); - xbt_assert1(xbt_dynar_length(_xbt_test_current_unit->tests), + xbt_assert(xbt_dynar_length(_xbt_test_current_unit->tests), "Test logged into even before being declared (broken test unit: %s)", unit->title); log = xbt_new(struct s_xbt_test_log, 1); va_start(ap, fmt); - vres = vasprintf(&log->text, fmt, ap); + log->text = bvprintf(fmt, ap); va_end(ap); log->file = file; log->line = line; @@ -823,13 +824,13 @@ XBT_TEST_SUITE("cunit", "Testsuite mechanism autotest"); XBT_TEST_UNIT("expect", test_expected_failure, "expected failures") { - xbt_test_add0("Skipped test"); + xbt_test_add("Skipped test"); xbt_test_skip(); - xbt_test_add2("%s %s", "EXPECTED", "FAILURE"); + xbt_test_add("%s %s", "EXPECTED", "FAILURE"); xbt_test_expect_failure(); - xbt_test_log2("%s %s", "Test", "log"); - xbt_test_fail0("EXPECTED FAILURE"); + xbt_test_log("%s %s", "Test", "log"); + xbt_test_fail("EXPECTED FAILURE"); } -#endif /* SIMGRID_TEST */ +#endif /* SIMGRID_TEST */