31#include "internals/TestRun.h"
35#define describe(name, ...) \
36 [[maybe_unused]] const auto t_##name = crossedfingers::internals::TestRun::instance().addSuite(#name, __VA_ARGS__)
38inline auto skip() ->
void {
39 crossedfingers::internals::Assertion::_skip();
42inline auto fail(
const std::string &message) ->
void {
43 crossedfingers::internals::Assertion::_fail(message);
46inline auto it(
const std::string &name,
const std::function<
void()> &callback) ->
void {
47 crossedfingers::internals::TestRun::instance().addCase(name, callback);
50template<
typename Callback,
typename... Args>
52 const std::vector<std::tuple<Args...>> &args_list,
const std::string &template_name,
const Callback *callback
54 for (
const auto &args : args_list) {
55 const auto name = std::apply(
56 [&template_name](
auto &&...format_args) {
57 return std::vformat(template_name, std::make_format_args(format_args...));
61 crossedfingers::internals::TestRun::instance().addParameterizedCase(name, args, callback);
65inline auto before(
const std::function<
void()> &callback) ->
void {
66 crossedfingers::internals::TestRun::instance().addBefore(callback);
69inline auto beforeEach(
const std::function<
void()> &callback) ->
void {
70 crossedfingers::internals::TestRun::instance().addBeforeEach(callback);
73inline auto after(
const std::function<
void()> &callback) ->
void {
74 crossedfingers::internals::TestRun::instance().addAfter(callback);
77inline auto afterEach(
const std::function<
void()> &callback) ->
void {
78 crossedfingers::internals::TestRun::instance().addAfterEach(callback);