X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/d33e7a563a884247bff85406dcc589a70a162e79..2b049549c4951665e5efb682a47449e41451f574:/src/xbt/cunit.cpp diff --git a/src/xbt/cunit.cpp b/src/xbt/cunit.cpp index eac5f1abcb..15257bf719 100644 --- a/src/xbt/cunit.cpp +++ b/src/xbt/cunit.cpp @@ -9,13 +9,15 @@ /* At some point we should use https://github.com/google/googletest instead */ #include "src/internal_config.h" -#include +#include #include #include "xbt/sysdep.h" /* bvprintf */ #include "xbt/cunit.h" #include "xbt/dynar.h" +#define STRLEN 1024 + /* collection of all suites */ static xbt_dynar_t _xbt_test_suites = nullptr; /* global statistics */ @@ -38,11 +40,12 @@ static int _xbt_test_suite_disabled = 0; xbt_test_unit_t _xbt_test_current_unit = nullptr; /* test suite test log */ -typedef struct s_xbt_test_log { +struct s_xbt_test_log { char *text; const char *file; int line; -} *xbt_test_log_t; +}; +typedef s_xbt_test_log* xbt_test_log_t; static void xbt_test_log_dump(xbt_test_log_t log) { @@ -53,7 +56,7 @@ static void xbt_test_log_dump(xbt_test_log_t log) } /* test suite test check */ -typedef struct s_xbt_test_test { +struct s_xbt_test_test { char *title; int failed; int expected_failure; @@ -61,7 +64,8 @@ typedef struct s_xbt_test_test { const char *file; int line; xbt_dynar_t logs; -} *xbt_test_test_t; +}; +typedef s_xbt_test_test* xbt_test_test_t; static void xbt_test_test_dump(xbt_test_test_t test) { @@ -160,51 +164,34 @@ static void xbt_test_log_free(void *log) free(l); } -/** @brief create test suite */ -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; - - if (_xbt_test_suites == nullptr) - _xbt_test_suites = xbt_dynar_new(sizeof(xbt_test_suite_t), xbt_test_suite_free); - - va_start(ap, fmt); - 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; - - xbt_dynar_push(_xbt_test_suites, &suite); - - return suite; -} - /** @brief retrieve a testsuite from name, or create a new one */ xbt_test_suite_t xbt_test_suite_by_name(const char *name, const char *fmt, ...) { - xbt_test_suite_t suite; - char *bufname; - va_list ap; - - if (_xbt_test_suites) { + if (_xbt_test_suites == nullptr) { + _xbt_test_suites = xbt_dynar_new(sizeof(xbt_test_suite_t), xbt_test_suite_free); + } else { + xbt_test_suite_t suite; unsigned int it_suite; xbt_dynar_foreach(_xbt_test_suites, it_suite, suite) if (not strcmp(suite->name, name)) return suite; } + xbt_test_suite_t suite = xbt_new0(s_xbt_test_suite, 1); + va_list ap; va_start(ap, fmt); - bufname = bvprintf(fmt, ap); + suite->title = bvprintf(fmt, ap); + suite->units = xbt_dynar_new(sizeof(xbt_test_unit_t), &xbt_test_unit_free); va_end(ap); - suite = xbt_test_suite_new(name, bufname, nullptr); - free(bufname); + suite->name = name; + suite->enabled = 1; + + xbt_dynar_push(_xbt_test_suites, &suite); return suite; } -void xbt_test_suite_dump(xbt_test_suite_t suite) +static void xbt_test_suite_dump(xbt_test_suite_t suite) { if (suite) { fprintf(stderr, "TESTSUITE %s: %s (%s)\n", suite->name, suite->title, suite->enabled ? "enabled" : "disabled"); @@ -229,7 +216,7 @@ void xbt_test_suite_push(xbt_test_suite_t suite, const char *name, ts_test_cb_t xbt_assert(func); xbt_assert(fmt); - unit = xbt_new0(struct s_xbt_test_unit, 1); + unit = xbt_new0(s_xbt_test_unit, 1); va_start(ap, fmt); unit->title = bvprintf(fmt, ap); va_end(ap); @@ -454,32 +441,29 @@ static void apply_selection(char *selection) /* for the parsing */ char *sel = selection; int done = 0; - char dir[1024]; /* the directive */ + char dir[STRLEN]; /* the directive */ /* iterators */ unsigned int it_suite; xbt_test_suite_t suite; xbt_test_unit_t unit; unsigned int it_unit; - char suitename[512]; - char unitname[512]; + char suitename[STRLEN]; + char unitname[STRLEN]; if (not selection || selection[0] == '\0') return; - /*printf("Test selection: %s\n", selection); */ - /* First apply the selection */ while (not done) { int enabling = 1; char *p = strchr(sel, ','); if (p) { - strncpy(dir, sel, p - sel); - dir[p - sel] = '\0'; + snprintf(dir, STRLEN, "%.*s", (int)(p - sel), sel); sel = p + 1; } else { - strncpy(dir, sel,1024); + snprintf(dir, STRLEN, "%s", sel); done = 1; } @@ -494,11 +478,10 @@ static void apply_selection(char *selection) p = strchr(dir, ':'); if (p) { - strncpy(unitname, p + 1,512); - strncpy(suitename, dir, p - dir); - suitename[p - dir] = '\0'; + snprintf(suitename, STRLEN, "%.*s", (int)(p - dir), dir); + snprintf(unitname, STRLEN, "%s", p + 1); } else { - strncpy(suitename, dir,512); + snprintf(suitename, STRLEN, "%s", dir); unitname[0] = '\0'; } @@ -648,7 +631,7 @@ void _xbt_test_add(const char *file, int line, const char *fmt, ...) xbt_assert(unit); va_list ap; - xbt_test_test_t test = xbt_new0(struct s_xbt_test_test, 1); + xbt_test_test_t test = xbt_new0(s_xbt_test_test, 1); va_start(ap, fmt); test->title = bvprintf(fmt, ap); va_end(ap); @@ -670,7 +653,7 @@ void _xbt_test_fail(const char *file, int line, const char *fmt, ...) "Test failed even before being declared (broken unit: %s)", unit->title); va_list ap; - xbt_test_log_t log = xbt_new(struct s_xbt_test_log, 1); + xbt_test_log_t log = xbt_new(s_xbt_test_log, 1); va_start(ap, fmt); log->text = bvprintf(fmt, ap); va_end(ap); @@ -713,7 +696,7 @@ void _xbt_test_log(const char *file, int line, const char *fmt, ...) "Test logged into even before being declared (broken test unit: %s)", unit->title); va_list ap; - xbt_test_log_t log = xbt_new(struct s_xbt_test_log, 1); + xbt_test_log_t log = xbt_new(s_xbt_test_log, 1); va_start(ap, fmt); log->text = bvprintf(fmt, ap); va_end(ap);