summaryrefslogtreecommitdiff
path: root/vendor/bandit/bandit/grammar.h
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/bandit/bandit/grammar.h')
-rw-r--r--vendor/bandit/bandit/grammar.h46
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();
}
}