7#include <xrpl/beast/unit_test/runner.h>
9#include <boost/filesystem.hpp>
10#include <boost/lexical_cast.hpp>
11#include <boost/throw_exception.hpp>
21template <
class String>
23makeReason(String
const& reason,
char const* file,
int line)
28 namespace fs = boost::filesystem;
29 s.
append(fs::path{file}.filename().
string());
31 s.
append(boost::lexical_cast<std::string>(line));
60 [[nodiscard]]
char const*
61 what() const noexcept
override
63 return "test suite aborted";
67 template <
class CharT,
class Traits,
class Allocator>
85 auto const& s = this->
str();
107 class ScopedTestcase;
176 template <
class =
void>
181 template <
class =
void>
194 template <
class String>
196 fail(String
const& reason,
char const* file,
int line);
198 template <
class =
void>
221 template <
class Condition>
225 return expect(shouldBeTrue,
"");
228 template <
class Condition,
class String>
230 expect(Condition
const& shouldBeTrue, String
const& reason);
232 template <
class Condition>
234 expect(Condition
const& shouldBeTrue,
char const* file,
int line)
236 return expect(shouldBeTrue,
"", file, line);
239 template <
class Condition,
class String>
241 expect(Condition
const& shouldBeTrue, String
const& reason,
char const* file,
int line);
248 template <
class F,
class String>
250 except(F&& f, String
const& reason);
257 template <
class E,
class F,
class String>
259 except(F&& f, String
const& reason);
260 template <
class E,
class F>
266 template <
class F,
class String>
268 unexcept(F&& f, String
const& reason);
285 template <
class Condition,
class String>
287 unexpected(Condition shouldBeFalse, String
const& reason);
289 template <
class Condition>
302 static Suite* kPTs =
nullptr;
313 template <
class =
void>
333 auto const& name =
ss_.str();
335 suite_.runner_->testcase(name);
367 suite_.runner_->testcase(name);
403template <
class Condition,
class String>
416template <
class Condition,
class String>
418Suite::expect(Condition
const& shouldBeTrue, String
const& reason,
char const* file,
int line)
431template <
class F,
class String>
448template <
class E,
class F,
class String>
465template <
class F,
class String>
482template <
class Condition,
class String>
486 bool const b =
static_cast<bool>(shouldBeFalse);
520template <
class String>
554 runner_->fail(
"unhandled exception");
563#define BEAST_EXPECT(cond) expect(cond, __FILE__, __LINE__)
571#define BEAST_EXPECTS(cond, reason) \
572 ((cond) ? (pass(), true) : (fail((reason), __FILE__, __LINE__), false))
581#define BEAST_DEFINE_TESTSUITE_INSERT(Class, Module, Library, manual, priority) \
582 static beast::unit_test::detail::InsertSuite<Class##_test> \
583 Library##Module##Class##_test_instance(#Class, #Module, #Library, manual, priority)
592#ifndef BEAST_DEFINE_TESTSUITE
599#ifndef BEAST_NO_UNIT_TEST_INLINE
600#define BEAST_NO_UNIT_TEST_INLINE 0
630#if BEAST_NO_UNIT_TEST_INLINE
631#define BEAST_DEFINE_TESTSUITE(Class, Module, Library)
632#define BEAST_DEFINE_TESTSUITE_MANUAL(Class, Module, Library)
633#define BEAST_DEFINE_TESTSUITE_PRIO(Class, Module, Library, Priority)
634#define BEAST_DEFINE_TESTSUITE_MANUAL_PRIO(Class, Module, Library, Priority)
637#include <xrpl/beast/unit_test/global_suites.h>
638#define BEAST_DEFINE_TESTSUITE(Class, Module, Library) \
639 BEAST_DEFINE_TESTSUITE_INSERT(Class, Module, Library, false, 0)
640#define BEAST_DEFINE_TESTSUITE_MANUAL(Class, Module, Library) \
641 BEAST_DEFINE_TESTSUITE_INSERT(Class, Module, Library, true, 0)
642#define BEAST_DEFINE_TESTSUITE_PRIO(Class, Module, Library, Priority) \
643 BEAST_DEFINE_TESTSUITE_INSERT(Class, Module, Library, false, Priority)
644#define BEAST_DEFINE_TESTSUITE_MANUAL_PRIO(Class, Module, Library, Priority) \
645 BEAST_DEFINE_TESTSUITE_INSERT(Class, Module, Library, true, Priority)
Unit test runner interface.
LogBuf< CharT, Traits, Allocator > buf_
ScopedTestcase & operator=(ScopedTestcase const &)=delete
ScopedTestcase(Suite &self, std::stringstream &ss)
ScopedTestcase(Suite &self, std::stringstream &ss, T const &t)
ScopedTestcase & operator<<(T const &t)
ScopedTestcase operator<<(T const &t)
void operator()(std::string const &name, AbortT abort=AbortT::NoAbortOnFail)
Open a new testcase.
bool except(F &&f, String const &reason)
bool unexpected(Condition shouldBeFalse, String const &reason)
bool unexcept(F &&f, String const &reason)
void pass()
Record a successful test condition.
void propagateAbort() const
static Suite * thisSuite()
Returns the "current" running suite.
void operator()(Runner &r)
Invokes the test using the specified runner.
Suite & operator=(Suite const &)=delete
bool expect(Condition const &shouldBeTrue)
Evaluate a test condition.
void fail(String const &reason, char const *file, int line)
Record a failure.
bool expect(Condition const &shouldBeTrue, char const *file, int line)
Suite(Suite const &)=delete
virtual void run()=0
Runs the suite.
static Suite ** pThisSuite()
LogOs< char > log
Logging output stream.
bool unexpected(Condition shouldBeFalse)
TestcaseT testcase
Memberspace for declaring test cases.
std::string const & arg() const
Return the argument associated with the runner.
static std::string makeReason(String const &reason, char const *file, int line)
char const * what() const noexcept override