Skip to content

Commit 594b954

Browse files
committed
updated scenario results
1 parent a0203a4 commit 594b954

File tree

3 files changed

+59
-20
lines changed

3 files changed

+59
-20
lines changed

gtest/file_io.cc

+4-3
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ class file_io : public ::testing::Test
2424
void SetUp() override
2525
{
2626
cuke::registry().push_step(cuke::internal::step(
27-
[](const cuke::value_array&, const auto&, const auto&, const auto&) {}, "a step"));
27+
[](const cuke::value_array&, const auto&, const auto&, const auto&) {},
28+
"a step"));
2829
cuke::registry().push_step(cuke::internal::step(
2930
[](const cuke::value_array&, const auto&, const auto&, const auto&) {},
3031
"a step with {int} and {string}"));
@@ -58,8 +59,8 @@ template <typename T>
5859
[[nodiscard]] static std::size_t count(const std::vector<T>& results,
5960
cuke::results::test_status status)
6061
{
61-
return std::count_if(results.begin(), results.end(),
62-
[&status](const auto& s) { return s.status == status; });
62+
return std::count_if(results.begin(), results.end(), [&status](const auto& s)
63+
{ return s->status == status; });
6364
}
6465
} // namespace details
6566

src/cucumber.cpp

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
#include "cucumber.hpp"
2-
#include <algorithm>
32
#include "options.hpp"
43
#include "catalog.hpp"
5-
#include "registry.hpp"
64
#include "test_results.hpp"
75
#include "test_runner.hpp"
86
#include "util.hpp"
97

8+
#include <algorithm>
9+
1010
namespace cuke
1111
{
1212

@@ -16,18 +16,18 @@ void print_failed_scenarios()
1616
for (const results::feature& feature : results::test_results().data())
1717
{
1818
std::for_each(feature.scenarios.begin(), feature.scenarios.end(),
19-
[&first](const results::scenario& scenario)
19+
[&first](const auto& scenario)
2020
{
21-
if (scenario.status == results::test_status::failed)
21+
if (scenario->status == results::test_status::failed)
2222
{
2323
if (first)
2424
{
2525
println("Failed Scenarios:");
2626
first = false;
2727
}
28-
print(internal::color::red, scenario.name);
29-
println(internal::color::black, " ", scenario.file, ':',
30-
scenario.line);
28+
print(internal::color::red, scenario->name);
29+
println(internal::color::black, " ", scenario->file, ':',
30+
scenario->line);
3131
}
3232
});
3333
}

src/test_results.hpp

+48-10
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#pragma once
22

3+
#include <memory>
34
#include <vector>
45
#include <string>
56

@@ -16,19 +17,48 @@ enum class test_status
1617
struct step
1718
{
1819
test_status status{test_status::passed};
20+
std::size_t line;
21+
std::string name;
22+
std::string file;
1923
};
20-
struct scenario
24+
struct scenario_base
2125
{
26+
enum class type
27+
{
28+
scenario = 0,
29+
scenario_outline
30+
};
31+
32+
virtual ~scenario_base() = default;
33+
virtual type get_type() const = 0;
34+
2235
std::vector<step> steps{};
2336
test_status status{test_status::passed};
37+
std::size_t line;
2438
std::string name;
2539
std::string file;
26-
std::size_t line;
40+
};
41+
struct scenario : public scenario_base
42+
{
43+
scenario_base::type get_type() const override
44+
{
45+
return scenario_base::type::scenario;
46+
}
47+
};
48+
struct scenario_outline : public scenario_base
49+
{
50+
scenario_base::type get_type() const override
51+
{
52+
return scenario_base::type::scenario;
53+
}
2754
};
2855
struct feature
2956
{
30-
std::vector<scenario> scenarios{};
3157
test_status status{test_status::passed};
58+
std::vector<std::unique_ptr<scenario_base>> scenarios{};
59+
std::size_t line;
60+
std::string name;
61+
std::string file;
3262
};
3363

3464
class test_result
@@ -85,10 +115,18 @@ class test_result
85115
}
86116

87117
static void new_feature() { test_results().data().emplace_back(); }
88-
static void new_scenario() { test_results().back().scenarios.emplace_back(); }
118+
static void new_scenario()
119+
{
120+
test_results().back().scenarios.emplace_back(std::make_unique<scenario>());
121+
}
122+
static void new_scenario_outline()
123+
{
124+
test_results().back().scenarios.emplace_back(
125+
std::make_unique<scenario_outline>());
126+
}
89127
static void new_step()
90128
{
91-
test_results().back().scenarios.back().steps.emplace_back();
129+
test_results().back().scenarios.back()->steps.emplace_back();
92130
}
93131

94132
static void set_feature_to(test_status status)
@@ -97,21 +135,21 @@ static void set_feature_to(test_status status)
97135
}
98136
static void set_scenario_to(test_status status)
99137
{
100-
test_results().back().scenarios.back().status = status;
138+
test_results().back().scenarios.back()->status = status;
101139
}
102140
static void set_step_to(test_status status)
103141
{
104-
test_results().back().scenarios.back().steps.back().status = status;
142+
test_results().back().scenarios.back()->steps.back().status = status;
105143
}
106144

107145
[[nodiscard]] static feature& features_back() { return test_results().back(); }
108-
[[nodiscard]] static scenario& scenarios_back()
146+
[[nodiscard]] static scenario_base& scenarios_back()
109147
{
110-
return test_results().back().scenarios.back();
148+
return *test_results().back().scenarios.back();
111149
}
112150
[[nodiscard]] static step& steps_back()
113151
{
114-
return test_results().back().scenarios.back().steps.back();
152+
return test_results().back().scenarios.back()->steps.back();
115153
}
116154

117155
[[nodiscard]] std::string scenarios_to_string();

0 commit comments

Comments
 (0)