Moved logging out of report hooks since report hooks are overriden in the test executable
This commit is contained in:
parent
9f974b248b
commit
7dd294a438
2 changed files with 80 additions and 85 deletions
93
src/report.c
93
src/report.c
|
@ -32,10 +32,6 @@
|
|||
#include "report.h"
|
||||
#include "config.h"
|
||||
|
||||
#ifdef HAVE_PCRE
|
||||
#include "extmatch.h"
|
||||
#endif
|
||||
|
||||
#define IMPL_CALL_REPORT_HOOKS(Kind) \
|
||||
IMPL_SECTION_LIMITS(f_report_hook, crit_ ## Kind); \
|
||||
void call_report_hooks_##Kind(void *data) { \
|
||||
|
@ -46,74 +42,25 @@
|
|||
} \
|
||||
}
|
||||
|
||||
#define IMPL_REPORT_HOOK(Type) \
|
||||
IMPL_CALL_REPORT_HOOKS(Type); \
|
||||
ReportHook(Type)
|
||||
IMPL_CALL_REPORT_HOOKS(PRE_ALL);
|
||||
IMPL_CALL_REPORT_HOOKS(PRE_SUITE);
|
||||
IMPL_CALL_REPORT_HOOKS(PRE_INIT);
|
||||
IMPL_CALL_REPORT_HOOKS(PRE_TEST);
|
||||
IMPL_CALL_REPORT_HOOKS(ASSERT);
|
||||
IMPL_CALL_REPORT_HOOKS(TEST_CRASH);
|
||||
IMPL_CALL_REPORT_HOOKS(POST_TEST);
|
||||
IMPL_CALL_REPORT_HOOKS(POST_FINI);
|
||||
IMPL_CALL_REPORT_HOOKS(POST_SUITE);
|
||||
IMPL_CALL_REPORT_HOOKS(POST_ALL);
|
||||
|
||||
__attribute__((always_inline))
|
||||
static inline void nothing() {}
|
||||
ReportHook(PRE_ALL)() {}
|
||||
ReportHook(PRE_SUITE)() {}
|
||||
ReportHook(PRE_INIT)() {}
|
||||
ReportHook(PRE_TEST)() {}
|
||||
ReportHook(ASSERT)() {}
|
||||
ReportHook(TEST_CRASH)() {}
|
||||
ReportHook(POST_TEST)() {}
|
||||
ReportHook(POST_FINI)() {}
|
||||
ReportHook(POST_SUITE)() {}
|
||||
ReportHook(POST_ALL)() {}
|
||||
|
||||
#ifdef HAVE_PCRE
|
||||
void disable_unmatching(struct criterion_test_set *set) {
|
||||
FOREACH_SET(struct criterion_suite_set *s, set->suites) {
|
||||
if ((s->suite.data && s->suite.data->disabled) || !s->tests)
|
||||
continue;
|
||||
|
||||
FOREACH_SET(struct criterion_test *test, s->tests) {
|
||||
const char *errmsg;
|
||||
int ret = extmatch(criterion_options.pattern, test->data->identifier_, &errmsg);
|
||||
if (ret == -10) {
|
||||
printf("pattern error: %s\n", errmsg);
|
||||
exit(1);
|
||||
} else if (ret < 0) {
|
||||
test->data->disabled = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
IMPL_REPORT_HOOK(PRE_ALL)(struct criterion_test_set *set) {
|
||||
#ifdef HAVE_PCRE
|
||||
if (criterion_options.pattern) {
|
||||
disable_unmatching(set);
|
||||
}
|
||||
#endif
|
||||
log(pre_all, set);
|
||||
}
|
||||
|
||||
IMPL_REPORT_HOOK(PRE_SUITE)(struct criterion_suite_set *set) {
|
||||
log(pre_suite, set);
|
||||
}
|
||||
|
||||
IMPL_REPORT_HOOK(PRE_INIT)(struct criterion_test *test) {
|
||||
log(pre_init, test);
|
||||
}
|
||||
|
||||
IMPL_REPORT_HOOK(PRE_TEST)(struct criterion_test *test) {
|
||||
log(pre_test, test);
|
||||
}
|
||||
|
||||
IMPL_REPORT_HOOK(ASSERT)(struct criterion_assert_stats *stats) {
|
||||
log(assert, stats);
|
||||
}
|
||||
|
||||
IMPL_REPORT_HOOK(TEST_CRASH)(struct criterion_test_stats *stats) {
|
||||
log(test_crash, stats);
|
||||
}
|
||||
|
||||
IMPL_REPORT_HOOK(POST_TEST)(struct criterion_test_stats *stats) {
|
||||
log(post_test, stats);
|
||||
}
|
||||
|
||||
IMPL_REPORT_HOOK(POST_FINI)(struct criterion_test_stats *stats) {
|
||||
log(post_fini, stats);
|
||||
}
|
||||
|
||||
IMPL_REPORT_HOOK(POST_SUITE)(struct criterion_suite_stats *stats) {
|
||||
log(post_suite, stats);
|
||||
}
|
||||
|
||||
IMPL_REPORT_HOOK(POST_ALL)(struct criterion_global_stats *stats) {
|
||||
log(post_all, stats);
|
||||
}
|
||||
|
|
72
src/runner.c
72
src/runner.c
|
@ -27,6 +27,7 @@
|
|||
#include "criterion/criterion.h"
|
||||
#include "criterion/options.h"
|
||||
#include "criterion/ordered-set.h"
|
||||
#include "criterion/logging.h"
|
||||
#include "stats.h"
|
||||
#include "runner.h"
|
||||
#include "report.h"
|
||||
|
@ -36,6 +37,10 @@
|
|||
#include "posix-compat.h"
|
||||
#include "abort.h"
|
||||
|
||||
#ifdef HAVE_PCRE
|
||||
#include "extmatch.h"
|
||||
#endif
|
||||
|
||||
IMPL_SECTION_LIMITS(struct criterion_test, criterion_tests);
|
||||
IMPL_SECTION_LIMITS(struct criterion_suite, crit_suites);
|
||||
|
||||
|
@ -43,6 +48,9 @@ IMPL_SECTION_LIMITS(struct criterion_suite, crit_suites);
|
|||
TestSuite();
|
||||
Test(,) {};
|
||||
|
||||
__attribute__ ((always_inline))
|
||||
static inline void nothing() {}
|
||||
|
||||
int cmp_suite(void *a, void *b) {
|
||||
struct criterion_suite *s1 = a, *s2 = b;
|
||||
return strcmp(s1->name, s2->name);
|
||||
|
@ -109,6 +117,7 @@ static void map_tests(struct criterion_test_set *set,
|
|||
continue;
|
||||
|
||||
report(PRE_SUITE, s);
|
||||
log(pre_suite, s);
|
||||
|
||||
smart struct criterion_suite_stats *suite_stats = suite_stats_init(&s->suite);
|
||||
|
||||
|
@ -124,12 +133,10 @@ static void map_tests(struct criterion_test_set *set,
|
|||
}
|
||||
|
||||
report(POST_SUITE, suite_stats);
|
||||
log(post_suite, suite_stats);
|
||||
}
|
||||
}
|
||||
|
||||
__attribute__ ((always_inline))
|
||||
static inline void nothing() {}
|
||||
|
||||
static void run_test_child(struct criterion_test *test,
|
||||
struct criterion_suite *suite) {
|
||||
|
||||
|
@ -197,15 +204,27 @@ static void run_test(struct criterion_global_stats *stats,
|
|||
while ((ev = worker_read_event(proc)) != NULL) {
|
||||
stat_push_event(stats, suite_stats, test_stats, ev);
|
||||
switch (ev->kind) {
|
||||
case PRE_INIT: report(PRE_INIT, test); break;
|
||||
case PRE_TEST: report(PRE_TEST, test);
|
||||
test_started = true;
|
||||
break;
|
||||
case ASSERT: report(ASSERT, ev->data); break;
|
||||
case POST_TEST: report(POST_TEST, test_stats);
|
||||
normal_finish = true;
|
||||
break;
|
||||
case POST_FINI: report(POST_FINI, test_stats); break;
|
||||
case PRE_INIT:
|
||||
report(PRE_INIT, test); break;
|
||||
log(pre_init, test);
|
||||
case PRE_TEST:
|
||||
report(PRE_TEST, test);
|
||||
log(pre_test, test);
|
||||
test_started = true;
|
||||
break;
|
||||
case ASSERT:
|
||||
report(ASSERT, ev->data);
|
||||
log(assert, ev->data);
|
||||
break;
|
||||
case POST_TEST:
|
||||
report(POST_TEST, test_stats);
|
||||
log(post_test, test_stats);
|
||||
normal_finish = true;
|
||||
break;
|
||||
case POST_FINI:
|
||||
report(POST_FINI, test_stats);
|
||||
log(post_fini, test_stats);
|
||||
break;
|
||||
}
|
||||
sfree(ev);
|
||||
}
|
||||
|
@ -225,21 +244,49 @@ static void run_test(struct criterion_global_stats *stats,
|
|||
test_stats->signal = status.status;
|
||||
if (test->data->signal == 0) {
|
||||
push_event(TEST_CRASH);
|
||||
log(test_crash, test_stats);
|
||||
} else {
|
||||
double elapsed_time = 0;
|
||||
push_event(POST_TEST, .data = &elapsed_time);
|
||||
log(post_test, test_stats);
|
||||
push_event(POST_FINI);
|
||||
log(post_fini, test_stats);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef HAVE_PCRE
|
||||
void disable_unmatching(struct criterion_test_set *set) {
|
||||
FOREACH_SET(struct criterion_suite_set *s, set->suites) {
|
||||
if ((s->suite.data && s->suite.data->disabled) || !s->tests)
|
||||
continue;
|
||||
|
||||
FOREACH_SET(struct criterion_test *test, s->tests) {
|
||||
const char *errmsg;
|
||||
int ret = extmatch(criterion_options.pattern, test->data->identifier_, &errmsg);
|
||||
if (ret == -10) {
|
||||
printf("pattern error: %s\n", errmsg);
|
||||
exit(1);
|
||||
} else if (ret < 0) {
|
||||
test->data->disabled = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
static int criterion_run_all_tests_impl(void) {
|
||||
if (resume_child()) // (windows only) resume from the fork
|
||||
return -1;
|
||||
|
||||
smart struct criterion_test_set *set = criterion_init();
|
||||
#ifdef HAVE_PCRE
|
||||
if (criterion_options.pattern)
|
||||
disable_unmatching(set);
|
||||
#endif
|
||||
|
||||
report(PRE_ALL, set);
|
||||
log(pre_all, set);
|
||||
|
||||
smart struct criterion_global_stats *stats = stats_init();
|
||||
map_tests(set, stats, run_test);
|
||||
|
@ -248,6 +295,7 @@ static int criterion_run_all_tests_impl(void) {
|
|||
return -1;
|
||||
|
||||
report(POST_ALL, stats);
|
||||
log(post_all, stats);
|
||||
return stats->tests_failed == 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue