#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 */
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)
{
}
/* test suite test check */
-typedef struct s_xbt_test_test {
+struct s_xbt_test_test {
char *title;
int failed;
int expected_failure;
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)
{
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");
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);
/* 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;
}
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';
}
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);
"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);
"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);