From 2028ada8ca6e1b5840c4f358dc649578759cb36b Mon Sep 17 00:00:00 2001 From: Stephan Bosch <stephan.bosch@open-xchange.com> Date: Thu, 30 Jul 2020 23:33:04 +0200 Subject: [PATCH] testsuite: Add support for test cases with expected failure. --- src/testsuite/testsuite-common.c | 14 +++++++++++++- src/testsuite/testsuite-common.h | 2 +- src/testsuite/testsuite.c | 11 +++++++---- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/testsuite/testsuite-common.c b/src/testsuite/testsuite-common.c index f40e34dbd..33434afca 100644 --- a/src/testsuite/testsuite-common.c +++ b/src/testsuite/testsuite-common.c @@ -239,8 +239,20 @@ static void testsuite_test_context_deinit(void) str_free(&test_name); } -bool testsuite_testcase_result(void) +bool testsuite_testcase_result(bool expect_failure) { + if (expect_failure) { + if (test_failures < test_index) { + printf("\nFAIL: Only %d of %d tests failed " + "(all expected to fail).\n\n", + test_failures, test_index); + return FALSE; + } + + printf("\nPASS: %d tests failed.\n\n", test_index); + return TRUE; + } + if (test_failures > 0) { printf("\nFAIL: %d of %d tests failed.\n\n", test_failures, test_index); diff --git a/src/testsuite/testsuite-common.h b/src/testsuite/testsuite-common.h index b4b3cfd3e..644ce5bbc 100644 --- a/src/testsuite/testsuite-common.h +++ b/src/testsuite/testsuite-common.h @@ -169,7 +169,7 @@ void testsuite_test_fail_cstr(const char *reason); void testsuite_test_succeed(string_t *reason); void testsuite_testcase_fail(const char *reason); -bool testsuite_testcase_result(void); +bool testsuite_testcase_result(bool expect_failure); /* * Testsuite temporary directory diff --git a/src/testsuite/testsuite.c b/src/testsuite/testsuite.c index d96bd19bd..2be6d2d3b 100644 --- a/src/testsuite/testsuite.c +++ b/src/testsuite/testsuite.c @@ -47,7 +47,7 @@ const struct sieve_script_env *testsuite_scriptenv; static void print_help(void) { printf( -"Usage: testsuite [-D] [-E] [-d <dump-filename>]\n" +"Usage: testsuite [-D] [-E] [-F] [-d <dump-filename>]\n" " [-t <trace-filename>] [-T <trace-option>]\n" " [-P <plugin>] [-x <extensions>]\n" " <scriptfile>\n" @@ -86,11 +86,11 @@ int main(int argc, char **argv) struct sieve_trace_config trace_config; struct sieve_binary *sbin; const char *sieve_dir, *cwd, *error; - bool log_stdout = FALSE; + bool log_stdout = FALSE, expect_failure = FALSE; int ret, c; sieve_tool = sieve_tool_init("testsuite", &argc, &argv, - "d:t:T:EDP:", TRUE); + "d:t:T:EFDP:", TRUE); /* Parse arguments */ dumpfile = tracefile = NULL; @@ -112,6 +112,9 @@ int main(int argc, char **argv) case 'E': log_stdout = TRUE; break; + case 'F': + expect_failure = TRUE; + break; default: print_help(); i_fatal_status(EX_USAGE, "Unknown argument: %c", c); @@ -244,7 +247,7 @@ int main(int argc, char **argv) sieve_tool_deinit(&sieve_tool); - if (!testsuite_testcase_result()) + if (!testsuite_testcase_result(expect_failure)) return EXIT_FAILURE; return EXIT_SUCCESS; -- GitLab