46#ifndef MICRO_TEST_PLUS_TEST_INLINES_H_
47#define MICRO_TEST_PLUS_TEST_INLINES_H_
58#include <micro-os-plus/diag/trace.h>
66#pragma GCC diagnostic push
67#pragma GCC diagnostic ignored "-Waggregate-return"
69#pragma clang diagnostic ignored "-Wunknown-warning-option"
70#pragma clang diagnostic ignored "-Wc++98-compat"
71#pragma clang diagnostic ignored "-Wc++98-compat-pedantic"
73#pragma GCC diagnostic ignored "-Wredundant-tags"
188 template <
typename Self_T>
189 template <
typename Callable_T,
typename... Args_T>
192 Args_T&&... arguments)
200 if constexpr (
sizeof...(arguments) == 0)
202 callable_ = std::forward<Callable_T> (callable);
206 callable_ = std::bind (std::forward<Callable_T> (callable),
207 std::placeholders::_1,
208 std::forward<Args_T> (arguments)...);
211#if defined(MICRO_OS_PLUS_MICRO_TEST_PLUS_TRACE_CONSTRUCTORS_ENABLED)
213#pragma GCC diagnostic push
214#if defined(__clang__)
215#pragma clang diagnostic ignored "-Wunsafe-buffer-usage-in-libc-call"
218 trace::printf (
"%s '%s' %zu\n", __PRETTY_FUNCTION__,
name,
own_index_);
220#pragma GCC diagnostic pop
231 template <
typename Self_T>
234#if defined(MICRO_OS_PLUS_MICRO_TEST_PLUS_TRACE_CONSTRUCTORS_ENABLED)
236#pragma GCC diagnostic push
237#if defined(__clang__)
238#pragma clang diagnostic ignored "-Wunsafe-buffer-usage-in-libc-call"
241 trace::printf (
"%s '%s'\n", __PRETTY_FUNCTION__,
name_);
243#pragma GCC diagnostic pop
258 template <
typename Callable_T,
typename... Args_T>
262 Args_T&&... arguments)
264 std::forward<Callable_T> (callable),
265 std::forward<Args_T> (arguments)... },
266 parent_suite_{ parent_suite }, nesting_depth_{ nesting_depth }
268#if defined(MICRO_OS_PLUS_MICRO_TEST_PLUS_TRACE_CONSTRUCTORS_ENABLED)
270#pragma GCC diagnostic push
271#if defined(__clang__)
272#pragma clang diagnostic ignored "-Wunsafe-buffer-usage-in-libc-call"
275 trace::printf (
"%s '%s' %zu %zu\n", __PRETTY_FUNCTION__, name, own_index_,
278#pragma GCC diagnostic pop
289 template <
typename Callable_T,
typename... Args_T>
292 Args_T&&... arguments)
294#if defined(MICRO_OS_PLUS_MICRO_TEST_PLUS_TRACE_ENABLED)
296#pragma GCC diagnostic push
297#if defined(__clang__)
298#pragma clang diagnostic ignored "-Wunsafe-buffer-usage-in-libc-call"
301 trace::printf (
"%s '%s'\n", __PRETTY_FUNCTION__,
name);
303#pragma GCC diagnostic pop
308 auto child_subtest = std::make_unique<subtest> (
310 std::forward<Callable_T> (callable),
311 std::forward<Args_T> (arguments)...);
322 template <
class Expr_T>
337 template <
class Expr_T>
365 template <
typename Callable_T,
typename... Args_T>
367 Args_T&&... arguments)
369 std::forward<Args_T> (arguments)... }
371#if defined(MICRO_OS_PLUS_MICRO_TEST_PLUS_TRACE_CONSTRUCTORS_ENABLED)
373#pragma GCC diagnostic push
374#if defined(__clang__)
375#pragma clang diagnostic ignored "-Wunsafe-buffer-usage-in-libc-call"
378 trace::printf (
"%s '%s' %zu\n", __PRETTY_FUNCTION__, name, own_index_);
380#pragma GCC diagnostic pop
386#pragma GCC diagnostic push
387#if defined(__clang__)
388#pragma clang diagnostic ignored "-Wdocumentation"
427#pragma GCC diagnostic pop
429 template <
typename Callable_T,
typename... Args_T>
433#if defined(MICRO_OS_PLUS_MICRO_TEST_PLUS_TRACE_ENABLED)
435#pragma GCC diagnostic push
436#if defined(__clang__)
437#pragma clang diagnostic ignored "-Wunsafe-buffer-usage-in-libc-call"
440 trace::printf (
"%s '%s'\n", __PRETTY_FUNCTION__,
name);
442#pragma GCC diagnostic pop
449 std::forward<Callable_T> (callable),
450 std::forward<Args_T> (arguments)...);
498 template <
typename Callable_T,
typename... Args_T>
500 Callable_T&& callable, Args_T&&... arguments)
505 if constexpr (
sizeof...(arguments) == 0)
512 std::placeholders::_1,
513 std::forward<Args_T> (arguments)...);
516#if defined(MICRO_OS_PLUS_MICRO_TEST_PLUS_TRACE_CONSTRUCTORS_ENABLED)
518#pragma GCC diagnostic push
519#if defined(__clang__)
520#pragma clang diagnostic ignored "-Wunsafe-buffer-usage-in-libc-call"
523 trace::printf (
"%s '%s' %zu\n", __PRETTY_FUNCTION__,
name,
own_index_);
525#pragma GCC diagnostic pop
536#pragma GCC diagnostic pop
Deferred reporter class for a specific expression.
class runner & runner(void) const noexcept
Gets the test runner associated with this test runnable.
size_t current_subtest_index() const noexcept
Returns the index of the most recently created child subtest.
runnable_base(const char *name, runner &runner, size_t own_index)
Constructs a runnable_base with a name, runner, and index.
void after_subtest_create_(std::unique_ptr< subtest > child_test, suite &suite)
size_t own_index_
The test index, counting from 1.
size_t own_index() const noexcept
Returns the positional index of this object within its parent.
size_t current_subtest_index_
The subtest index, counting from 1.
class reporter & reporter(void) const noexcept
size_t children_subtests_count(void) const noexcept
Returns the number of direct child subtests owned by this node.
class runner & runner_
Reference to the test runner that owns this object.
size_t increment_subtest_index() noexcept
Increments and returns the child subtest sequential index.
std::vector< std::unique_ptr< subtest > > children_subtests_
Owning collection of direct child subtests.
std::function< void(suite &)> callable_
runnable(const char *name, class runner &runner, size_t own_index, Callable_T &&callable, Args_T &&... arguments)
Class template constructor.
virtual ~runnable() override
Virtual destructor.
Aggregated pass/fail/subtest counters for a node in the test tree.
const char * name(void) const noexcept
Gets the node name.
runner_totals totals_
Totals for the test node, including nested cases.
runner_totals & totals() noexcept
Gets the totals for the test.
const char * name_
The test node name.
A begin/end timestamp pair used to measure elapsed time.
Local implementation of source location information for diagnostics.
detail::expression_formatter & expression()
Provides access to the expression formatter for this reporter.
The test runner for the µTest++ framework.
A runner variant that also manages statically-registered test suites.
std::function< void(static_suite &)> static_callable_
Callable storing the static suite body and any bound arguments. Invoked with a reference to the concr...
static_suite(const char *name, static_runner &runner, Callable_T &&callable, Args_T &&... arguments)
Class template constructor for static_suite.
suite & parent_suite_
Reference to the parent suite that owns this subtest.
void test(const char *name, Callable_T &&callable, Args_T &&... arguments)
Adds a test case to the suite.
subtest(const char *name, class runner &runner, suite &parent_suite, size_t own_index, size_t nesting_depth, Callable_T &&callable, Args_T &&... arguments)
Constructs a subtest with a name, runner, parent suite, index, nesting depth, and callable.
size_t nesting_depth_
The nesting depth of this subtest within the suite.
size_t nesting_depth() const noexcept
Returns the nesting depth of this subtest.
A named, runnable test suite registered with the test runner.
suite(const char *name, class runner &runner, Callable_T &&callable, Args_T &&... arguments)
Constructs a suite with a name, runner, and callable body.
detail::timestamps timings_
Timing measurements for this suite's execution.
detail::timestamps & timings() noexcept
Gets the timings for this suite.
void test(const char *name, Callable_T &&callable, Args_T &&... arguments)
Adds a test case to the suite.
const char * name(void) const noexcept
Gets the node name.
C++20 concept satisfied when a type can be used as a test expression in expect() or assume().
C++ header file with declarations for the µTest++ deferred reporter.
auto assume(const Expr_T &expr, const reflection::source_location &sl=reflection::source_location::current())
Check a condition and, if false, abort test execution.
auto expect(const Expr_T &expr, const reflection::source_location &sl=reflection::source_location::current())
Evaluate a generic condition and report the results.
Internal implementation details for the µTest++ framework.
void register_static_suite(static_runner &static_runner_ref, static_suite &static_suite_ref)
Registers a static suite with a static runner.
Primary namespace for the µTest++ testing framework.
C++ header file with declarations for the µTest++ test reporter.