1+ #include " cucumber_cpp/library/engine/FailureHandler.hpp"
12#include " cucumber_cpp/library/engine/HookExecutor.hpp"
23#include " cucumber_cpp/library/engine/test_helper/ContextManagerInstance.hpp"
4+ #include " cucumber_cpp/library/report/test_helper/ReportForwarderMock.hpp"
5+ #include < functional>
36#include < gtest/gtest.h>
7+ #include < optional>
8+ #include < set>
9+ #include < string>
10+ #include < utility>
411
512namespace cucumber_cpp ::library::engine
613{
714 struct TestHookExecutor : testing::Test
815 {
9- test_helper::ContextManagerInstance contextManagerInstance;
10- HookExecutorImpl hookExecutor{ contextManagerInstance };
16+ std::optional< test_helper::ContextManagerInstance> contextManagerInstance{ std::in_place } ;
17+ std::optional< HookExecutorImpl> hookExecutor{ * contextManagerInstance };
1118 };
1219
1320 TEST_F (TestHookExecutor, Construct)
@@ -16,49 +23,60 @@ namespace cucumber_cpp::library::engine
1623
1724 TEST_F (TestHookExecutor, ExecuteProgramHooks)
1825 {
19- ASSERT_FALSE (contextManagerInstance. ProgramContext ().Contains (" hookBeforeAll" ));
20- ASSERT_FALSE (contextManagerInstance. ProgramContext ().Contains (" hookAfterAll" ));
26+ ASSERT_FALSE (contextManagerInstance-> ProgramContext ().Contains (" hookBeforeAll" ));
27+ ASSERT_FALSE (contextManagerInstance-> ProgramContext ().Contains (" hookAfterAll" ));
2128
2229 {
23- auto scope = hookExecutor. BeforeAll ();
24- EXPECT_TRUE (contextManagerInstance. ProgramContext ().Contains (" hookBeforeAll" ));
30+ auto scope = hookExecutor-> BeforeAll ();
31+ EXPECT_TRUE (contextManagerInstance-> ProgramContext ().Contains (" hookBeforeAll" ));
2532 }
26- EXPECT_TRUE (contextManagerInstance. ProgramContext ().Contains (" hookAfterAll" ));
33+ EXPECT_TRUE (contextManagerInstance-> ProgramContext ().Contains (" hookAfterAll" ));
2734 }
2835
2936 TEST_F (TestHookExecutor, ExecuteBeforeFeature)
3037 {
31- ASSERT_FALSE (contextManagerInstance. FeatureContext ().Contains (" hookBeforeFeature" ));
32- ASSERT_FALSE (contextManagerInstance. FeatureContext ().Contains (" hookAfterFeature" ));
38+ ASSERT_FALSE (contextManagerInstance-> FeatureContext ().Contains (" hookBeforeFeature" ));
39+ ASSERT_FALSE (contextManagerInstance-> FeatureContext ().Contains (" hookAfterFeature" ));
3340
3441 {
35- auto scope = hookExecutor. FeatureStart ();
36- EXPECT_TRUE (contextManagerInstance. FeatureContext ().Contains (" hookBeforeFeature" ));
42+ auto scope = hookExecutor-> FeatureStart ();
43+ EXPECT_TRUE (contextManagerInstance-> FeatureContext ().Contains (" hookBeforeFeature" ));
3744 }
38- EXPECT_TRUE (contextManagerInstance. FeatureContext ().Contains (" hookAfterFeature" ));
45+ EXPECT_TRUE (contextManagerInstance-> FeatureContext ().Contains (" hookAfterFeature" ));
3946 }
4047
4148 TEST_F (TestHookExecutor, ExecuteBeforeScenario)
4249 {
43- ASSERT_FALSE (contextManagerInstance. ScenarioContext ().Contains (" hookBeforeScenario" ));
44- ASSERT_FALSE (contextManagerInstance. ScenarioContext ().Contains (" hookAfterScenario" ));
50+ ASSERT_FALSE (contextManagerInstance-> ScenarioContext ().Contains (" hookBeforeScenario" ));
51+ ASSERT_FALSE (contextManagerInstance-> ScenarioContext ().Contains (" hookAfterScenario" ));
4552
4653 {
47- auto scope = hookExecutor. ScenarioStart ();
48- EXPECT_TRUE (contextManagerInstance. ScenarioContext ().Contains (" hookBeforeScenario" ));
54+ auto scope = hookExecutor-> ScenarioStart ();
55+ EXPECT_TRUE (contextManagerInstance-> ScenarioContext ().Contains (" hookBeforeScenario" ));
4956 }
50- EXPECT_TRUE (contextManagerInstance. ScenarioContext ().Contains (" hookAfterScenario" ));
57+ EXPECT_TRUE (contextManagerInstance-> ScenarioContext ().Contains (" hookAfterScenario" ));
5158 }
5259
5360 TEST_F (TestHookExecutor, ExecuteBeforeStep)
5461 {
55- ASSERT_FALSE (contextManagerInstance. ScenarioContext ().Contains (" hookBeforeStep" ));
56- ASSERT_FALSE (contextManagerInstance. ScenarioContext ().Contains (" hookAfterStep" ));
62+ ASSERT_FALSE (contextManagerInstance-> ScenarioContext ().Contains (" hookBeforeStep" ));
63+ ASSERT_FALSE (contextManagerInstance-> ScenarioContext ().Contains (" hookAfterStep" ));
5764
5865 {
59- auto scope = hookExecutor. StepStart ();
60- EXPECT_TRUE (contextManagerInstance. ScenarioContext ().Contains (" hookBeforeStep" ));
66+ auto scope = hookExecutor-> StepStart ();
67+ EXPECT_TRUE (contextManagerInstance-> ScenarioContext ().Contains (" hookBeforeStep" ));
6168 }
62- EXPECT_TRUE (contextManagerInstance.ScenarioContext ().Contains (" hookAfterStep" ));
69+ EXPECT_TRUE (contextManagerInstance->ScenarioContext ().Contains (" hookAfterStep" ));
70+ }
71+
72+ TEST_F (TestHookExecutor, ThrowOnBeforeHookError)
73+ {
74+ contextManagerInstance.emplace (std::set<std::string, std::less<>>{ " @errorbefore" });
75+ hookExecutor.emplace (*contextManagerInstance);
76+
77+ report::test_helper::ReportForwarderMock reportHandler{ *contextManagerInstance };
78+ TestAssertionHandlerImpl assertionHandler{ *contextManagerInstance, reportHandler };
79+
80+ EXPECT_ANY_THROW (auto scope = hookExecutor->StepStart ());
6381 }
6482}
0 commit comments