Add report_skip(), which is report(), but with another condition allowing it to output PASS/FAIL/SKIP, rather than only PASS/FAIL. This allows report output to stay more consistent between systems/configurations that may or may not support all tests. Currently I only have a downstream use case for this, but maybe report output sequences of the following form report(msg1, cond1) -> FAIL report(msg2, cond1 && cond2) -> FAIL report(msg3, cond1 && cond3) -> FAIL would look better as report(msg1, cond1) -> FAIL report_skip(msg2, !cond1, cond1 && cond2) -> SKIP report_skip(msg3, !cond1, cond1 && cond3) -> SKIP Signed-off-by: Andrew Jones <drjones@xxxxxxxxxx> --- lib/libcflat.h | 1 + lib/report.c | 34 ++++++++++++++++++++++++++-------- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/lib/libcflat.h b/lib/libcflat.h index f734fdee2df18..01f2769ad1773 100644 --- a/lib/libcflat.h +++ b/lib/libcflat.h @@ -61,5 +61,6 @@ extern long atol(const char *ptr); #define NULL ((void *)0UL) void report(const char *msg_fmt, bool pass, ...); +void report_skip(const char *msg_fmt, bool can_skip, bool pass, ...); int report_summary(void); #endif diff --git a/lib/report.c b/lib/report.c index ff562a13c541e..77db22b6c2d8d 100644 --- a/lib/report.c +++ b/lib/report.c @@ -5,32 +5,50 @@ * * Authors: * Jan Kiszka <jan.kiszka@xxxxxxxxxxx> + * Andrew Jones <drjones@xxxxxxxxxx> * * This work is licensed under the terms of the GNU LGPL, version 2. */ #include "libcflat.h" -static unsigned int tests, failures; +static unsigned int tests, failures, skipped; -void report(const char *msg_fmt, bool pass, ...) +void va_report_skip(const char *msg_fmt, bool can_skip, bool pass, va_list va) { + char *fail = can_skip ? "SKIP" : "FAIL"; char buf[2000]; - va_list va; tests++; - printf("%s: ", pass ? "PASS" : "FAIL"); - va_start(va, pass); + printf("%s: ", pass ? "PASS" : fail); vsnprintf(buf, sizeof(buf), msg_fmt, va); - va_end(va); puts(buf); puts("\n"); - if (!pass) + if (!pass && can_skip) + skipped++; + else if (!pass) failures++; } +void report(const char *msg_fmt, bool pass, ...) +{ + va_list va; + va_start(va, pass); + va_report_skip(msg_fmt, false, pass, va); + va_end(va); +} + +void report_skip(const char *msg_fmt, bool can_skip, bool pass, ...) +{ + va_list va; + va_start(va, pass); + va_report_skip(msg_fmt, can_skip, pass, va); + va_end(va); +} + int report_summary(void) { - printf("\nSUMMARY: %d tests, %d failures\n", tests, failures); + printf("\nSUMMARY: %d tests, %d failures, %d skipped\n", + tests, failures, skipped); return failures > 0 ? 1 : 0; } -- 1.9.3 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html