@@ -39,31 +39,21 @@ namespace cucumber_cpp::library::assemble
3939 {
4040 return pair.second .has_value ();
4141 }
42- }
43-
44- std::vector<AssembledTestSuite> AssembleTestSuites (support::SupportCodeLibrary supportCodeLibrary,
45- std::string_view testRunStartedId,
46- util::Broadcaster& broadcaster,
47- const std::list<support::PickleSource>& sourcedPickles,
48- cucumber::gherkin::id_generator_ptr idGenerator)
49- {
50- std::list<std::string> testUris;
51- std::map<std::string, AssembledTestSuite> assembledTestSuiteMap;
5242
53- for ( const auto & pickleSource : sourcedPickles )
43+ void AssembleBeforeHooks (support::SupportCodeLibrary supportCodeLibrary, const support::PickleSource & pickleSource, cucumber::messages::test_case& testCase, cucumber::gherkin::id_generator_ptr idGenerator )
5444 {
55- cucumber::messages::test_case testCase{
56- .id = idGenerator->next_id (),
57- .pickle_id = pickleSource.pickle ->id ,
58- .test_steps = {},
59- .test_run_started_id = std::make_optional<std::string>(testRunStartedId)
60- };
61-
62- testCase.test_steps .reserve (pickleSource.pickle ->steps .size () * 2 ); // steps + hooks
63-
6445 for (const auto & hookId : supportCodeLibrary.hookRegistry .FindIds (HookType::before, pickleSource.pickle ->tags ))
6546 testCase.test_steps .emplace_back (hookId, idGenerator->next_id ());
47+ }
6648
49+ void AssembleAfterHooks (support::SupportCodeLibrary supportCodeLibrary, const support::PickleSource& pickleSource, cucumber::messages::test_case& testCase, cucumber::gherkin::id_generator_ptr idGenerator)
50+ {
51+ for (const auto & hookId : supportCodeLibrary.hookRegistry .FindIds (HookType::after, pickleSource.pickle ->tags ) | std::views::reverse)
52+ testCase.test_steps .emplace_back (hookId, idGenerator->next_id ());
53+ }
54+
55+ void AssembleSteps (support::SupportCodeLibrary supportCodeLibrary, const support::PickleSource& pickleSource, cucumber::messages::test_case& testCase, cucumber::gherkin::id_generator_ptr idGenerator)
56+ {
6757 for (const auto & step : pickleSource.pickle ->steps )
6858 {
6959 const auto & stepDefinitions = supportCodeLibrary.stepRegistry .StepDefinitions ();
@@ -85,9 +75,37 @@ namespace cucumber_cpp::library::assemble
8575 argumentList.step_match_arguments .emplace_back (result.Group (), result.Name ().empty () ? std::nullopt : std::make_optional (result.Name ()));
8676 }
8777 }
78+ }
8879
89- for (const auto & hookId : supportCodeLibrary.hookRegistry .FindIds (HookType::after, pickleSource.pickle ->tags ) | std::views::reverse)
90- testCase.test_steps .emplace_back (hookId, idGenerator->next_id ());
80+ void AssembleTestSteps (support::SupportCodeLibrary supportCodeLibrary, const support::PickleSource& pickleSource, cucumber::messages::test_case& testCase, cucumber::gherkin::id_generator_ptr idGenerator)
81+ {
82+ AssembleBeforeHooks (supportCodeLibrary, pickleSource, testCase, idGenerator);
83+ AssembleSteps (supportCodeLibrary, pickleSource, testCase, idGenerator);
84+ AssembleAfterHooks (supportCodeLibrary, pickleSource, testCase, idGenerator);
85+ }
86+ }
87+
88+ std::vector<AssembledTestSuite> AssembleTestSuites (support::SupportCodeLibrary supportCodeLibrary,
89+ std::string_view testRunStartedId,
90+ util::Broadcaster& broadcaster,
91+ const std::list<support::PickleSource>& sourcedPickles,
92+ cucumber::gherkin::id_generator_ptr idGenerator)
93+ {
94+ std::list<std::string> testUris;
95+ std::map<std::string, AssembledTestSuite> assembledTestSuiteMap;
96+
97+ for (const auto & pickleSource : sourcedPickles)
98+ {
99+ cucumber::messages::test_case testCase{
100+ .id = idGenerator->next_id (),
101+ .pickle_id = pickleSource.pickle ->id ,
102+ .test_steps = {},
103+ .test_run_started_id = std::make_optional<std::string>(testRunStartedId)
104+ };
105+
106+ testCase.test_steps .reserve (pickleSource.pickle ->steps .size () * 2 ); // steps + hooks
107+
108+ AssembleTestSteps (supportCodeLibrary, pickleSource, testCase, idGenerator);
91109
92110 broadcaster.BroadcastEvent (cucumber::messages::envelope{ .test_case = testCase });
93111
0 commit comments