1
1
#pragma once
2
2
3
+ #include < memory>
3
4
#include < vector>
4
5
#include < string>
5
6
@@ -16,19 +17,48 @@ enum class test_status
16
17
struct step
17
18
{
18
19
test_status status{test_status::passed};
20
+ std::size_t line;
21
+ std::string name;
22
+ std::string file;
19
23
};
20
- struct scenario
24
+ struct scenario_base
21
25
{
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
+
22
35
std::vector<step> steps{};
23
36
test_status status{test_status::passed};
37
+ std::size_t line;
24
38
std::string name;
25
39
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
+ }
27
54
};
28
55
struct feature
29
56
{
30
- std::vector<scenario> scenarios{};
31
57
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;
32
62
};
33
63
34
64
class test_result
@@ -85,10 +115,18 @@ class test_result
85
115
}
86
116
87
117
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
+ }
89
127
static void new_step ()
90
128
{
91
- test_results ().back ().scenarios .back (). steps .emplace_back ();
129
+ test_results ().back ().scenarios .back ()-> steps .emplace_back ();
92
130
}
93
131
94
132
static void set_feature_to (test_status status)
@@ -97,21 +135,21 @@ static void set_feature_to(test_status status)
97
135
}
98
136
static void set_scenario_to (test_status status)
99
137
{
100
- test_results ().back ().scenarios .back (). status = status;
138
+ test_results ().back ().scenarios .back ()-> status = status;
101
139
}
102
140
static void set_step_to (test_status status)
103
141
{
104
- test_results ().back ().scenarios .back (). steps .back ().status = status;
142
+ test_results ().back ().scenarios .back ()-> steps .back ().status = status;
105
143
}
106
144
107
145
[[nodiscard]] static feature& features_back () { return test_results ().back (); }
108
- [[nodiscard]] static scenario & scenarios_back ()
146
+ [[nodiscard]] static scenario_base & scenarios_back ()
109
147
{
110
- return test_results ().back ().scenarios .back ();
148
+ return * test_results ().back ().scenarios .back ();
111
149
}
112
150
[[nodiscard]] static step& steps_back ()
113
151
{
114
- return test_results ().back ().scenarios .back (). steps .back ();
152
+ return test_results ().back ().scenarios .back ()-> steps .back ();
115
153
}
116
154
117
155
[[nodiscard]] std::string scenarios_to_string ();
0 commit comments