Skip to main content

runnable_base Class

Non-template base for all runnable objects (suites and subtests). More...

Declaration

class micro_os_plus::micro_test_plus::detail::runnable_base { ... }

Included Headers

Base class

classtest_node

Base class for runners and runable tests. More...

Derived Classes

classrunnable<Self_T>

CRTP base class factoring out callable storage, rule-of-five, and run() logic shared by subtest and suite. More...

classrunnable<Self_T>

CRTP base class factoring out callable storage, rule-of-five, and run() logic shared by subtest and suite. More...

classrunnable<Self_T>

CRTP base class factoring out callable storage, rule-of-five, and run() logic shared by subtest and suite. More...

Public Constructors Index

runnable_base (const char *name, runner &runner, size_t own_index)

Constructs a runnable_base with a name, runner, and index. More...

runnable_base (const runnable_base &)=delete

Deleted copy constructor to prevent copying. More...

runnable_base (runnable_base &&)=delete

Deleted move constructor to prevent moving. More...

Public Destructor Index

~runnable_base () override

Virtual destructor. More...

Public Operators Index

runnable_base &operator= (const runnable_base &)=delete

Deleted copy assignment operator to prevent copying. More...

runnable_base &operator= (runnable_base &&)=delete

Deleted move assignment operator to prevent moving. More...

Public Member Functions Index

voidabort (const reflection::source_location &sl=reflection::source_location::current())

Aborts test execution via the owning runner. More...

size_tchildren_subtests_count (void) const noexcept

Returns the number of direct child subtests owned by this node. More...

size_tcurrent_subtest_index () const noexcept

Returns the index of the most recently created child subtest. More...

size_tincrement_subtest_index () noexcept

Increments and returns the child subtest sequential index. More...

const char *name (void) const noexcept

Gets the node name. More...

size_town_index () const noexcept

Returns the positional index of this object within its parent. More...

voidown_index (size_t index) noexcept

Sets the positional index of this object within its parent. More...

class reporter &reporter (void) const noexcept

Gets the test reporter associated with this test runnable. More...

class runner &runner (void) const noexcept

Gets the test runner associated with this test runnable. More...

const runner_totals &totals () const noexcept

Gets the totals for the test (const overload). More...

runner_totals &totals () noexcept

Gets the totals for the test. More...

Protected Member Functions Index

voidafter_subtest_create_ (std::unique_ptr< subtest > child_test, suite &suite)

Registers a newly constructed child subtest and executes it immediately. More...

Protected Member Attributes Index

std::vector< std::unique_ptr< subtest > >children_subtests_

Owning collection of direct child subtests. More...

size_tcurrent_subtest_index_ = 0

The subtest index, counting from 1. More...

const char *name_

The test node name. More...

size_town_index_

The test index, counting from 1. More...

class { ... }runner_

Reference to the test runner that owns this object. More...

runner_totalstotals_

Totals for the test node, including nested cases. More...

Description

Non-template base for all runnable objects (suites and subtests).

runnable_base extends test_node with the state that is shared by every runnable object but does not depend on the CRTP self-type:

  • a reference to the owning runner,
  • the object's own index within its parent container,
  • a sequential subtest index used when creating nested subtests, and
  • an owning vector of child subtest instances.

Concrete runnable classes (suite, subtest) derive from runnable<Self_T> which in turn derives from runnable_base.

The class is non-copyable and non-movable to preserve unique ownership and consistent state throughout the test session.

Definition at line 253 of file test.h.

Public Constructors

runnable_base()

micro_os_plus::micro_test_plus::detail::runnable_base::runnable_base (const char * name, runner & runner, size_t own_index)

Constructs a runnable_base with a name, runner, and index.

Parameters
name

The name used in reports.

runner

The test runner managing this object.

own_index

The positional index of this object within its parent.

The constructor initialises a new instance of the runnable_base class with the specified name. It sets up the internal state required for managing test cases within the suite. If tracing is enabled, the function signature is output for diagnostic purposes. The default test suite does not require explicit registration, ensuring seamless integration within the µTest++ framework and supporting organised test management across all files and folders.

Declaration at line 264 of file test.h, definition at line 136 of file test.cpp.

137 size_t own_index)
139 {
140#if defined(MICRO_OS_PLUS_TRACE) \
141 && defined(MICRO_OS_PLUS_TRACE_MICRO_TEST_PLUS_CONSTRUCTORS)
142#if defined(__GNUC__)
143#pragma GCC diagnostic push
144#if defined(__clang__)
145#pragma clang diagnostic ignored "-Wunsafe-buffer-usage-in-libc-call"
146#endif
147#endif
148 trace::printf ("%s '%s' %zu\n", __PRETTY_FUNCTION__, name, own_index_);
149#if defined(__GNUC__)
150#pragma GCC diagnostic pop
151#endif
152#endif // MICRO_OS_PLUS_TRACE_MICRO_TEST_PLUS_CONSTRUCTORS
153 }

References micro_os_plus::micro_test_plus::detail::test_node::test_node, micro_os_plus::micro_test_plus::detail::test_node::name, own_index, own_index_, runner and runner_.

Referenced by runnable_base, runnable_base, micro_os_plus::micro_test_plus::top_suite::name, operator= and operator=.

runnable_base()

micro_os_plus::micro_test_plus::detail::runnable_base::runnable_base (const runnable_base &)
delete

Deleted copy constructor to prevent copying.

Definition at line 269 of file test.h.

Reference runnable_base.

runnable_base()

micro_os_plus::micro_test_plus::detail::runnable_base::runnable_base (runnable_base &&)
delete

Deleted move constructor to prevent moving.

Definition at line 274 of file test.h.

Reference runnable_base.

Public Destructor

~runnable_base()

micro_os_plus::micro_test_plus::detail::runnable_base::~runnable_base ()
virtual

Virtual destructor.

The destructor releases any resources associated with the runnable_base instance. It ensures that the test suite is properly cleaned up after execution, supporting robust and reliable test management across all files and folders within the µTest++ framework.

Declaration at line 293 of file test.h, definition at line 162 of file test.cpp.

163 {
164#if defined(MICRO_OS_PLUS_TRACE) \
165 && defined(MICRO_OS_PLUS_TRACE_MICRO_TEST_PLUS_CONSTRUCTORS)
166#if defined(__GNUC__)
167#pragma GCC diagnostic push
168#if defined(__clang__)
169#pragma clang diagnostic ignored "-Wunsafe-buffer-usage-in-libc-call"
170#endif
171#endif
172 trace::printf ("%s '%s'\n", __PRETTY_FUNCTION__, name_);
173#if defined(__GNUC__)
174#pragma GCC diagnostic pop
175#endif
176#endif // MICRO_OS_PLUS_TRACE_MICRO_TEST_PLUS_CONSTRUCTORS
177
178 // children_subtests_ holds unique_ptrs; destroyed automatically.
179 }

Reference micro_os_plus::micro_test_plus::detail::test_node::name_.

Public Operators

operator=()

runnable_base & micro_os_plus::micro_test_plus::detail::runnable_base::operator= (const runnable_base &)
delete

Deleted copy assignment operator to prevent copying.

Definition at line 280 of file test.h.

Reference runnable_base.

operator=()

runnable_base & micro_os_plus::micro_test_plus::detail::runnable_base::operator= (runnable_base &&)
delete

Deleted move assignment operator to prevent moving.

Definition at line 287 of file test.h.

References runnable_base, abort, after_subtest_create_, children_subtests_count, current_subtest_index, increment_subtest_index, own_index, reporter and runner.

Public Member Functions

abort()

void micro_os_plus::micro_test_plus::detail::runnable_base::abort (const reflection::source_location & sl=reflection::source_location::current())

Aborts test execution via the owning runner.

Parameters
sl

The source location from which the abort is triggered.

Returns

Does not return.

Delegates immediately to runner_.abort(), passing the supplied source location so that the error message identifies the call site before the process is terminated via ::abort().

Declaration at line 369 of file test.h, definition at line 199 of file test.cpp.

200 {
201 runner_.abort (sl);
202 }

Reference runner_.

Referenced by operator=.

children_subtests_count()

size_t micro_os_plus::micro_test_plus::detail::runnable_base::children_subtests_count (void)
inline nodiscard noexcept

Returns the number of direct child subtests owned by this node.

Parameters

None.

Returns

The number of child subtests.

Returns the number of child subtests owned by this node.

Declaration at line 349 of file test.h, definition at line 165 of file test-inlines.h.

166 {
167 return children_subtests_.size ();
168 }

Reference children_subtests_.

Referenced by micro_os_plus::micro_test_plus::reporter_tap::end_subtest, micro_os_plus::micro_test_plus::reporter_tap::end_suite and operator=.

current_subtest_index()

size_t micro_os_plus::micro_test_plus::detail::runnable_base::current_subtest_index ()
inline nodiscard noexcept

Returns the index of the most recently created child subtest.

Parameters

None.

Returns

The current child subtest sequential index.

Returns the sequential index of the most recently created child subtest.

Declaration at line 329 of file test.h, definition at line 143 of file test-inlines.h.

144 {
146 }

Reference current_subtest_index_.

Referenced by operator=, micro_os_plus::micro_test_plus::reporter_tap::output_fail_prefix_ and micro_os_plus::micro_test_plus::reporter_tap::output_pass_prefix_.

increment_subtest_index()

size_t micro_os_plus::micro_test_plus::detail::runnable_base::increment_subtest_index ()
inline noexcept

Increments and returns the child subtest sequential index.

Parameters

None.

Returns

The new index value after incrementing.

Each call to test() invokes this method before constructing the new subtest, so the index values form a strictly increasing, one-based sequence.

Declaration at line 339 of file test.h, definition at line 155 of file test-inlines.h.

156 {
158 }

Reference current_subtest_index_.

Referenced by operator=.

name()

own_index()

size_t micro_os_plus::micro_test_plus::detail::runnable_base::own_index ()
inline nodiscard noexcept

Returns the positional index of this object within its parent.

Parameters

None.

Returns

The one-based own index.

Returns the one-based positional index of this object within its parent.

Declaration at line 305 of file test.h, definition at line 123 of file test-inlines.h.

123 runnable_base::own_index () const noexcept
124 {
125 return own_index_;
126 }

Reference own_index_.

Referenced by micro_os_plus::micro_test_plus::detail::runnable< Self_T >::runnable, runnable_base, micro_os_plus::micro_test_plus::reporter_tap::end_subtest, micro_os_plus::micro_test_plus::reporter_tap::end_suite and operator=.

own_index()

void micro_os_plus::micro_test_plus::detail::runnable_base::own_index (size_t index)
inline noexcept

Sets the positional index of this object within its parent.

info

This overload follows the same-name getter/setter pattern used throughout the framework: the getter is the const overload and the setter is the non-const single-argument overload.

Parameters
index

The new index value.

Returns

Nothing.

Sets the positional index of this object within its parent.

Declaration at line 319 of file test.h, definition at line 133 of file test-inlines.h.

133 runnable_base::own_index (size_t index) noexcept
134 {
135 own_index_ = index;
136 }

Reference own_index_.

reporter()

reporter & micro_os_plus::micro_test_plus::detail::runnable_base::reporter (void)
nodiscard noexcept

Gets the test reporter associated with this test runnable.

Parameters

None.

Returns

A reference to the test reporter.

Delegates immediately to runner_.reporter(), returning the reporter associated with the owning runner instance.

Declaration at line 359 of file test.h, definition at line 187 of file test.cpp.

187 runnable_base::reporter (void) const noexcept
188 {
189 return runner_.reporter ();
190 }

Reference runner_.

Referenced by operator=.

runner()

class runner & micro_os_plus::micro_test_plus::detail::runnable_base::runner (void)
inline nodiscard noexcept

Gets the test runner associated with this test runnable.

Parameters

None.

Returns

A reference to the test runner.

Returns a reference to the owning test runner.

Declaration at line 380 of file test.h, definition at line 175 of file test-inlines.h.

175 runnable_base::runner (void) const noexcept
176 {
177 return runner_;
178 }

Reference runner_.

Referenced by micro_os_plus::micro_test_plus::detail::runnable< Self_T >::runnable, runnable_base and operator=.

totals()

const runner_totals & micro_os_plus::micro_test_plus::detail::test_node::totals ()
inline nodiscard noexcept

Gets the totals for the test (const overload).

Parameters

None.

Returns

A const reference to the runner_totals instance.

Returns a const reference to the runner_totals member.

Declaration at line 215 of file test.h, definition at line 111 of file test-inlines.h.

111 test_node::totals () const noexcept
112 {
113 return totals_;
114 }

Reference micro_os_plus::micro_test_plus::detail::test_node::totals_.

totals()

Protected Member Functions

after_subtest_create_()

void micro_os_plus::micro_test_plus::detail::runnable_base::after_subtest_create_ (std::unique_ptr< subtest > child_test, suite & suite)
protected

Registers a newly constructed child subtest and executes it immediately.

Parameters
child_test

Owning pointer to the newly created subtest.

suite

The parent suite to which execution results are reported.

Returns

Nothing.

Transfers ownership of child_test into children_subtests_ and immediately invokes subtest::run() on the newly stored subtest. The parent's executed-subtest counter is then incremented. The child's check counters are intentionally not merged into the parent totals; each subtest reports only its own counters. The child's totals are, however, accumulated into suite so that the suite summary reflects all checks performed by its subtests.

Declaration at line 394 of file test.h, definition at line 215 of file test.cpp.

216 std::unique_ptr<class subtest> child_test, suite& suite)
217 {
218 // Transfer ownership into the vector.
219 children_subtests_.push_back (std::move (child_test));
220
221 // Run the child test case immediately.
222 class subtest& subtest = *children_subtests_.back ();
223 subtest.run ();
224
225 // This test executed one more subtest.
226#if defined(MICRO_OS_PLUS_TRACE) \
227 && defined(MICRO_OS_PLUS_TRACE_MICRO_TEST_PLUS_CONSTRUCTORS)
228#if defined(__GNUC__)
229#pragma GCC diagnostic push
230#if defined(__clang__)
231#pragma clang diagnostic ignored "-Wunsafe-buffer-usage-in-libc-call"
232#endif
233#endif
234 trace::printf ("%s subtest '%s' executed one more subtest\n",
235 __PRETTY_FUNCTION__, name ());
236#if defined(__GNUC__)
237#pragma GCC diagnostic pop
238#endif
239#endif // MICRO_OS_PLUS_TRACE_MICRO_TEST_PLUS_CONSTRUCTORS
241 // Do not accumulate the totals from the child test into the current test
242 // totals, each subtest shows only its counters.
243
244#if defined(MICRO_OS_PLUS_TRACE) \
245 && defined(MICRO_OS_PLUS_TRACE_MICRO_TEST_PLUS_CONSTRUCTORS)
246#if defined(__GNUC__)
247#pragma GCC diagnostic push
248#if defined(__clang__)
249#pragma clang diagnostic ignored "-Wunsafe-buffer-usage-in-libc-call"
250#endif
251#endif
252 trace::printf ("%s suite '%s' totals\n", __PRETTY_FUNCTION__,
253 suite.name ());
254#if defined(__GNUC__)
255#pragma GCC diagnostic pop
256#endif
257#endif // MICRO_OS_PLUS_TRACE_MICRO_TEST_PLUS_CONSTRUCTORS
258
259 // Accumulate the totals from the child test into the suite totals.
260 suite.totals () += subtest.totals ();
261 }

References children_subtests_, micro_os_plus::micro_test_plus::detail::runner_totals::increment_executed_subtests, micro_os_plus::micro_test_plus::detail::test_node::name, micro_os_plus::micro_test_plus::subtest::run and micro_os_plus::micro_test_plus::detail::test_node::totals.

Referenced by operator=.

Protected Member Attributes

children_subtests_

std::vector<std::unique_ptr<subtest> > micro_os_plus::micro_test_plus::detail::runnable_base::children_subtests_
protected

Owning collection of direct child subtests.

Each call to test() appends a new subtest to this vector and runs it immediately. The vector retains ownership for the lifetime of the parent runnable.

Definition at line 427 of file test.h.

427 std::vector<std::unique_ptr<subtest>> children_subtests_;

Referenced by after_subtest_create_ and children_subtests_count.

current_subtest_index_

size_t micro_os_plus::micro_test_plus::detail::runnable_base::current_subtest_index_ = 0
protected

The subtest index, counting from 1.

This index is used for reporting and tracking the execution order of subtests within a suite, especially when nested subtests are involved. It is incremented for each subtest created, allowing for clear identification of subtests in reports and diagnostics.

Definition at line 417 of file test.h.

Referenced by current_subtest_index and increment_subtest_index.

name_

const char* micro_os_plus::micro_test_plus::detail::test_node::name_
protected

own_index_

size_t micro_os_plus::micro_test_plus::detail::runnable_base::own_index_
protected

The test index, counting from 1.

Definition at line 406 of file test.h.

406 size_t own_index_;

Referenced by runnable_base, own_index and own_index.

runner_

class runner& micro_os_plus::micro_test_plus::detail::runnable_base::runner_
protected

Reference to the test runner that owns this object.

Definition at line 401 of file test.h.

Referenced by runnable_base, abort, reporter and runner.

totals_


The documentation for this class was generated from the following files:


Generated via doxygen2docusaurus 2.2.0 by Doxygen 1.17.0.