diff --git a/src/report.c b/src/report.c index 59e3738..92852da 100644 --- a/src/report.c +++ b/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); -} diff --git a/src/runner.c b/src/runner.c index b19ea48..408554f 100644 --- a/src/runner.c +++ b/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; }