Added XML format into the new report system

This commit is contained in:
Snaipe 2015-10-25 10:02:39 +01:00
parent 5d8a32bd83
commit d2d36052d7
4 changed files with 21 additions and 21 deletions

View file

@ -350,6 +350,7 @@ struct criterion_test_set *criterion_initialize(void) {
criterion_init_output();
criterion_register_output_provider("tap", tap_report);
criterion_register_output_provider("xml", xml_report);
return criterion_init();
}

View file

@ -133,7 +133,7 @@ int criterion_handle_args(int argc, char *argv[], bool handle_unknown_arg) {
{"verbose", optional_argument, 0, 'b'},
{"version", no_argument, 0, 'v'},
{"tap", optional_argument, 0, 't'},
{"xml", no_argument, 0, 'x'},
{"xml", optional_argument, 0, 'x'},
{"help", no_argument, 0, 'h'},
{"list", no_argument, 0, 'l'},
{"ascii", no_argument, 0, 'k'},
@ -206,6 +206,7 @@ int criterion_handle_args(int argc, char *argv[], bool handle_unknown_arg) {
case 'p': criterion_options.pattern = optarg; break;
#endif
case 't': criterion_add_output("tap", DEF(optarg, "-")); break;
case 'x': criterion_add_output("xml", DEF(optarg, "-")); break;
case 'l': do_list_tests = true; break;
case 'v': do_print_version = true; break;
case 'h': do_print_usage = true; break;

View file

@ -29,5 +29,6 @@
void process_all_output(struct criterion_global_stats *stats);
void tap_report(FILE *f, struct criterion_global_stats *stats);
void xml_report(FILE *f, struct criterion_global_stats *stats);
#endif /* !OUTPUT_H_ */

View file

@ -112,24 +112,25 @@ const char *get_status_string(struct criterion_test_stats *ts,
return status;
}
static void print_test(struct criterion_test_stats *ts,
static void print_test(FILE *f,
struct criterion_test_stats *ts,
struct criterion_suite_stats *ss) {
criterion_important(XML_TEST_TEMPLATE_BEGIN,
fprintf(f, XML_TEST_TEMPLATE_BEGIN,
ts->test->name,
(size_t) (ts->passed_asserts + ts->failed_asserts),
get_status_string(ts, ss)
);
if (is_disabled(ts->test, ss->suite)) {
criterion_important(XML_TEST_SKIPPED);
fprintf(f, XML_TEST_SKIPPED);
} else if (ts->crashed) {
criterion_important(XML_CRASH_MSG_ENTRY);
fprintf(f, XML_CRASH_MSG_ENTRY);
} else if (ts->timed_out) {
criterion_important(XML_TIMEOUT_MSG_ENTRY);
fprintf(f, XML_TIMEOUT_MSG_ENTRY);
} else {
if (ts->failed) {
criterion_important(XML_TEST_FAILED_TEMPLATE_BEGIN, ts->failed_asserts);
fprintf(f, XML_TEST_FAILED_TEMPLATE_BEGIN, ts->failed_asserts);
for (struct criterion_assert_stats *asrt = ts->asserts; asrt; asrt = asrt->next) {
if (!asrt->passed) {
bool sf = criterion_options.short_filename;
@ -137,26 +138,26 @@ static void print_test(struct criterion_test_stats *ts,
char *saveptr = NULL;
char *line = strtok_r(dup, "\n", &saveptr);
criterion_important(XML_FAILURE_MSG_ENTRY,
fprintf(f, XML_FAILURE_MSG_ENTRY,
sf ? basename_compat(asrt->file) : asrt->file,
asrt->line,
line
);
while ((line = strtok_r(NULL, "\n", &saveptr)))
criterion_important(" %s" LF, line);
fprintf(f, " %s" LF, line);
free(dup);
}
}
criterion_important(XML_TEST_FAILED_TEMPLATE_END);
fprintf(f, XML_TEST_FAILED_TEMPLATE_END);
}
}
criterion_important(XML_TEST_TEMPLATE_END);
fprintf(f, XML_TEST_TEMPLATE_END);
}
void xml_log_post_all(struct criterion_global_stats *stats) {
criterion_important(XML_BASE_TEMPLATE_BEGIN,
void xml_report(FILE *f, struct criterion_global_stats *stats) {
fprintf(f, XML_BASE_TEMPLATE_BEGIN,
stats->nb_tests,
stats->tests_failed,
stats->tests_crashed,
@ -165,7 +166,7 @@ void xml_log_post_all(struct criterion_global_stats *stats) {
for (struct criterion_suite_stats *ss = stats->suites; ss; ss = ss->next) {
criterion_important(XML_TESTSUITE_TEMPLATE_BEGIN,
fprintf(f, XML_TESTSUITE_TEMPLATE_BEGIN,
ss->suite->name,
ss->nb_tests,
ss->tests_failed,
@ -175,15 +176,11 @@ void xml_log_post_all(struct criterion_global_stats *stats) {
);
for (struct criterion_test_stats *ts = ss->tests; ts; ts = ts->next) {
print_test(ts, ss);
print_test(f, ts, ss);
}
criterion_important(XML_TESTSUITE_TEMPLATE_END);
fprintf(f, XML_TESTSUITE_TEMPLATE_END);
}
criterion_important(XML_BASE_TEMPLATE_END);
fprintf(f, XML_BASE_TEMPLATE_END);
}
struct criterion_output_provider xml_logging = {
.log_post_all = xml_log_post_all,
};