8#ifndef BEAST_UNIT_TEST_SUITE_HPP
9#define BEAST_UNIT_TEST_SUITE_HPP
11#include <xrpl/beast/unit_test/runner.h>
12#include <boost/filesystem.hpp>
13#include <boost/lexical_cast.hpp>
14#include <boost/throw_exception.hpp>
24template <
class String>
31 namespace fs = boost::filesystem;
32 s.
append(fs::path{file}.filename().
string());
34 s.
append(boost::lexical_cast<std::string>(line));
64 what() const noexcept
override
66 return "test suite aborted";
70 template <
class CharT,
class Traits,
class Allocator>
88 auto const& s = this->
str();
111 class scoped_testcase;
180 template <
class =
void>
185 template <
class =
void>
198 template <
class String>
200 fail(String
const& reason,
char const* file,
int line);
202 template <
class =
void>
225 template <
class Condition>
229 return expect(shouldBeTrue,
"");
232 template <
class Condition,
class String>
234 expect(Condition
const& shouldBeTrue, String
const& reason);
236 template <
class Condition>
238 expect(Condition
const& shouldBeTrue,
char const* file,
int line)
240 return expect(shouldBeTrue,
"", file, line);
243 template <
class Condition,
class String>
246 Condition
const& shouldBeTrue,
247 String
const& reason,
256 template <
class F,
class String>
258 except(F&& f, String
const& reason);
265 template <
class E,
class F,
class String>
267 except(F&& f, String
const& reason);
268 template <
class E,
class F>
272 return except<E>(f,
"");
274 template <
class F,
class String>
276 unexcept(F&& f, String
const& reason);
293 template <
class Condition,
class String>
295 unexpected(Condition shouldBeFalse, String
const& reason);
297 template <
class Condition>
310 static suite* pts =
nullptr;
321 template <
class =
void>
341 auto const& name =
ss_.
str();
383 return {suite_, ss_};
390 return {suite_, ss_, t};
412template <
class Condition,
class String>
425template <
class Condition,
class String>
428 Condition
const& shouldBeTrue,
429 String
const& reason,
444template <
class F,
class String>
461template <
class E,
class F,
class String>
478template <
class F,
class String>
495template <
class Condition,
class String>
499 bool const b =
static_cast<bool>(shouldBeFalse);
529template <
class String>
572#define BEAST_EXPECT(cond) expect(cond, __FILE__, __LINE__)
580#define BEAST_EXPECTS(cond, reason) \
581 ((cond) ? (pass(), true) : (fail((reason), __FILE__, __LINE__), false))
591#define BEAST_DEFINE_TESTSUITE_INSERT( \
592 Class, Module, Library, manual, priority) \
593 static beast::unit_test::detail::insert_suite<Class##_test> \
594 Library##Module##Class##_test_instance( \
595 #Class, #Module, #Library, manual, priority)
604#ifndef BEAST_DEFINE_TESTSUITE
611#ifndef BEAST_NO_UNIT_TEST_INLINE
612#define BEAST_NO_UNIT_TEST_INLINE 0
642#if BEAST_NO_UNIT_TEST_INLINE
643#define BEAST_DEFINE_TESTSUITE(Class, Module, Library)
644#define BEAST_DEFINE_TESTSUITE_MANUAL(Class, Module, Library)
645#define BEAST_DEFINE_TESTSUITE_PRIO(Class, Module, Library, Priority)
646#define BEAST_DEFINE_TESTSUITE_MANUAL_PRIO(Class, Module, Library, Priority)
649#include <xrpl/beast/unit_test/global_suites.h>
650#define BEAST_DEFINE_TESTSUITE(Class, Module, Library) \
651 BEAST_DEFINE_TESTSUITE_INSERT(Class, Module, Library, false, 0)
652#define BEAST_DEFINE_TESTSUITE_MANUAL(Class, Module, Library) \
653 BEAST_DEFINE_TESTSUITE_INSERT(Class, Module, Library, true, 0)
654#define BEAST_DEFINE_TESTSUITE_PRIO(Class, Module, Library, Priority) \
655 BEAST_DEFINE_TESTSUITE_INSERT(Class, Module, Library, false, Priority)
656#define BEAST_DEFINE_TESTSUITE_MANUAL_PRIO(Class, Module, Library, Priority) \
657 BEAST_DEFINE_TESTSUITE_INSERT(Class, Module, Library, true, Priority)
Unit test runner interface.
void log(std::string const &s)
void arg(std::string const &s)
Set the argument string.
void fail(std::string const &reason)
void testcase(std::string const &name)
log_buf< CharT, Traits, Allocator > buf_
scoped_testcase & operator<<(T const &t)
scoped_testcase & operator=(scoped_testcase const &)=delete
scoped_testcase(suite &self, std::stringstream &ss, T const &t)
scoped_testcase(suite &self, std::stringstream &ss)
scoped_testcase operator<<(T const &t)
void operator()(std::string const &name, abort_t abort=no_abort_on_fail)
Open a new testcase.
log_os< char > log
Logging output stream.
bool expect(Condition const &shouldBeTrue, char const *file, int line)
suite & operator=(suite const &)=delete
void pass()
Record a successful test condition.
static suite * this_suite()
Returns the "current" running suite.
void operator()(runner &r)
Invokes the test using the specified runner.
static suite ** p_this_suite()
bool unexpected(Condition shouldBeFalse)
bool unexpected(Condition shouldBeFalse, String const &reason)
testcase_t testcase
Memberspace for declaring test cases.
std::string const & arg() const
Return the argument associated with the runner.
bool unexcept(F &&f, String const &reason)
bool expect(Condition const &shouldBeTrue)
Evaluate a test condition.
suite(suite const &)=delete
bool except(F &&f, String const &reason)
virtual void run()=0
Runs the suite.
void fail(String const &reason, char const *file, int line)
Record a failure.
Replacement for std::thread that handles exceptions in unit tests.
static std::string make_reason(String const &reason, char const *file, int line)
char const * what() const noexcept override