xrpld
Toggle main menu visibility
Loading...
Searching...
No Matches
include
xrpl
beast
unit_test
runner.h
1
// Distributed under the Boost Software License, Version 1.0. (See accompanying
2
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
3
//
4
5
#pragma once
6
7
#include <xrpl/beast/unit_test/suite_info.h>
8
9
#include <boost/assert.hpp>
10
11
#include <
mutex
>
12
#include <
string
>
13
14
namespace
beast::unit_test
{
15
22
class
Runner
23
{
24
std::string
arg_
;
25
bool
default_
=
false
;
26
bool
failed_
=
false
;
27
bool
cond_
=
false
;
28
std::recursive_mutex
mutex_
;
29
30
public
:
31
Runner
() =
default
;
32
virtual
~Runner
() =
default
;
33
Runner
(
Runner
const
&) =
delete
;
34
Runner
&
35
operator=
(
Runner
const
&) =
delete
;
36
45
void
46
arg
(
std::string
const
& s)
47
{
48
arg_
= s;
49
}
50
54
[[nodiscard]]
std::string
const
&
55
arg
()
const
56
{
57
return
arg_
;
58
}
59
64
template
<
class
=
void
>
65
bool
66
run
(
SuiteInfo
const
& s);
67
75
template
<
class
FwdIter>
76
bool
77
run
(FwdIter first, FwdIter last);
78
87
template
<
class
FwdIter,
class
Pred>
88
bool
89
runIf
(FwdIter first, FwdIter last, Pred pred = Pred{});
90
95
template
<
class
SequenceContainer>
96
bool
97
runEach
(SequenceContainer
const
& c);
98
107
template
<
class
SequenceContainer,
class
Pred>
108
bool
109
runEachIf
(SequenceContainer
const
& c, Pred pred = Pred{});
110
111
protected
:
115
virtual
void
116
onSuiteBegin
(
SuiteInfo
const
&)
117
{
118
}
119
123
virtual
void
124
onSuiteEnd
()
125
{
126
}
127
131
virtual
void
132
onCaseBegin
(
std::string
const
&)
133
{
134
}
135
139
virtual
void
140
onCaseEnd
()
141
{
142
}
143
147
virtual
void
148
onPass
()
149
{
150
}
151
155
virtual
void
156
onFail
(
std::string
const
&)
157
{
158
}
159
163
virtual
void
164
onLog
(
std::string
const
&)
165
{
166
}
167
168
private
:
169
friend
class
Suite
;
170
171
// Start a new testcase.
172
template
<
class
=
void
>
173
void
174
testcase
(
std::string
const
& name);
175
176
template
<
class
=
void
>
177
void
178
pass
();
179
180
template
<
class
=
void
>
181
void
182
fail
(
std::string
const
& reason);
183
184
template
<
class
=
void
>
185
void
186
log
(
std::string
const
& s);
187
};
188
189
//------------------------------------------------------------------------------
190
191
template
<
class
>
192
bool
193
Runner::run
(
SuiteInfo
const
& s)
194
{
195
// Enable 'default' testcase
196
default_
=
true
;
197
failed_
=
false
;
198
onSuiteBegin
(s);
199
s.
run
(*
this
);
200
// Forgot to call pass or fail.
201
BOOST_ASSERT(
cond_
);
202
onCaseEnd
();
203
onSuiteEnd
();
204
return
failed_
;
205
}
206
207
template
<
class
FwdIter>
208
bool
209
Runner::run
(FwdIter first, FwdIter last)
210
{
211
bool
failed(
false
);
212
for
(; first != last; ++first)
213
failed =
run
(*first) || failed;
214
return
failed;
215
}
216
217
template
<
class
FwdIter,
class
Pred>
218
bool
219
Runner::runIf
(FwdIter first, FwdIter last, Pred pred)
220
{
221
bool
failed(
false
);
222
for
(; first != last; ++first)
223
{
224
if
(pred(*first))
225
failed =
run
(*first) || failed;
226
}
227
return
failed;
228
}
229
230
template
<
class
SequenceContainer>
231
bool
232
Runner::runEach
(SequenceContainer
const
& c)
233
{
234
bool
failed(
false
);
235
for
(
auto
const
& s : c)
236
failed =
run
(s) || failed;
237
return
failed;
238
}
239
240
template
<
class
SequenceContainer,
class
Pred>
241
bool
242
Runner::runEachIf
(SequenceContainer
const
& c, Pred pred)
243
{
244
bool
failed(
false
);
245
for
(
auto
const
& s : c)
246
{
247
if
(pred(s))
248
failed =
run
(s) || failed;
249
}
250
return
failed;
251
}
252
253
template
<
class
>
254
void
255
Runner::testcase
(
std::string
const
& name)
256
{
257
std::scoped_lock
const
lock(
mutex_
);
258
// Name may not be empty
259
BOOST_ASSERT(
default_
|| !name.
empty
());
260
// Forgot to call pass or fail
261
BOOST_ASSERT(
default_
||
cond_
);
262
if
(!
default_
)
263
onCaseEnd
();
264
default_
=
false
;
265
cond_
=
false
;
266
onCaseBegin
(name);
267
}
268
269
template
<
class
>
270
void
271
Runner::pass
()
272
{
273
std::scoped_lock
const
lock(
mutex_
);
274
if
(
default_
)
275
testcase
(
""
);
276
onPass
();
277
cond_
=
true
;
278
}
279
280
template
<
class
>
281
void
282
Runner::fail
(
std::string
const
& reason)
283
{
284
std::scoped_lock
const
lock(
mutex_
);
285
if
(
default_
)
286
testcase
(
""
);
287
onFail
(reason);
288
failed_
=
true
;
289
cond_
=
true
;
290
}
291
292
template
<
class
>
293
void
294
Runner::log
(
std::string
const
& s)
295
{
296
std::scoped_lock
const
lock(
mutex_
);
297
if
(
default_
)
298
testcase
(
""
);
299
onLog
(s);
300
}
301
302
}
// namespace beast::unit_test
std::string
beast::unit_test::Runner::runEachIf
bool runEachIf(SequenceContainer const &c, Pred pred=Pred{})
Conditionally run suites in a container.
Definition
runner.h:242
beast::unit_test::Runner::default_
bool default_
Definition
runner.h:25
beast::unit_test::Runner::cond_
bool cond_
Definition
runner.h:27
beast::unit_test::Runner::failed_
bool failed_
Definition
runner.h:26
beast::unit_test::Runner::arg_
std::string arg_
Definition
runner.h:24
beast::unit_test::Runner::fail
void fail(std::string const &reason)
Definition
runner.h:282
beast::unit_test::Runner::~Runner
virtual ~Runner()=default
beast::unit_test::Runner::Runner
Runner()=default
beast::unit_test::Runner::testcase
void testcase(std::string const &name)
Definition
runner.h:255
beast::unit_test::Runner::onCaseBegin
virtual void onCaseBegin(std::string const &)
Called when a new case starts.
Definition
runner.h:132
beast::unit_test::Runner::Suite
friend class Suite
Definition
runner.h:169
beast::unit_test::Runner::onSuiteEnd
virtual void onSuiteEnd()
Called when a suite ends.
Definition
runner.h:124
beast::unit_test::Runner::mutex_
std::recursive_mutex mutex_
Definition
runner.h:28
beast::unit_test::Runner::Runner
Runner(Runner const &)=delete
beast::unit_test::Runner::onLog
virtual void onLog(std::string const &)
Called when a test logs output.
Definition
runner.h:164
beast::unit_test::Runner::runEach
bool runEach(SequenceContainer const &c)
Run all suites in a container.
Definition
runner.h:232
beast::unit_test::Runner::run
bool run(SuiteInfo const &s)
Run the specified suite.
Definition
runner.h:193
beast::unit_test::Runner::runIf
bool runIf(FwdIter first, FwdIter last, Pred pred=Pred{})
Conditionally run a sequence of suites.
Definition
runner.h:219
beast::unit_test::Runner::log
void log(std::string const &s)
Definition
runner.h:294
beast::unit_test::Runner::onCaseEnd
virtual void onCaseEnd()
Called when a new case ends.
Definition
runner.h:140
beast::unit_test::Runner::onSuiteBegin
virtual void onSuiteBegin(SuiteInfo const &)
Called when a new suite starts.
Definition
runner.h:116
beast::unit_test::Runner::pass
void pass()
Definition
runner.h:271
beast::unit_test::Runner::arg
std::string const & arg() const
Returns the argument string.
Definition
runner.h:55
beast::unit_test::Runner::arg
void arg(std::string const &s)
Set the argument string.
Definition
runner.h:46
beast::unit_test::Runner::onFail
virtual void onFail(std::string const &)
Called for each failing condition.
Definition
runner.h:156
beast::unit_test::Runner::operator=
Runner & operator=(Runner const &)=delete
beast::unit_test::Runner::onPass
virtual void onPass()
Called for each passing condition.
Definition
runner.h:148
beast::unit_test::SuiteInfo
Associates a unit test type with metadata.
Definition
suite_info.h:20
beast::unit_test::SuiteInfo::run
void run(Runner &r) const
Run a new instance of the associated test suite.
Definition
suite_info.h:87
std::string::empty
T empty(T... args)
mutex
beast::unit_test
Definition
include/xrpl/beast/unit_test/amount.h:11
std::recursive_mutex
std::scoped_lock
string
Generated by
1.17.0