Catch exceptions thrown during tests
Project: http://git-wip-us.apache.org/repos/asf/lucy/repo Commit: http://git-wip-us.apache.org/repos/asf/lucy/commit/3f21ac68 Tree: http://git-wip-us.apache.org/repos/asf/lucy/tree/3f21ac68 Diff: http://git-wip-us.apache.org/repos/asf/lucy/diff/3f21ac68 Branch: refs/heads/c-bindings-wip2 Commit: 3f21ac68c45af535c9b6c28faa196b4010dfeca2 Parents: c27fdf4 Author: Nick Wellnhofer <[email protected]> Authored: Sat Mar 2 17:00:11 2013 +0100 Committer: Nick Wellnhofer <[email protected]> Committed: Sat Mar 2 17:00:11 2013 +0100 ---------------------------------------------------------------------- core/Clownfish/Test/TestBatch.c | 24 +++++++++++++++++++++++- 1 files changed, 23 insertions(+), 1 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/lucy/blob/3f21ac68/core/Clownfish/Test/TestBatch.c ---------------------------------------------------------------------- diff --git a/core/Clownfish/Test/TestBatch.c b/core/Clownfish/Test/TestBatch.c index 0119b0d..df72fb1 100644 --- a/core/Clownfish/Test/TestBatch.c +++ b/core/Clownfish/Test/TestBatch.c @@ -22,10 +22,18 @@ #define LUCY_USE_SHORT_NAMES #include "Clownfish/Test/TestBatch.h" #include "Clownfish/CharBuf.h" +#include "Clownfish/Err.h" #include "Clownfish/Test/TestFormatter.h" #include "Clownfish/VArray.h" #include "Clownfish/VTable.h" +struct try_run_tests_context { + TestBatch *batch; +}; + +static void +S_try_run_tests(void *context); + static bool S_vtest_true(TestBatch *self, bool condition, const char *pattern, va_list args); @@ -62,9 +70,16 @@ bool TestBatch_run(TestBatch *self) { TestFormatter_Batch_Prologue(self->formatter, self); - TestBatch_Run_Tests(self); + struct try_run_tests_context args; + args.batch = self; + Err *err = Err_trap(S_try_run_tests, &args); bool failed = false; + if (err) { + failed = true; + CharBuf *mess = Err_Get_Mess(err); + TestFormatter_batch_comment(self->formatter, "%s", CB_Get_Ptr8(mess)); + } if (self->num_failed > 0) { failed = true; TestFormatter_batch_comment(self->formatter, "%d/%d tests failed.\n", @@ -81,6 +96,13 @@ TestBatch_run(TestBatch *self) { return !failed; } +static void +S_try_run_tests(void *context) { + struct try_run_tests_context *args + = (struct try_run_tests_context*)context; + TestBatch_Run_Tests(args->batch); +} + uint32_t TestBatch_get_num_planned(TestBatch *self) { return self->num_planned;
