|
18 | 18 | * ksft_print_msg(fmt, ...); |
19 | 19 | * ksft_perror(msg); |
20 | 20 | * |
21 | | - * and finally report the pass/fail/skip/xfail state of the test with one of: |
| 21 | + * and finally report the pass/fail/skip/xfail/xpass state of the test |
| 22 | + * with one of: |
22 | 23 | * |
23 | 24 | * ksft_test_result(condition, fmt, ...); |
24 | 25 | * ksft_test_result_report(result, fmt, ...); |
25 | 26 | * ksft_test_result_pass(fmt, ...); |
26 | 27 | * ksft_test_result_fail(fmt, ...); |
27 | 28 | * ksft_test_result_skip(fmt, ...); |
28 | 29 | * ksft_test_result_xfail(fmt, ...); |
| 30 | + * ksft_test_result_xpass(fmt, ...); |
29 | 31 | * ksft_test_result_error(fmt, ...); |
30 | 32 | * ksft_test_result_code(exit_code, test_name, fmt, ...); |
31 | 33 | * |
@@ -147,6 +149,11 @@ static inline void ksft_set_plan(unsigned int plan) |
147 | 149 |
|
148 | 150 | static inline void ksft_print_cnts(void) |
149 | 151 | { |
| 152 | + if (ksft_cnt.ksft_xskip > 0) |
| 153 | + printf( |
| 154 | + "# %u skipped test(s) detected. Consider enabling relevant config options to improve coverage.\n", |
| 155 | + ksft_cnt.ksft_xskip |
| 156 | + ); |
150 | 157 | if (ksft_plan != ksft_test_num()) |
151 | 158 | printf("# Planned tests != run tests (%u != %u)\n", |
152 | 159 | ksft_plan, ksft_test_num()); |
@@ -227,6 +234,20 @@ static inline __printf(1, 2) void ksft_test_result_xfail(const char *msg, ...) |
227 | 234 | va_end(args); |
228 | 235 | } |
229 | 236 |
|
| 237 | +static inline __printf(1, 2) void ksft_test_result_xpass(const char *msg, ...) |
| 238 | +{ |
| 239 | + int saved_errno = errno; |
| 240 | + va_list args; |
| 241 | + |
| 242 | + ksft_cnt.ksft_xpass++; |
| 243 | + |
| 244 | + va_start(args, msg); |
| 245 | + printf("ok %u # XPASS ", ksft_test_num()); |
| 246 | + errno = saved_errno; |
| 247 | + vprintf(msg, args); |
| 248 | + va_end(args); |
| 249 | +} |
| 250 | + |
230 | 251 | static inline __printf(1, 2) void ksft_test_result_skip(const char *msg, ...) |
231 | 252 | { |
232 | 253 | int saved_errno = errno; |
@@ -318,6 +339,9 @@ void ksft_test_result_code(int exit_code, const char *test_name, |
318 | 339 | case KSFT_XFAIL: \ |
319 | 340 | ksft_test_result_xfail(fmt, ##__VA_ARGS__); \ |
320 | 341 | break; \ |
| 342 | + case KSFT_XPASS: \ |
| 343 | + ksft_test_result_xpass(fmt, ##__VA_ARGS__); \ |
| 344 | + break; \ |
321 | 345 | case KSFT_SKIP: \ |
322 | 346 | ksft_test_result_skip(fmt, ##__VA_ARGS__); \ |
323 | 347 | break; \ |
@@ -403,7 +427,7 @@ static inline __noreturn __printf(1, 2) void ksft_exit_skip(const char *msg, ... |
403 | 427 | */ |
404 | 428 | if (ksft_plan || ksft_test_num()) { |
405 | 429 | ksft_cnt.ksft_xskip++; |
406 | | - printf("ok %d # SKIP ", 1 + ksft_test_num()); |
| 430 | + printf("ok %u # SKIP ", 1 + ksft_test_num()); |
407 | 431 | } else { |
408 | 432 | printf("1..0 # SKIP "); |
409 | 433 | } |
|
0 commit comments