Skip to content

Commit d64e692

Browse files
authored
feat: improve nested step console output (#194)
* feat: improve nested step console output * fix: refine output assertions for failed scenario hook test
1 parent c66792b commit d64e692

File tree

4 files changed

+47
-5
lines changed

4 files changed

+47
-5
lines changed

.vscode/settings.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,4 @@
2525
"connectionId": "philips-software",
2626
"projectKey": "philips-software_amp-cucumber-cpp-runner"
2727
}
28-
}
28+
}

cucumber_cpp/acceptance_test/test.bats

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,8 @@ teardown() {
166166
run .build/Host/cucumber_cpp/acceptance_test/Debug/cucumber_cpp.acceptance_test run --feature cucumber_cpp/acceptance_test/features --tag "@fail_scenariohook_after" --report console
167167
assert_failure
168168
assert_output --partial "Given a given step"
169-
assert_output --partial "-> done"
169+
assert_output --partial "done"
170+
assert_output --partial "failed"
170171
assert_output --partial "tests : 0/1 passed"
171172
}
172173

cucumber_cpp/library/report/StdOutReport.cpp

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#include <optional>
1717
#include <sstream>
1818
#include <string>
19+
#include <string_view>
1920

2021
#ifdef _MSC_VER
2122
// clang-format off
@@ -24,6 +25,7 @@
2425
#include <minwindef.h>
2526
#include <processenv.h>
2627
#include <WinBase.h>
28+
#include <winnls.h>
2729
// clang-format on
2830
#endif
2931

@@ -133,6 +135,23 @@ namespace cucumber_cpp::library::report
133135

134136
return out.str();
135137
}
138+
139+
std::string Repeat(std::string_view input, std::size_t count)
140+
{
141+
std::string result;
142+
result.reserve(input.size() * count);
143+
for (std::size_t i = 0; i < count; ++i)
144+
result += input;
145+
return result;
146+
}
147+
}
148+
149+
StdOutReport::StdOutReport()
150+
{
151+
#ifdef _MSC_VER
152+
SetConsoleOutputCP(CP_UTF8);
153+
SetConsoleCP(CP_UTF8);
154+
#endif
136155
}
137156

138157
void StdOutReport::FeatureStart(const engine::FeatureInfo& featureInfo)
@@ -163,9 +182,19 @@ namespace cucumber_cpp::library::report
163182
<< scenarioInfo.Title();
164183
}
165184

166-
void StdOutReport::ScenarioEnd(engine::Result result, const engine::ScenarioInfo& scenarioInfo, TraceTime::Duration /*duration*/)
185+
void StdOutReport::ScenarioEnd(engine::Result result, const engine::ScenarioInfo& scenarioInfo, TraceTime::Duration duration)
167186
{
168-
std::cout << "\n";
187+
188+
using enum engine::Result;
189+
190+
std::cout << "\n"
191+
<< "\\-> ";
192+
193+
auto& coloured = ((result == passed) ? std::cout << TcGreen : std::cout << TcRed);
194+
195+
coloured << successLut.at(result)
196+
<< " (" << ScaledDuration(duration) << ")"
197+
<< TcDefault << '\n';
169198

170199
if (result != engine::Result::passed)
171200
{
@@ -176,6 +205,7 @@ namespace cucumber_cpp::library::report
176205
void StdOutReport::StepSkipped(const engine::StepInfo& stepInfo)
177206
{
178207
std::cout << "\n"
208+
<< Repeat("| ", nestedSteps)
179209
<< TcCyan;
180210
std::cout << successLut.at(engine::Result::skipped) << " " << stepTypeLut.at(stepInfo.Type()) << " " << stepInfo.Text();
181211
std::cout << TcDefault;
@@ -184,20 +214,27 @@ namespace cucumber_cpp::library::report
184214
void StdOutReport::StepStart(const engine::StepInfo& stepInfo)
185215
{
186216
std::cout << "\n"
217+
<< Repeat("| ", nestedSteps)
187218
<< stepTypeLut.at(stepInfo.Type()) << " " << stepInfo.Text()
188219
<< std::flush;
220+
++nestedSteps;
189221
}
190222

191223
void StdOutReport::StepEnd(engine::Result result, const engine::StepInfo& stepInfo, TraceTime::Duration duration)
192224
{
225+
--nestedSteps;
226+
193227
using enum engine::Result;
194228

229+
std::cout << "\n"
230+
<< Repeat("| ", nestedSteps) << "\\-> ";
231+
195232
if (result == passed)
196233
std::cout << TcGreen;
197234
else
198235
std::cout << TcRed;
199236

200-
std::cout << "\n -> " << successLut.at(result);
237+
std::cout << successLut.at(result);
201238

202239
if (result != passed)
203240
std::cout << " " << stepInfo.ScenarioInfo().FeatureInfo().Path() << ":" << stepInfo.Line() << ":" << stepInfo.Column();

cucumber_cpp/library/report/StdOutReport.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ namespace cucumber_cpp::library::report
1919
{
2020
struct StdOutReport : ReportHandlerV2
2121
{
22+
StdOutReport();
23+
2224
void FeatureStart(const engine::FeatureInfo& featureInfo) override;
2325
void FeatureEnd(engine::Result result, const engine::FeatureInfo& featureInfo, TraceTime::Duration duration) override;
2426

@@ -42,6 +44,8 @@ namespace cucumber_cpp::library::report
4244
private:
4345
std::uint32_t nrOfScenarios{ 0 };
4446
std::vector<const engine::ScenarioInfo*> failedScenarios;
47+
48+
std::size_t nestedSteps{ 1 };
4549
};
4650
}
4751

0 commit comments

Comments
 (0)