Skip to content

Commit bd80b57

Browse files
committed
feat: ndjson reporting - get pickle json from scenario info
1 parent 4997afe commit bd80b57

File tree

5 files changed

+24
-15
lines changed

5 files changed

+24
-15
lines changed

cucumber_cpp/acceptance_test/MainNdjsonAssertion.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,7 @@ int main(const int argc, char**argv)
1515

1616
CLI11_PARSE(app, argc, argv);
1717

18-
NdjsonComparer comparer;
19-
const bool areEquivalent = comparer.AreEquivalent(pathExpected, pathActual);
18+
const bool areEquivalent = NdjsonComparer::AreEquivalent(pathExpected, pathActual);
2019

2120
std::cout << (areEquivalent ? "true" : "false");
2221

cucumber_cpp/library/engine/FeatureFactory.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -187,9 +187,9 @@ namespace cucumber_cpp::library::engine
187187
return;
188188

189189
featureInfo.Scenarios().push_back(std::make_unique<ScenarioInfo>(
190+
pickle,
190191
featureInfo,
191192
std::move(tags),
192-
pickle.name,
193193
scenario.description,
194194
scenario.location.line,
195195
scenario.location.column.value_or(0)));
@@ -200,9 +200,9 @@ namespace cucumber_cpp::library::engine
200200
void ConstructScenario(const FeatureTreeFactory& featureTreeFactory, RuleInfo& ruleInfo, const FlatAst& flatAst, const cucumber::messages::scenario& scenario, const cucumber::messages::pickle& pickle, std::set<std::string, std::less<>> tags)
201201
{
202202
ruleInfo.Scenarios().push_back(std::make_unique<ScenarioInfo>(
203+
pickle,
203204
ruleInfo,
204205
std::move(tags),
205-
pickle.name,
206206
scenario.description,
207207
scenario.location.line,
208208
scenario.location.column.value_or(0)));

cucumber_cpp/library/engine/ScenarioInfo.cpp

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,19 @@
1616

1717
namespace cucumber_cpp::library::engine
1818
{
19-
ScenarioInfo::ScenarioInfo(const struct RuleInfo& ruleInfo, std::set<std::string, std::less<>> tags, std::string title, std::string description, std::size_t line, std::size_t column)
20-
: parentInfo{ &ruleInfo }
19+
ScenarioInfo::ScenarioInfo(cucumber::messages::pickle pickle, const struct RuleInfo& ruleInfo, std::set<std::string, std::less<>> tags, std::string description, std::size_t line, std::size_t column)
20+
: pickle(std::move(pickle))
21+
, parentInfo{ &ruleInfo }
2122
, tags{ std::move(tags) }
22-
, title{ std::move(title) }
2323
, description{ std::move(description) }
2424
, line{ line }
2525
, column{ column }
2626
{}
2727

28-
ScenarioInfo::ScenarioInfo(const struct FeatureInfo& featureInfo, std::set<std::string, std::less<>> tags, std::string title, std::string description, std::size_t line, std::size_t column)
29-
: parentInfo{ &featureInfo }
28+
ScenarioInfo::ScenarioInfo(cucumber::messages::pickle pickle, const struct FeatureInfo& featureInfo, std::set<std::string, std::less<>> tags, std::string description, std::size_t line, std::size_t column)
29+
: pickle(std::move(pickle))
30+
, parentInfo{ &featureInfo }
3031
, tags{ std::move(tags) }
31-
, title{ std::move(title) }
3232
, description{ std::move(description) }
3333
, line{ line }
3434
, column{ column }
@@ -61,7 +61,7 @@ namespace cucumber_cpp::library::engine
6161

6262
const std::string& ScenarioInfo::Title() const
6363
{
64-
return title;
64+
return pickle.name;
6565
}
6666

6767
const std::string& ScenarioInfo::Description() const
@@ -93,4 +93,10 @@ namespace cucumber_cpp::library::engine
9393
{
9494
return children;
9595
}
96+
97+
std::string ScenarioInfo::ToJson() const
98+
{
99+
return pickle.to_json();
100+
}
101+
96102
}

cucumber_cpp/library/engine/ScenarioInfo.hpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#include "cucumber_cpp/library/engine/RuleInfo.hpp"
55
#include "cucumber_cpp/library/engine/StepInfo.hpp"
66
#include <cstddef>
7+
#include <cucumber/messages/pickle.hpp>
78
#include <filesystem>
89
#include <functional>
910
#include <memory>
@@ -19,8 +20,8 @@ namespace cucumber_cpp::library::engine
1920

2021
struct ScenarioInfo
2122
{
22-
ScenarioInfo(const RuleInfo& ruleInfo, std::set<std::string, std::less<>> tags, std::string title, std::string description, std::size_t line, std::size_t column);
23-
ScenarioInfo(const FeatureInfo& featureInfo, std::set<std::string, std::less<>> tags, std::string title, std::string description, std::size_t line, std::size_t column);
23+
ScenarioInfo(cucumber::messages::pickle pickle, const RuleInfo& ruleInfo, std::set<std::string, std::less<>> tags, std::string description, std::size_t line, std::size_t column);
24+
ScenarioInfo(cucumber::messages::pickle pickle, const FeatureInfo& featureInfo, std::set<std::string, std::less<>> tags, std::string description, std::size_t line, std::size_t column);
2425

2526
[[nodiscard]] const struct FeatureInfo& FeatureInfo() const;
2627
[[nodiscard]] std::optional<std::reference_wrapper<const struct RuleInfo>> RuleInfo() const;
@@ -37,11 +38,13 @@ namespace cucumber_cpp::library::engine
3738
[[nodiscard]] std::vector<std::unique_ptr<StepInfo>>& Children();
3839
[[nodiscard]] const std::vector<std::unique_ptr<StepInfo>>& Children() const;
3940

41+
[[nodiscard]] std::string ToJson() const;
42+
4043
private:
44+
const cucumber::messages::pickle pickle;
4145
std::variant<const struct FeatureInfo*, const struct RuleInfo*> parentInfo;
4246

4347
std::set<std::string, std::less<>> tags;
44-
std::string title;
4548
std::string description;
4649

4750
std::size_t line;

cucumber_cpp/library/report/NdjsonReport.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@ namespace cucumber_cpp::library::report
5656
// TODO find a place to record first meta line.
5757
outStream << "{\"source\":" << featureInfo.SourceInfo()->ToJson() << "}\n";
5858
outStream << "{\"gherkinDocument\":" << featureInfo.ToJson() << "}\n";
59-
// TODO find where pickle definition is coming from
6059
// TODO testRunStarted
6160
}
6261

@@ -75,6 +74,8 @@ namespace cucumber_cpp::library::report
7574

7675
void NdjsonReport::ScenarioStart(const engine::ScenarioInfo& scenarioInfo)
7776
{
77+
// each scenario is a pickle
78+
outStream << "{\"pickle\":" << scenarioInfo.ToJson() << "}\n";
7879
}
7980

8081
void NdjsonReport::ScenarioEnd(engine::Result result, const engine::ScenarioInfo& scenarioInfo, TraceTime::Duration duration)

0 commit comments

Comments
 (0)