micro-test-plus 3.2.2
µTest++ Testing Framework
Loading...
Searching...
No Matches
micro_os_plus::micro_test_plus::reflection Namespace Reference

Reflection utilities for the µTest++ testing framework. More...

Classes

class  source_location
 Local implementation of source location information for diagnostics. More...

Functions

const char * short_name (const char *name)
 Extract a short type or function name from a fully qualified name.
template<class T>
constexpr auto type_name (void) -> std::string_view
 Extract the type name from the __PRETTY_FUNCTION__ macro.

Detailed Description

The reflection namespace provides facilities for obtaining source location information and type names at compile time, thereby supporting advanced reporting and diagnostics within the µTest++ framework.

It includes a local implementation of source_location for environments lacking C++20 standard support, as well as utilities for extracting concise type names from compiler-specific macros such as __PRETTY_FUNCTION__.

All definitions within this namespace are intended to facilitate advanced reflection and reporting capabilities.

Function Documentation

◆ short_name()

const char * micro_os_plus::micro_test_plus::reflection::short_name ( const char * name)
Parameters
nameThe fully qualified name as a C-string.
Returns
A pointer to the short name within the input string.

This function extracts the short name from a given file path by locating the final folder separator ('/'). If a separator is found, it returns a pointer to the character immediately following it, effectively providing the file or folder name. If no separator is present, the original input string is returned. This utility is useful for reporting concise file or folder names in test output.

Definition at line 128 of file micro-test-plus.cpp.

129 {
130#pragma GCC diagnostic push
131#if defined(__clang__)
132#pragma clang diagnostic ignored "-Wunsafe-buffer-usage"
133#endif
134 const char* p = strrchr (name, '/');
135 if (p != nullptr)
136 return p + 1;
137 else
138 return name;
139#pragma GCC diagnostic pop
140 }

Referenced by micro_os_plus::micro_test_plus::test_reporter::output_fail_prefix_().

◆ type_name()

template<class T>
auto micro_os_plus::micro_test_plus::reflection::type_name ( void ) -> std::string_view
nodiscardconstexpr

This function template parses the compiler-specific __PRETTY_FUNCTION__ macro to extract a concise type name for the template parameter T.

The implementation is compiler-dependent and may require adjustment for different toolchains. It is primarily intended for internal use within the µTest++ framework to support improved diagnostics and reporting.

Template Parameters
TThe type whose name is to be extracted.
Parameters
None.
Returns
A std::string_view containing the extracted type name.

Definition at line 133 of file reflection-inlines.h.

134 {
135#if defined(__clang__)
136#pragma GCC diagnostic push
137#pragma clang diagnostic ignored "-Wunsafe-buffer-usage"
138 // printf("|%s|%zu|\n", __PRETTY_FUNCTION__, sizeof
139 // (__PRETTY_FUNCTION__)); printf("|%s|\n", &__PRETTY_FUNCTION__[78]);
140 return { &__PRETTY_FUNCTION__[78], sizeof (__PRETTY_FUNCTION__) - 80 };
141#pragma GCC diagnostic pop
142#elif defined(__GNUC__)
143 // printf("|%s|%zu|\n", __PRETTY_FUNCTION__, sizeof
144 // (__PRETTY_FUNCTION__)); printf("|%s|\n", &__PRETTY_FUNCTION__[93]);
145 return { &__PRETTY_FUNCTION__[93], sizeof (__PRETTY_FUNCTION__) - 144 };
146#else
147#error "Unsupported compiler"
148 return "Unsupported compiler";
149#endif
150 }

Referenced by micro_os_plus::micro_test_plus::test_reporter::operator<<().