diff options
Diffstat (limited to 'vendor/bandit/bandit/grammar.h')
-rw-r--r-- | vendor/bandit/bandit/grammar.h | 46 |
1 files changed, 43 insertions, 3 deletions
diff --git a/vendor/bandit/bandit/grammar.h b/vendor/bandit/bandit/grammar.h index 6aaec23d..1f973344 100644 --- a/vendor/bandit/bandit/grammar.h +++ b/vendor/bandit/bandit/grammar.h @@ -46,6 +46,13 @@ namespace bandit { detail::context_stack()); } + inline void xdescribe(const char* desc, detail::voidfunc_t func, + detail::listener& listener=detail::registered_listener(), + detail::contextstack_t& context_stack=detail::context_stack()) + { + describe_skip(desc, func, listener, context_stack); + } + inline void before_each(detail::voidfunc_t func, detail::contextstack_t& context_stack) { @@ -78,10 +85,15 @@ namespace bandit { it_skip(desc, func, detail::registered_listener()); } + inline void xit(const char* desc, detail::voidfunc_t func, detail::listener& listener=detail::registered_listener()) + { + it_skip(desc, func, listener); + } + inline void it(const char* desc, detail::voidfunc_t func, detail::listener& listener, detail::contextstack_t& context_stack, bandit::adapters::assertion_adapter& assertion_adapter, - const detail::run_policy& run_policy) + detail::run_policy& run_policy) { if(!run_policy.should_run(desc, context_stack)) { @@ -105,31 +117,59 @@ namespace bandit { }); }; + bool we_have_been_successful_so_far = false; try { assertion_adapter.adapt_exceptions([&](){ run_before_eaches(); func(); - listener.it_succeeded(desc); + we_have_been_successful_so_far = true; }); } catch(const bandit::detail::assertion_exception& ex) { listener.it_failed(desc, ex); + run_policy.encountered_failure(); + } + catch(const std::exception& ex) + { + std::string err = std::string("exception: ") + ex.what(); + listener.it_failed(desc, bandit::detail::assertion_exception(err)); + run_policy.encountered_failure(); } catch(...) { listener.it_unknown_error(desc); + run_policy.encountered_failure(); } try { - run_after_eaches(); + assertion_adapter.adapt_exceptions([&](){ + run_after_eaches(); + + if(we_have_been_successful_so_far) + { + listener.it_succeeded(desc); + } + }); + } + catch(const bandit::detail::assertion_exception& ex) + { + listener.it_failed(desc, ex); + run_policy.encountered_failure(); + } + catch(const std::exception& ex) + { + std::string err = std::string("exception: ") + ex.what(); + listener.it_failed(desc, bandit::detail::assertion_exception(err)); + run_policy.encountered_failure(); } catch(...) { listener.it_unknown_error(desc); + run_policy.encountered_failure(); } } |