micro-test-plus 5.0.1
µTest++ Testing Framework
Loading...
Searching...
No Matches
micro_os_plus::micro_test_plus::reporter_human Class Referencefinal

Human (standard output) implementation of reporter. More...

#include "micro-os-plus/micro-test-plus.h"

Inheritance diagram for micro_os_plus::micro_test_plus::reporter_human:

Public Member Functions

 reporter_human (const reporter_human &)=delete
 Deleted copy constructor to prevent copying.
 reporter_human (reporter_human &&)=delete
 Deleted move constructor to prevent moving.
 reporter_human (std::unique_ptr< std::vector< std::string_view > > argvs)
 Constructor for the reporter_human class.
 ~reporter_human () override
 Destructor for the reporter_human class.
void begin_session (runner &runner) override
 Mark the beginning of a test session.
virtual void begin_subtest (subtest &subtest) override
 Mark the beginning of a subtest.
virtual void begin_suite (suite &suite) override
 Mark the beginning of a suite.
void end_session (runner &runner) override
 Mark the end of a test session.
virtual void end_subtest (subtest &subtest) override
 Mark the end of a subtest.
virtual void end_suite (suite &suite) override
 Mark the end of a test suite.
void endline (void)
 Inserts a line ending into the output buffer.
detail::expression_formatterexpression ()
 Provides access to the expression formatter for this reporter.
void fail (bool abort, std::string &message, const std::string &expression, bool has_expression, const reflection::source_location &location, subtest &subtest)
 Report a failed condition.
void flush (void)
 Flush the current buffered content.
virtual const char * get_comment_prefix (void) override
 Returns an empty comment prefix string.
reporteroperator<< (bool v)
 Output operator for boolean values.
reporteroperator<< (char c)
 Output operator for a single character.
reporteroperator<< (const char *s)
 Output operator for a constant character string.
reporter_humanoperator<< (detail::indent_t m)
 Output operator for the indent_t manipulator.
reporteroperator<< (reporter &(*func)(reporter &))
 Output operator to display the endl.
reporteroperator<< (std::nullptr_t)
 Output operator for nullptr.
reporteroperator<< (std::string_view sv)
 Output operator for std::string_view.
template<typename T>
reporteroperator<< (T *v)
 Output operator to display any pointer.
template<class T>
requires std::is_arithmetic_v<T>
reporteroperator<< (T v)
 Output operator for arithmetic types, with type suffixes.
reporter_humanoperator= (const reporter_human &)=delete
 Deleted copy assignment operator to prevent copying.
reporter_humanoperator= (reporter_human &&)=delete
 Deleted move assignment operator to prevent moving.
void pass (std::string &message, const std::string &expression, subtest &subtest)
 Report a passed condition.
auto verbosity () const -> micro_test_plus::verbosity
 Returns the current verbosity level.
void write_buffer_to_stdout (void)
 Output the current buffered content.

Protected Member Functions

auto colour_ (const bool cond) const
 Selects the appropriate colour code based on a condition.
void output_fail_prefix_ (std::string &message, const bool has_expression, const reflection::source_location &location, subtest &subtest) override
 Outputs the prefix for a failing condition.
void output_fail_suffix_ (const reflection::source_location &location, bool abort, subtest &subtest) override
 Outputs the suffix for a failing condition.
void output_pass_prefix_ (std::string &message, subtest &subtest) override
 Outputs the prefix for a passing condition.
void output_pass_suffix_ (subtest &subtest) override
 Outputs the suffix for a passing condition.
void write_buffer_to_file_ (void)
void write_info_ (void)
 Appends informational (non-result) text to the output buffer.

Protected Attributes

bool add_empty_line_ { true }
 Controls whether to add an empty line between successful test cases.
std::unique_ptr< std::vector< std::string_view > > argvs_ {}
 Owns the command-line arguments passed to the test runner.
std::string buffer_ {}
 Output accumulation buffer.
detail::colours colours_ {}
 ANSI colour codes for output formatting.
detail::expression_formatter expression_ { colours_ }
 Expression formatter for pass and fail reporting.
FILE * output_file_ { nullptr }
 Optional output file for redirecting test report output.
const char * output_file_path_ { nullptr }
 Optional file path for redirecting test report output.
enum verbosity verbosity_ = verbosity::normal
 The verbosity level for test reporting.

Detailed Description

reporter_human provides the default concrete implementation of the reporter abstract interface, formatting and presenting test results using printf-based output. It accumulates output in an internal string buffer and writes it to the standard output stream, supporting colour-coded diagnostics and multiple verbosity levels.

Users who require custom output behaviour (e.g. redirecting to a serial port on bare-metal targets) may derive a new class from reporter and supply an instance via the reporter global pointer before calling initialize().

All members and methods are defined within the micro_os_plus::micro_test_plus namespace, ensuring clear separation from user code and minimising the risk of naming conflicts.

Definition at line 110 of file reporter-human.h.

Constructor & Destructor Documentation

◆ reporter_human() [1/3]

micro_os_plus::micro_test_plus::reporter_human::reporter_human ( std::unique_ptr< std::vector< std::string_view > > argvs)
Parameters
argvsOwning pointer to the command-line arguments vector; the reporter takes ownership via move.

Delegates construction to the reporter base class with the supplied argument vector. On POSIX platforms, if stdout is connected to a terminal (isatty()), colour output is enabled by selecting the red/green colour scheme. If tracing is enabled, the function signature is output for diagnostic purposes.

Definition at line 85 of file reporter-human.cpp.

87 : reporter{ std::move (argvs) }
88 {
89#if defined(MICRO_OS_PLUS_MICRO_TEST_PLUS_TRACE_CONSTRUCTORS_ENABLED)
90 trace::printf ("%s\n", __PRETTY_FUNCTION__);
91#endif // MICRO_OS_PLUS_MICRO_TEST_PLUS_TRACE_CONSTRUCTORS_ENABLED
92
93#if defined(__APPLE__) || defined(__linux__) || defined(__unix__)
94 if (isatty (fileno (stdout)))
95 {
97 }
98#endif // defined(__APPLE__) || defined(__linux__) || defined(__unix__)
99 }
reporter(std::unique_ptr< std::vector< std::string_view > > argvs)
Constructor for the reporter class.
Definition reporter.cpp:80
detail::colours colours_
ANSI colour codes for output formatting.
Definition reporter.h:551

References micro_os_plus::micro_test_plus::reporter::reporter(), micro_os_plus::micro_test_plus::reporter::colours_, and micro_os_plus::micro_test_plus::detail::colours_red_green.

Referenced by reporter_human(), reporter_human(), operator<<(), operator=(), and operator=().

◆ reporter_human() [2/3]

micro_os_plus::micro_test_plus::reporter_human::reporter_human ( const reporter_human & )
delete

References reporter_human().

◆ reporter_human() [3/3]

micro_os_plus::micro_test_plus::reporter_human::reporter_human ( reporter_human && )
delete

References reporter_human().

◆ ~reporter_human()

micro_os_plus::micro_test_plus::reporter_human::~reporter_human ( )
override

No resources are owned directly by reporter_human; the destructor performs no explicit clean-up. If tracing is enabled, the function signature is output for diagnostic purposes.

Definition at line 107 of file reporter-human.cpp.

108 {
109#if defined(MICRO_OS_PLUS_MICRO_TEST_PLUS_TRACE_CONSTRUCTORS_ENABLED)
110 trace::printf ("%s\n", __PRETTY_FUNCTION__);
111#endif // MICRO_OS_PLUS_MICRO_TEST_PLUS_TRACE_CONSTRUCTORS_ENABLED
112 }

Member Function Documentation

◆ begin_session()

void micro_os_plus::micro_test_plus::reporter_human::begin_session ( runner & runner)
overridevirtual
Parameters
runnerReference to the test runner.
Returns
Nothing.

If verbosity is not silent, a blank line is printed to stdout before the build-information block emitted by write_info_(). A fixed "µTest++ human report" heading is then written both to the output file (if open) and to stdout. The add_empty_line_ flag is set so that subsequent suite output is visually separated.

Implements micro_os_plus::micro_test_plus::reporter.

Definition at line 150 of file reporter-human.cpp.

151 {
152#if defined(MICRO_OS_PLUS_MICRO_TEST_PLUS_TRACE_ENABLED)
153 trace::printf ("%s\n", __PRETTY_FUNCTION__);
154#endif // MICRO_OS_PLUS_MICRO_TEST_PLUS_TRACE_ENABLED
155
157 {
158 printf ("\n");
159 }
160
161 write_info_ ();
162
163 const char* message = "µTest++ human report";
164 if (output_file_ != nullptr)
165 {
166 fprintf (output_file_, "%s\n", message);
167 }
168
170 {
171 printf ("%s\n", message);
172
173 flush ();
174 }
175
176 add_empty_line_ = true;
177 }
FILE * output_file_
Optional output file for redirecting test report output.
Definition reporter.h:600
bool add_empty_line_
Controls whether to add an empty line between successful test cases.
Definition reporter.h:581
void write_info_(void)
Appends informational (non-result) text to the output buffer.
Definition reporter.cpp:251
void flush(void)
Flush the current buffered content.
Definition reporter.cpp:348
enum verbosity verbosity_
The verbosity level for test reporting.
Definition reporter.h:546

References micro_os_plus::micro_test_plus::reporter::add_empty_line_, micro_os_plus::micro_test_plus::reporter::flush(), micro_os_plus::micro_test_plus::reporter::output_file_, micro_os_plus::micro_test_plus::silent, micro_os_plus::micro_test_plus::reporter::verbosity_, and micro_os_plus::micro_test_plus::reporter::write_info_().

◆ begin_subtest()

void micro_os_plus::micro_test_plus::reporter_human::begin_subtest ( subtest & subtest)
overridevirtual
Parameters
subtestReference to the subtest.
Returns
Nothing.

This method marks the beginning of a test case, setting the internal state to indicate that test output is now within a test case context. If there is pending output and the verbosity level is set to verbose, it ensures that output is properly separated and displayed, adding an empty line if necessary. The output buffer is cleared and the stream is flushed to guarantee that all previous output is visible before the new test case begins. This approach enhances the clarity and organisation of test results across all test cases and folders.

Implements micro_os_plus::micro_test_plus::reporter.

Definition at line 426 of file reporter-human.cpp.

427 {
428#if defined(MICRO_OS_PLUS_MICRO_TEST_PLUS_TRACE_ENABLED)
429 trace::printf ("%s '%s'\n", __PRETTY_FUNCTION__, subtest.name ());
430#endif // MICRO_OS_PLUS_MICRO_TEST_PLUS_TRACE_ENABLED
431
432 if (!buffer_.empty ())
433 {
434 // Each suite should start with an empty buffer.
435 fprintf (stderr,
436 "Buffer not empty at the beginning of a test case:\n%s\n",
437 buffer_.c_str ());
438 flush ();
439 abort ();
440 }
441
442 std::string indent (indent_size * subtest.nesting_depth (), ' ');
443
444 if (output_file_ != nullptr)
445 {
446 fprintf (output_file_, "%s• %s\n", indent.c_str (), subtest.name ());
447 }
448
450 {
451 if (add_empty_line_)
452 {
453 printf ("\n");
454 }
455
456 printf ("%s• %s\n", indent.c_str (), subtest.name ());
457
458 add_empty_line_ = false;
459 }
460
461 flush ();
462 }
std::string buffer_
Output accumulation buffer.
Definition reporter.h:561
constexpr size_t indent_size
Number of spaces per indentation level.
detail::indent_t indent(size_t level)
Factory function that creates an indent_t manipulator.

References micro_os_plus::micro_test_plus::reporter::add_empty_line_, micro_os_plus::micro_test_plus::reporter::buffer_, micro_os_plus::micro_test_plus::reporter::flush(), micro_os_plus::micro_test_plus::indent(), micro_os_plus::micro_test_plus::indent_size, micro_os_plus::micro_test_plus::detail::test_node::name(), micro_os_plus::micro_test_plus::subtest::nesting_depth(), micro_os_plus::micro_test_plus::reporter::output_file_, micro_os_plus::micro_test_plus::verbose, and micro_os_plus::micro_test_plus::reporter::verbosity_.

◆ begin_suite()

void micro_os_plus::micro_test_plus::reporter_human::begin_suite ( suite & suite)
overridevirtual
Parameters
suiteReference to the suite.
Returns
Nothing.

This method marks the beginning of a test suite, ensuring that output is properly separated and clearly presented. If there is pending output, the stream is flushed and an empty line is added for clarity. For silent or quiet verbosity levels, output is suppressed. Otherwise, a message indicating the start of the test suite is displayed. This approach enhances the organisation and readability of test results across all test cases and folders.

Implements micro_os_plus::micro_test_plus::reporter.

Definition at line 271 of file reporter-human.cpp.

272 {
273#if defined(MICRO_OS_PLUS_MICRO_TEST_PLUS_TRACE_ENABLED)
274 trace::printf ("%s '%s'\n", __PRETTY_FUNCTION__, suite.name ());
275#endif // MICRO_OS_PLUS_MICRO_TEST_PLUS_TRACE_ENABLED
276
278 {
279 if (add_empty_line_)
280 {
281 printf ("\n");
282 }
283
284 if (output_file_ != nullptr)
285 {
286 fprintf (output_file_, "• %s\n", suite.name ());
287 }
288
289 printf ("• %s\n", suite.name ());
290
291 flush ();
292
293 add_empty_line_ = true;
294 }
295 }

References micro_os_plus::micro_test_plus::reporter::add_empty_line_, micro_os_plus::micro_test_plus::reporter::flush(), micro_os_plus::micro_test_plus::detail::test_node::name(), micro_os_plus::micro_test_plus::normal, micro_os_plus::micro_test_plus::reporter::output_file_, micro_os_plus::micro_test_plus::verbose, and micro_os_plus::micro_test_plus::reporter::verbosity_.

◆ colour_()

auto micro_os_plus::micro_test_plus::reporter::colour_ ( const bool cond) const
inlinenodiscardprotectedinherited
Parameters
condBoolean value indicating pass (true) or fail (false).
Returns
The corresponding ANSI colour code as a string.

Returns the ANSI colour code for pass or fail, depending on the boolean condition provided.

Definition at line 119 of file reporter-inlines.h.

120 {
121 return cond ? colours_.pass : colours_.fail;
122 }

References colours_.

Referenced by get_comment_prefix().

◆ end_session()

void micro_os_plus::micro_test_plus::reporter_human::end_session ( runner & runner)
overridevirtual
Parameters
runnerReference to the test runner.
Returns
Nothing.

Prints a summary line to stdout (and to the output file if open) showing the total number of successful checks, failed checks, executed test cases, and test suites, together with the elapsed time when timing data is available. The line is prefixed with a green tick on success or a red cross on failure, using ANSI colour codes when colour output is enabled.

Implements micro_os_plus::micro_test_plus::reporter.

Definition at line 189 of file reporter-human.cpp.

190 {
191#if defined(MICRO_OS_PLUS_MICRO_TEST_PLUS_TRACE_ENABLED)
192 trace::printf ("%s\n", __PRETTY_FUNCTION__);
193#endif // MICRO_OS_PLUS_MICRO_TEST_PLUS_TRACE_ENABLED
194
196 {
197 if (add_empty_line_)
198 {
199 printf ("\n");
200 }
201
202 size_t total_suites_count = runner.total_suites_count ();
203
204 uint32_t milliseconds = 0;
205 uint32_t microseconds = 0;
206 if (runner.timings ().has_timestamps ())
207 {
208 runner.timings ().compute_elapsed_time (milliseconds,
209 microseconds);
210 }
211
212 char message_totals[300];
213 snprintf (message_totals, sizeof (message_totals),
214 "Total: %zu check%s passed, %zu failed, in %zu test "
215 "case%s, %zu test suite%s",
216 runner.totals ().successful_checks (),
217 runner.totals ().successful_checks () == 1 ? "" : "s",
218 runner.totals ().failed_checks (),
219 runner.totals ().executed_subtests (),
220 runner.totals ().executed_subtests () == 1 ? "" : "s",
221 total_suites_count, total_suites_count == 1 ? "" : "s");
222
223 char message_time[120] = "";
224 if (milliseconds > 0 || microseconds > 0)
225 {
226 snprintf (message_time, sizeof (message_time),
227 ", time: %" PRIu32 ".%03" PRIu32 " ms", milliseconds,
228 microseconds);
229 }
230
231 if (runner.totals ().was_successful ()) [[likely]]
232 {
233 if (output_file_ != nullptr)
234 {
235 fprintf (output_file_, "✓ %s%s\n", message_totals,
236 message_time);
237 }
238
239 printf ("%s✓%s %s%s\n", colours_.pass, colours_.none,
240 message_totals, message_time);
241 }
242 else
243 {
244 if (output_file_ != nullptr)
245 {
246 fprintf (output_file_, "✗ %s%s\n", message_totals,
247 message_time);
248 }
249
250 printf ("%s✗%s %s%s\n", colours_.fail, colours_.none,
251 message_totals, message_time);
252 }
253
254 flush ();
255 }
256 }

References micro_os_plus::micro_test_plus::reporter::add_empty_line_, micro_os_plus::micro_test_plus::reporter::colours_, micro_os_plus::micro_test_plus::detail::timestamps::compute_elapsed_time(), micro_os_plus::micro_test_plus::detail::runner_totals::executed_subtests(), micro_os_plus::micro_test_plus::detail::runner_totals::failed_checks(), micro_os_plus::micro_test_plus::reporter::flush(), micro_os_plus::micro_test_plus::detail::timestamps::has_timestamps(), micro_os_plus::micro_test_plus::reporter::output_file_, micro_os_plus::micro_test_plus::silent, micro_os_plus::micro_test_plus::detail::runner_totals::successful_checks(), micro_os_plus::micro_test_plus::runner::timings(), micro_os_plus::micro_test_plus::runner::total_suites_count(), micro_os_plus::micro_test_plus::detail::test_node::totals(), micro_os_plus::micro_test_plus::reporter::verbosity_, and micro_os_plus::micro_test_plus::detail::runner_totals::was_successful().

◆ end_subtest()

void micro_os_plus::micro_test_plus::reporter_human::end_subtest ( subtest & subtest)
overridevirtual
Parameters
subtestReference to the subtest.
Returns
Nothing.

This method marks the end of a test case, summarising its outcome and outputting the results with appropriate formatting and colour coding. If any checks have failed, a failure message is displayed, including the number of successful and failed checks. For passing test cases, a success message is shown with the total number of checks. The output is adjusted according to the verbosity level, and additional spacing is managed for clarity. The output buffer is cleared and the stream is flushed to ensure all results are immediately visible, supporting clear and organised reporting across all test cases and folders.

Implements micro_os_plus::micro_test_plus::reporter.

Definition at line 477 of file reporter-human.cpp.

478 {
479#if defined(MICRO_OS_PLUS_MICRO_TEST_PLUS_TRACE_ENABLED)
480 trace::printf ("%s '%s' i%zu\n", __PRETTY_FUNCTION__, subtest.name (),
481 subtest.nesting_depth ());
482#endif // MICRO_OS_PLUS_MICRO_TEST_PLUS_TRACE_ENABLED
483
484 // At this point, the buffer may contain output from the subtest, which
485 // should be displayed.
487 {
488 std::string indent (indent_size * subtest.nesting_depth (), ' ');
489 std::string indent2 (indent_size * (subtest.nesting_depth () + 1),
490 ' ');
491
492 if (add_empty_line_)
493 {
494 printf ("\n");
495 }
496
497 if (subtest.totals ().was_successful ()) [[likely]]
498 {
499 // Successful subtest.
500
501 char message_totals[300];
502 snprintf (message_totals, sizeof (message_totals),
503 "%s - passed (%zu check%s)", subtest.name (),
504 subtest.totals ().successful_checks (),
505 subtest.totals ().successful_checks () == 1 ? "" : "s");
506
507 if (output_file_ != nullptr)
508 {
510
511 fprintf (output_file_, "%s✓ %s\n", indent.c_str (),
512 message_totals);
513 }
514
516 {
517 // With verbosity, show full TAP output accumulated in the
518 // buffer.
520
521 printf ("%s%s✓%s %s\n", indent.c_str (), colours_.pass,
522 colours_.none, message_totals);
523
524 add_empty_line_ = true;
525 }
526 else
527 {
528 printf ("%s%s✓%s %s\n", indent.c_str (), colours_.pass,
529 colours_.none, message_totals);
530
531 add_empty_line_ = false;
532 }
533 }
534 else
535 {
536 // Failed subtest.
537 char message_totals[300];
538 snprintf (message_totals, sizeof (message_totals),
539 "(%zu check%s passed, %zu failed)",
540 subtest.totals ().successful_checks (),
541 subtest.totals ().successful_checks () == 1 ? "" : "s",
542 subtest.totals ().failed_checks ());
543
544 if (output_file_ != nullptr)
545 {
547
548 fprintf (output_file_, "%s✗ %s - %sFAILED%s %s\n",
549 indent.c_str (), subtest.name (), colours_.fail,
550 colours_.none, message_totals);
551 }
552
554 {
555 if (!add_empty_line_)
556 {
557 printf ("\n");
558 }
559
560 printf ("%s• %s\n", indent.c_str (), subtest.name ());
561 }
562
563 // Show full output accumulated in the buffer for failed
564 // subtests, as it may contain useful information about the
565 // failure.
567
568 printf ("%s%s✗%s %s - %sFAILED%s %s\n", indent.c_str (),
569 colours_.fail, colours_.none, subtest.name (),
570 colours_.fail, colours_.none, message_totals);
571
572 add_empty_line_ = true;
573 }
574 }
575
576 flush ();
577
578 // Clear residual content when less verbose.
579 buffer_.clear ();
580 }
void write_buffer_to_stdout(void)
Output the current buffered content.
Definition reporter.cpp:218

References micro_os_plus::micro_test_plus::reporter::add_empty_line_, micro_os_plus::micro_test_plus::reporter::buffer_, micro_os_plus::micro_test_plus::reporter::colours_, micro_os_plus::micro_test_plus::detail::runner_totals::failed_checks(), micro_os_plus::micro_test_plus::reporter::flush(), micro_os_plus::micro_test_plus::indent(), micro_os_plus::micro_test_plus::indent_size, micro_os_plus::micro_test_plus::detail::test_node::name(), micro_os_plus::micro_test_plus::subtest::nesting_depth(), micro_os_plus::micro_test_plus::normal, micro_os_plus::micro_test_plus::reporter::output_file_, micro_os_plus::micro_test_plus::detail::runner_totals::successful_checks(), micro_os_plus::micro_test_plus::detail::test_node::totals(), micro_os_plus::micro_test_plus::verbose, micro_os_plus::micro_test_plus::reporter::verbosity_, micro_os_plus::micro_test_plus::detail::runner_totals::was_successful(), micro_os_plus::micro_test_plus::reporter::write_buffer_to_file_(), and micro_os_plus::micro_test_plus::reporter::write_buffer_to_stdout().

◆ end_suite()

void micro_os_plus::micro_test_plus::reporter_human::end_suite ( suite & suite)
overridevirtual
Parameters
suiteReference to the test suite.
Returns
Nothing.

This method marks the end of a test suite, summarising the overall results and presenting them with appropriate formatting and colour coding. If the suite contains test cases and the verbosity is not set to quiet, an empty line is added for clarity. For suites with no failed checks and at least one successful check, a success message is displayed, including the number of checks and test cases. Otherwise, a failure message is shown, detailing the number of successful and failed checks, as well as the total number of test cases. The output is immediately flushed to ensure prompt and organised reporting across all test cases and folders.

Implements micro_os_plus::micro_test_plus::reporter.

Definition at line 310 of file reporter-human.cpp.

311 {
312#if defined(MICRO_OS_PLUS_MICRO_TEST_PLUS_TRACE_ENABLED)
313 trace::printf ("%s '%s'\n", __PRETTY_FUNCTION__, suite.name ());
314#endif // MICRO_OS_PLUS_MICRO_TEST_PLUS_TRACE_ENABLED
315
316 uint32_t milliseconds = 0;
317 uint32_t microseconds = 0;
318 if (suite.timings ().has_timestamps ())
319 {
320 suite.timings ().compute_elapsed_time (milliseconds, microseconds);
321 }
322
323 char message_time[120] = "";
324 if (milliseconds > 0 || microseconds > 0)
325 {
326 snprintf (message_time, sizeof (message_time),
327 ", time: %" PRIu32 ".%03" PRIu32 " ms", milliseconds,
328 microseconds);
329 }
330
331 // At this point, the buffer may contain output from the test case, which
332 // should be displayed.
334 {
335 std::string indent (indent_size, ' ');
336
337 if (suite.totals ().executed_subtests () > 0)
338 {
339 printf ("\n");
340 }
341
342 if (suite.totals ().was_successful ()) [[likely]]
343 {
344 // Successful test suite.
345
346 char message_totals[300];
347 snprintf (message_totals, sizeof (message_totals),
348 "(%zu check%s in %zu test case%s)",
349 suite.totals ().successful_checks (),
350 suite.totals ().successful_checks () == 1 ? "" : "s",
351 suite.totals ().executed_subtests (),
352 suite.totals ().executed_subtests () == 1 ? "" : "s");
353
354 if (output_file_ != nullptr)
355 {
357
358 fprintf (output_file_, "✓ %s - passed %s%s\n", suite.name (),
359 message_totals, message_time);
360 }
361
363 {
364 // With verbosity, show full TAP output accumulated in the
365 // buffer.
367 }
368
369 printf ("%s✓%s %s - passed %s%s\n", colours_.pass, colours_.none,
370 suite.name (), message_totals, message_time);
371 }
372 else
373 {
374 // Failed test suite.
375
376 char message_totals[300];
377 snprintf (message_totals, sizeof (message_totals),
378 "(%zu check%s passed, %zu "
379 "failed, in %zu test case%s)",
380 suite.totals ().successful_checks (),
381 suite.totals ().successful_checks () == 1 ? "" : "s",
382 suite.totals ().failed_checks (),
383 suite.totals ().executed_subtests (),
384 suite.totals ().executed_subtests () == 1 ? "" : "s");
385
386 if (output_file_ != nullptr)
387 {
389
390 fprintf (output_file_, "✗ %s - FAILED %s%s\n", suite.name (),
391 message_totals, message_time);
392 }
393
394 // Show full TAP output accumulated in the buffer for failed suite
395 // cases, as it may contain useful information about the failure.
397
398 printf ("%s✗%s %s - %sFAILED%s %s%s\n", colours_.fail,
399 colours_.none, suite.name (), colours_.fail, colours_.none,
400 message_totals, message_time);
401 }
402 }
403
404 flush ();
405
406 // Clear residual content when less verbose.
407 buffer_.clear ();
408
409 add_empty_line_ = true;
410 }

References micro_os_plus::micro_test_plus::reporter::add_empty_line_, micro_os_plus::micro_test_plus::reporter::buffer_, micro_os_plus::micro_test_plus::reporter::colours_, micro_os_plus::micro_test_plus::detail::timestamps::compute_elapsed_time(), micro_os_plus::micro_test_plus::detail::runner_totals::executed_subtests(), micro_os_plus::micro_test_plus::detail::runner_totals::failed_checks(), micro_os_plus::micro_test_plus::reporter::flush(), micro_os_plus::micro_test_plus::detail::timestamps::has_timestamps(), micro_os_plus::micro_test_plus::indent(), micro_os_plus::micro_test_plus::indent_size, micro_os_plus::micro_test_plus::detail::test_node::name(), micro_os_plus::micro_test_plus::normal, micro_os_plus::micro_test_plus::reporter::output_file_, micro_os_plus::micro_test_plus::detail::runner_totals::successful_checks(), micro_os_plus::micro_test_plus::suite::timings(), micro_os_plus::micro_test_plus::detail::test_node::totals(), micro_os_plus::micro_test_plus::verbose, micro_os_plus::micro_test_plus::reporter::verbosity_, micro_os_plus::micro_test_plus::detail::runner_totals::was_successful(), micro_os_plus::micro_test_plus::reporter::write_buffer_to_file_(), and micro_os_plus::micro_test_plus::reporter::write_buffer_to_stdout().

◆ endline()

void micro_os_plus::micro_test_plus::reporter::endline ( void )
inherited
Parameters
None.
Returns
Nothing.

This method appends a newline character to the internal output buffer of the reporter and immediately flushes the stream. This ensures that each line of test output is clearly separated and promptly displayed, enhancing the readability and organisation of test results across all test cases and folders.

Definition at line 202 of file reporter.cpp.

203 {
204 buffer_.append ("\n");
205 flush ();
206 }

References buffer_, and flush().

Referenced by micro_os_plus::micro_test_plus::endl().

◆ expression()

detail::expression_formatter & micro_os_plus::micro_test_plus::reporter::expression ( )
inlineinherited
Parameters
None.
Returns
Reference to the expression_formatter instance used by this reporter.

Returns a reference to the expression_formatter instance used by the reporter for formatting expressions in test reports. This allows the reporter to delegate the formatting of complex expressions to the expression_formatter, which provides a consistent and extensible way to convert various types of values and expressions into their string representations for output in test reports.

Definition at line 108 of file reporter-inlines.h.

109 {
110 return expression_;
111 }
detail::expression_formatter expression_
Expression formatter for pass and fail reporting.
Definition reporter.h:572

References expression_.

Referenced by micro_os_plus::micro_test_plus::subtest::assume(), micro_os_plus::micro_test_plus::subtest::expect(), fail(), get_comment_prefix(), operator<<(), and pass().

◆ fail()

void micro_os_plus::micro_test_plus::reporter::fail ( bool abort,
std::string & message,
const std::string & expression,
bool has_expression,
const reflection::source_location & location,
subtest & subtest )
inherited
Parameters
abortWhether to abort execution after failure.
messageThe message to display.
expressionThe string representation of the expression.
has_expressionWhether the expression is a compound op to display.
locationThe source location of the failure.
subtestThe subtest that owns this check.
Returns
Nothing.

Reports a test failure, formatting the output with source location and, when has_expression is true, the pre-formatted expression string.

Definition at line 446 of file reporter.cpp.

450 {
451 output_fail_prefix_ (message, has_expression, location, subtest);
452
453 if (has_expression)
454 {
455 *this << expression;
456 }
457
458 output_fail_suffix_ (location, abort, subtest);
459 }
virtual void output_fail_prefix_(std::string &message, const bool has_expression, const reflection::source_location &location, subtest &subtest)=0
Outputs the prefix for a failing condition.
detail::expression_formatter & expression()
Provides access to the expression formatter for this reporter.
virtual void output_fail_suffix_(const reflection::source_location &location, bool abort, subtest &subtest)=0
Outputs the suffix for a failing condition.

References expression(), output_fail_prefix_(), and output_fail_suffix_().

◆ flush()

void micro_os_plus::micro_test_plus::reporter::flush ( void )
inherited
Parameters
None.
Returns
Nothing.

This method flushes the output buffer of the reporter by synchronising it with the standard output stream. This guarantees that all pending test output is immediately written and visible, ensuring prompt and reliable reporting of test results across all test cases and folders.

Definition at line 348 of file reporter.cpp.

349 {
350 fflush (stdout);
351 if (output_file_ != nullptr)
352 {
353 fflush (output_file_);
354 }
355 }

References output_file_.

Referenced by micro_os_plus::micro_test_plus::reporter_human::begin_session(), micro_os_plus::micro_test_plus::reporter_tap::begin_session(), micro_os_plus::micro_test_plus::reporter_human::begin_subtest(), micro_os_plus::micro_test_plus::reporter_tap::begin_subtest(), micro_os_plus::micro_test_plus::reporter_human::begin_suite(), micro_os_plus::micro_test_plus::reporter_tap::begin_suite(), micro_os_plus::micro_test_plus::reporter_human::end_session(), micro_os_plus::micro_test_plus::reporter_tap::end_session(), micro_os_plus::micro_test_plus::reporter_human::end_subtest(), micro_os_plus::micro_test_plus::reporter_tap::end_subtest(), micro_os_plus::micro_test_plus::reporter_human::end_suite(), micro_os_plus::micro_test_plus::reporter_tap::end_suite(), endline(), micro_os_plus::micro_test_plus::reporter_human::output_fail_suffix_(), micro_os_plus::micro_test_plus::reporter_tap::output_fail_suffix_(), micro_os_plus::micro_test_plus::reporter_human::output_pass_suffix_(), and micro_os_plus::micro_test_plus::reporter_tap::output_pass_suffix_().

◆ get_comment_prefix()

const char * micro_os_plus::micro_test_plus::reporter_human::get_comment_prefix ( void )
overridevirtual
Parameters
None.
Returns
An empty string, as the human-readable format does not use a comment prefix.

Returns an empty string. The human reporter does not prefix comment lines; the write_info_() output appears as plain text.

Implements micro_os_plus::micro_test_plus::reporter.

Definition at line 590 of file reporter-human.cpp.

591 {
592 return "";
593 }

◆ operator<<() [1/9]

reporter & micro_os_plus::micro_test_plus::reporter::operator<< ( bool v)
Parameters
vThe boolean value to output.
Returns
Reference to the current reporter instance.

◆ operator<<() [2/9]

reporter & micro_os_plus::micro_test_plus::reporter::operator<< ( char c)
Parameters
cThe character to output.
Returns
Reference to the current reporter instance.

This operator overload appends the specified character to the internal output buffer of the reporter. It enables efficient streaming of individual characters into the reporter, supporting precise and flexible formatting of test output across all test cases and folders.

Definition at line 225 of file reporter.cpp.

400 {
401 buffer_.append (1, c);
402 return *this;
403 }

◆ operator<<() [3/9]

reporter & micro_os_plus::micro_test_plus::reporter::operator<< ( const char * s)
Parameters
sThe string to output.
Returns
Reference to the current reporter instance.

This operator overload appends the contents of the provided C-style string to the internal output buffer of the reporter. It enables efficient streaming of string literals and character arrays into the reporter, supporting clear and flexible formatting of test output across all test cases and folders.

Definition at line 234 of file reporter.cpp.

415 {
416 buffer_.append (s);
417 return *this;
418 }

References micro_os_plus::micro_test_plus::reporter::buffer_, and micro_os_plus::micro_test_plus::reporter::output_file_.

◆ operator<<() [4/9]

reporter_human & micro_os_plus::micro_test_plus::reporter_human::operator<< ( detail::indent_t m)
Parameters
mThe indentation manipulator produced by indent(n).
Returns
Reference to the current reporter instance.

This operator overload appends spaces to the internal output buffer corresponding to m.level two-space indentation levels. It enables structured, readable nesting of test output across all test cases and folders by allowing *this << indent(n) << "text" chaining.

Definition at line 132 of file reporter-human.cpp.

134 {
135 buffer_.append (m.level * indent_size, ' ');
136 return *this;
137 }

References reporter_human(), micro_os_plus::micro_test_plus::reporter::buffer_, micro_os_plus::micro_test_plus::indent_size, and micro_os_plus::micro_test_plus::detail::indent_t::level.

◆ operator<<() [5/9]

reporter & micro_os_plus::micro_test_plus::reporter::operator<< ( reporter &(* func )(reporter &))
Parameters
funcFunction pointer to the stream manipulator.
Returns
Reference to the current reporter instance.

This operator overload enables manipulators, such as endl, to be used with the reporter stream in a manner similar to standard C++ streams. When a manipulator function is passed, it is invoked with the current reporter instance, allowing for seamless integration of stream operations and improved readability of test output across all test cases and folders.

Definition at line 283 of file reporter.cpp.

370 {
371 // Call the endl function.
372 (*func) (*this);
373 return *this;
374 }

◆ operator<<() [6/9]

reporter & micro_os_plus::micro_test_plus::reporter::operator<< ( std::nullptr_t )
Returns
Reference to the current reporter instance.

◆ operator<<() [7/9]

reporter & micro_os_plus::micro_test_plus::reporter::operator<< ( std::string_view sv)
Parameters
svThe string view to output.
Returns
Reference to the current reporter instance.

This operator overload appends the contents of the provided std::string_view to the internal output buffer of the reporter. It enables seamless streaming of string data into the reporter, supporting clear and efficient formatting of test output across all test cases and folders.

Definition at line 216 of file reporter.cpp.

386 {
387 buffer_.append (sv);
388 return *this;
389 }

◆ operator<<() [8/9]

template<typename T>
reporter & micro_os_plus::micro_test_plus::reporter::operator<< ( T * v)
Template Parameters
TThe type of the pointer.
Parameters
vThe pointer value to output.
Returns
Reference to the current reporter instance.

This operator overload enables the reporter to output pointer values in a consistent and readable format.

Null pointers are always rendered as the string "nullptr", regardless of the platform, avoiding platform-specific behaviour such as "(nil)" on Linux/glibc or "0x0" on macOS.

Non-null pointers are formatted as a hexadecimal address using snprintf with the p format specifier. The resulting string is appended to the internal output buffer, allowing pointer values to be included in test reports and diagnostics.

This approach provides clear and unambiguous representation of pointer addresses, which is particularly useful for debugging and verifying pointer-related test cases.

Definition at line 274 of file reporter-inlines.h.

147 {
148 if (v == nullptr)
149 {
150 // Explicitly render null pointers as "0x0" to avoid platform-specific
151 // representations such as "(nil)" on Linux/glibc.
152 buffer_.append ("0x0");
153 return *this;
154 }
155
156#if defined(__GNUC__)
157#pragma GCC diagnostic push
158
159#if defined(__clang__)
160#pragma clang diagnostic ignored "-Wunsafe-buffer-usage-in-libc-call"
161#endif // defined(__clang__)
162#endif // defined(__GNUC__)
163
164 char buff[20];
165 snprintf (buff, sizeof (buff), "%p", reinterpret_cast<void*> (v));
166 buffer_.append (buff);
167
168#if defined(__GNUC__)
169#pragma GCC diagnostic pop
170#endif // defined(__GNUC__)
171
172 return *this;
173 }

◆ operator<<() [9/9]

template<class T>
requires std::is_arithmetic_v<T>
reporter & micro_os_plus::micro_test_plus::reporter::operator<< ( T v)
Template Parameters
TThe arithmetic type.
Parameters
vThe value to output.
Returns
Reference to the current reporter instance.

This template operator overload allows the reporter to output values of any arithmetic type (integral or floating-point) in a consistent and readable format. The value is formatted using the append_number_ helper function, which handles the conversion to a string representation with appropriate type suffixes where applicable (e.g., "f" for float, "l" for long double). This enables numeric values to be included in test reports and diagnostics in a clear and unambiguous manner, supporting the verification of test cases that involve arithmetic expressions and comparisons.

Definition at line 262 of file reporter-inlines.h.

191 {
193 return *this;
194 }
void append_number_(std::string &buffer, T v)
Appends the string representation of a numeric value to a buffer, using std::to_chars for allocation-...

◆ operator=() [1/2]

reporter_human & micro_os_plus::micro_test_plus::reporter_human::operator= ( const reporter_human & )
delete

References reporter_human().

◆ operator=() [2/2]

reporter_human & micro_os_plus::micro_test_plus::reporter_human::operator= ( reporter_human && )
delete

References reporter_human().

◆ output_fail_prefix_()

void micro_os_plus::micro_test_plus::reporter_human::output_fail_prefix_ ( std::string & message,
const bool has_expression,
const reflection::source_location & location,
subtest & subtest )
overrideprotectedvirtual
Parameters
messageThe message to display.
has_expressionWhether the failure is associated with an expression.
locationThe source location of the failure.
subtestThe subtest that owns this check.
Returns
Nothing.

This method outputs the prefix for a failing check result, applying the appropriate colour formatting and symbols to clearly indicate failure. If the output occurs within a subtest, additional indentation is applied for readability. The prefix includes a cross symbol (), an optional message, and the label "FAILED". The source location is appended in parentheses, showing the file or folder name and line number where the failure occurred. Colour formatting is reset after the prefix to maintain consistent output style across all test cases and folders.

Implements micro_os_plus::micro_test_plus::reporter.

Definition at line 648 of file reporter-human.cpp.

651 {
652#if defined(__GNUC__)
653#pragma GCC diagnostic push
654
655#if defined(__clang__)
656#pragma clang diagnostic ignored "-Wsign-conversion"
657#elif defined(__GNUC__)
658#pragma GCC diagnostic ignored "-Wnarrowing"
659#pragma GCC diagnostic ignored "-Wsign-conversion"
660#endif // defined(__clang__)
661#endif // defined(__GNUC__)
662
663 size_t level = subtest.nesting_depth ();
664
665 *this << indent (level + 1);
666 *this << colours_.fail << "✗" << colours_.none << " ";
667 if (!message.empty ())
668 {
669 *this << message.c_str ();
670 *this << " ";
671 }
672 *this << colours_.fail << "FAILED" << colours_.none;
673 *this << " (" << reflection::short_name (location.file_name ()) << ":"
674 << location.line ();
675 if (has_expression)
676 {
677 *this << ", ";
678 }
679 }
const char * short_name(const char *name) noexcept
Extract a short type or function name from a fully qualified name.

References micro_os_plus::micro_test_plus::reporter::colours_, micro_os_plus::micro_test_plus::reflection::source_location::file_name(), micro_os_plus::micro_test_plus::indent(), micro_os_plus::micro_test_plus::reflection::source_location::line(), micro_os_plus::micro_test_plus::subtest::nesting_depth(), and micro_os_plus::micro_test_plus::reflection::short_name().

◆ output_fail_suffix_()

void micro_os_plus::micro_test_plus::reporter_human::output_fail_suffix_ ( const reflection::source_location & location,
bool abort,
subtest & subtest )
overrideprotectedvirtual
Parameters
locationThe source location of the failure.
abortWhether to abort execution after failure.
subtestThe subtest that owns this check.
Returns
Nothing.

This method outputs the suffix for a failing check result by closing the location information, appending an "aborted..." message if the check was aborted, and then adding a newline to the output. The output stream is flushed to ensure immediate visibility. This approach guarantees that failure results are clearly separated, promptly reported, and easily distinguishable across all test cases and folders.

Implements micro_os_plus::micro_test_plus::reporter.

Definition at line 695 of file reporter-human.cpp.

698 {
699 *this << ")";
700 if (abort)
701 {
702 *this << " aborted...";
703 }
704 *this << endl;
705
706 flush ();
707 }
reporter & endl(reporter &stream)
Output stream manipulator for ending a line in test reports.
Definition reporter.cpp:187

References micro_os_plus::micro_test_plus::endl(), and micro_os_plus::micro_test_plus::reporter::flush().

◆ output_pass_prefix_()

void micro_os_plus::micro_test_plus::reporter_human::output_pass_prefix_ ( std::string & message,
subtest & subtest )
overrideprotectedvirtual
Parameters
messageThe message to display.
subtestThe subtest that owns this check.
Returns
Nothing.

This method outputs the prefix for a passing check result, applying the appropriate colour formatting and symbols to clearly indicate success. If the output occurs within a subtest, additional indentation is applied for readability. The prefix includes a tick symbol () and, if provided, an associated message. Colour formatting is reset after the prefix to maintain consistent output style across all test cases and folders.

The prefix/suffix methods help shorten the code generated by the template methods.

Implements micro_os_plus::micro_test_plus::reporter.

Definition at line 608 of file reporter-human.cpp.

609 {
610 size_t level = subtest.nesting_depth ();
611
612 *this << indent (level + 1);
613 *this << colours_.pass << "✓" << colours_.none << " ";
614 if (!message.empty ())
615 {
616 *this << message.c_str ();
617 }
618 }

References micro_os_plus::micro_test_plus::reporter::colours_, micro_os_plus::micro_test_plus::indent(), and micro_os_plus::micro_test_plus::subtest::nesting_depth().

◆ output_pass_suffix_()

void micro_os_plus::micro_test_plus::reporter_human::output_pass_suffix_ ( subtest & subtest)
overrideprotectedvirtual
Parameters
subtestThe subtest that owns this check.
Returns
Nothing.

Completes pass output by appending endl and flushing buffered content to the configured sinks.

The prefix/suffix methods help shorten the code generated by the template methods.

Implements micro_os_plus::micro_test_plus::reporter.

Definition at line 629 of file reporter-human.cpp.

630 {
631 *this << endl;
632
633 flush ();
634 }

References micro_os_plus::micro_test_plus::endl(), and micro_os_plus::micro_test_plus::reporter::flush().

◆ pass()

void micro_os_plus::micro_test_plus::reporter::pass ( std::string & message,
const std::string & expression,
subtest & subtest )
inherited
Parameters
messageThe message to display.
expressionThe string representation of the expression.
subtestThe subtest that owns this check.
Returns
Nothing.

Outputs a pass prefix, followed by either the provided message or, if the message is empty, the evaluated expression string itself. A pass suffix is then appended to complete the output.

Definition at line 427 of file reporter.cpp.

429 {
430 output_pass_prefix_ (message, subtest);
431
432 if (message.empty ())
433 {
434 *this << expression;
435 }
436
437 output_pass_suffix_ (subtest);
438 }
virtual void output_pass_suffix_(subtest &subtest)=0
Outputs the suffix for a passing condition.
virtual void output_pass_prefix_(std::string &message, subtest &subtest)=0
Outputs the prefix for a passing condition.

References expression(), output_pass_prefix_(), and output_pass_suffix_().

◆ verbosity()

auto micro_os_plus::micro_test_plus::reporter::verbosity ( ) const -> micro_test_plus::verbosity
inlineinherited
Parameters
None.
Returns
The active verbosity value.

Returns the verbosity level stored in verbosity_.

Definition at line 93 of file reporter-inlines.h.

94 {
95 return verbosity_;
96 }

References verbosity(), and verbosity_.

Referenced by get_comment_prefix(), and verbosity().

◆ write_buffer_to_file_()

void micro_os_plus::micro_test_plus::reporter::write_buffer_to_file_ ( void )
protectedinherited

Writes the contents of buffer_ to output_file_ using fprintf without appending a newline. If output_file_ is null, the call is a no-op.

Definition at line 231 of file reporter.cpp.

232 {
233 // Pass only the string, do not add an `\n` here.
234 if (output_file_ != nullptr)
235 {
236 fprintf (output_file_, "%s", buffer_.c_str ());
237 }
238 }

Referenced by micro_os_plus::micro_test_plus::reporter_human::end_subtest(), micro_os_plus::micro_test_plus::reporter_tap::end_subtest(), micro_os_plus::micro_test_plus::reporter_human::end_suite(), micro_os_plus::micro_test_plus::reporter_tap::end_suite(), and get_comment_prefix().

◆ write_buffer_to_stdout()

void micro_os_plus::micro_test_plus::reporter::write_buffer_to_stdout ( void )
inherited
Note
Public because deferred_reporter_base calls this from its destructor when aborting, after the subtest instance is no longer accessible via the normal reporting path.
Parameters
None.
Returns
Nothing.

This method writes the contents of the internal output buffer to the standard output stream without appending a newline character. After outputting the buffer, it is cleared to prepare for subsequent output. This approach ensures that test results are presented promptly and efficiently, supporting clear and organised reporting across all test cases and folders.

Definition at line 218 of file reporter.cpp.

219 {
220 // Pass only the string, do not add an `\n` here.
221 printf ("%s", buffer_.c_str ());
222 }

References buffer_.

Referenced by micro_os_plus::micro_test_plus::reporter_tap::begin_subtest(), micro_os_plus::micro_test_plus::reporter_human::end_subtest(), micro_os_plus::micro_test_plus::reporter_tap::end_subtest(), micro_os_plus::micro_test_plus::reporter_human::end_suite(), and micro_os_plus::micro_test_plus::reporter_tap::end_suite().

◆ write_info_()

void micro_os_plus::micro_test_plus::reporter::write_info_ ( void )
protectedinherited
Parameters
None.
Returns
Nothing.

Constructs and emits two informational lines: the first lists the programme name and any command-line arguments; the second identifies the compiler (Clang, GCC, or MSVC) together with the version string, floating-point availability on bare-metal targets, exception support, and any active debug or trace macros. Both lines are written to the output file when one is open, and to stdout unless verbosity is set to silent.

Definition at line 251 of file reporter.cpp.

252 {
253 if (argvs_ && !argvs_->empty ())
254 {
255 const auto& args = *argvs_;
256 std::string line;
257 line.reserve (256);
258 line.append (get_comment_prefix ());
259 line.append ("Running: ");
260
261 // Append only the file name part of argv[0].
262 const std::string_view arg0 = args[0];
263 const auto sep = arg0.rfind ('/');
264 line.append ((sep != std::string_view::npos) ? arg0.substr (sep + 1)
265 : arg0);
266
267 for (size_t i = 1; i < args.size (); ++i)
268 {
269 line.append (" ");
270 line.append (args[i]);
271 }
272 line.append ("\n");
273
274 if (output_file_ != nullptr)
275 fprintf (output_file_, "%s", line.c_str ());
276
277#if !(defined(MICRO_OS_PLUS_STARTUP_ENABLED) \
278 && defined(MICRO_OS_PLUS_DIAG_TRACE_ENABLED))
281 printf ("%s", line.c_str ());
282#endif // !defined(MICRO_OS_PLUS_STARTUP_ENABLED)
283 }
284
285 {
286 // Build the "Built with ..." line. For the output file the compiler
287 // version is omitted; for stdout it is appended via __VERSION__.
288 std::string line;
289 line.reserve (256);
290 line.append (get_comment_prefix ());
291 line.append ("Built with ");
292#if defined(__clang__)
293 line.append ("clang " __VERSION__);
294#elif defined(__GNUC__)
295 line.append ("GCC " __VERSION__);
296#elif defined(_MSC_VER)
297 line.append ("MSVC");
298 char msvc_ver[16];
299 snprintf (msvc_ver, sizeof (msvc_ver), " - %d", _MSC_VER);
300 line.append (msvc_ver);
301#else
302 line.append ("an unknown compiler");
303#endif // defined(__clang__)
304#if !(defined(__APPLE__) || defined(__linux__) || defined(__unix__) \
305 || defined(WIN32))
306 // This is relevant only on bare-metal.
307#if defined(__ARM_PCS_VFP) || defined(__ARM_FP)
308 line.append (", with FP");
309#else
310 line.append (", no FP");
311#endif // defined(__ARM_PCS_VFP) || defined(__ARM_FP)
312#endif // !(defined(__APPLE__) || defined(__linux__) || defined(__unix__) || defined(WIN32))
313#if defined(__EXCEPTIONS)
314 line.append (", with exceptions");
315#else
316 line.append (", no exceptions");
317#endif // defined(__EXCEPTIONS)
318#if defined(MICRO_OS_PLUS_DEBUG_ENABLED)
319 line.append (", with MICRO_OS_PLUS_DEBUG_ENABLED");
320#endif // defined(MICRO_OS_PLUS_DEBUG_ENABLED)
321#if defined(MICRO_OS_PLUS_DIAG_TRACE_ENABLED)
322 line.append (", with MICRO_OS_PLUS_DIAG_TRACE_ENABLED");
323#endif // defined(MICRO_OS_PLUS_DIAG_TRACE_ENABLED)
324
325 if (output_file_ != nullptr)
326 {
327 fprintf (output_file_, "%s\n", line.c_str ());
328 }
329
330#if !(defined(MICRO_OS_PLUS_STARTUP_ENABLED) \
331 && defined(MICRO_OS_PLUS_DIAG_TRACE_ENABLED))
333 {
334 printf ("%s\n", line.c_str ());
335 }
336#endif // !defined(MICRO_OS_PLUS_STARTUP_ENABLED)
337 }
338 }
std::unique_ptr< std::vector< std::string_view > > argvs_
Owns the command-line arguments passed to the test runner.
Definition reporter.h:605
virtual const char * get_comment_prefix(void)=0
Returns the comment-prefix string used by this reporter format.

References argvs_, get_comment_prefix(), micro_os_plus::micro_test_plus::normal, output_file_, micro_os_plus::micro_test_plus::verbose, and verbosity_.

Referenced by micro_os_plus::micro_test_plus::reporter_human::begin_session(), micro_os_plus::micro_test_plus::reporter_tap::begin_session(), and get_comment_prefix().

Member Data Documentation

◆ add_empty_line_

◆ argvs_

std::unique_ptr<std::vector<std::string_view> > micro_os_plus::micro_test_plus::reporter::argvs_ {}
protectedinherited

Definition at line 605 of file reporter.h.

605{};

Referenced by reporter(), and write_info_().

◆ buffer_

◆ colours_

◆ expression_

detail::expression_formatter micro_os_plus::micro_test_plus::reporter::expression_ { colours_ }
protectedinherited

Used in pass() and fail() to format expression values before appending the result to buffer_. Will also be used by detail::deferred_reporter to pre-format expressions at construction time.

Definition at line 572 of file reporter.h.

572{ colours_ };

Referenced by expression().

◆ output_file_

◆ output_file_path_

const char* micro_os_plus::micro_test_plus::reporter::output_file_path_ { nullptr }
protectedinherited

When non-null, write_buffer_to_file_() writes accumulated output to this path in addition to (or instead of) standard output.

Definition at line 590 of file reporter.h.

590{ nullptr };

Referenced by reporter(), and ~reporter().

◆ verbosity_


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