@@ -23,28 +23,30 @@ namespace cucumber_cpp::library::engine
2323
2424 void ExecuteHook (cucumber_cpp::library::engine::RunnerContext& runnerContext, HookType hook, const std::set<std::string, std::less<>>& tags)
2525 {
26- if (runnerContext.InheritedExecutionStatus () == Result::passed)
27- for (const auto & match : HookRegistry::Instance ().Query (hook, tags))
28- {
29- match.factory (runnerContext)->Execute ();
26+ for (const auto & match : HookRegistry::Instance ().Query (hook, tags))
27+ {
28+ match.factory (runnerContext)->Execute ();
3029
31- if (runnerContext.ExecutionStatus () != cucumber_cpp::library::engine::Result::passed)
32- return ;
33- }
30+ if (runnerContext.ExecutionStatus () != cucumber_cpp::library::engine::Result::passed)
31+ return ;
32+ }
3433 }
3534 }
3635
3736 HookExecutor::ScopedHook::ScopedHook (cucumber_cpp::library::engine::RunnerContext& runnerContext, HookPair hookPair, const std::set<std::string, std::less<>>& tags)
3837 : runnerContext{ runnerContext }
3938 , hookPair{ hookPair }
4039 , tags{ tags }
40+ , executeHooks{ runnerContext.InheritedExecutionStatus () == Result::passed }
4141 {
42- ExecuteHook (runnerContext, hookPair.before , tags);
42+ if (executeHooks)
43+ ExecuteHook (runnerContext, hookPair.before , tags);
4344 }
4445
4546 HookExecutor::ScopedHook::~ScopedHook ()
4647 {
47- ExecuteHook (runnerContext, hookPair.after , tags);
48+ if (executeHooks)
49+ ExecuteHook (runnerContext, hookPair.after , tags);
4850 }
4951
5052 HookExecutor::ProgramScope::ProgramScope (cucumber_cpp::library::engine::ContextManager& contextManager)
0 commit comments