Skip to content

Commit 998dbd2

Browse files
committed
refactor to reduce nesting
1 parent a56826e commit 998dbd2

File tree

1 file changed

+40
-22
lines changed

1 file changed

+40
-22
lines changed

cucumber_cpp/library/assemble/AssembleTestSuites.cpp

Lines changed: 40 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)