C++ source file with implementations for the µTest++ test runner methods.
This source file contains the core implementations for the test runner facilities of the µTest++ framework. It provides the logic for initialising the test environment, registering and managing test suites, handling command-line arguments, orchestrating test execution, and determining the overall test result. The implementation supports automated discovery and execution of test suites, flexible verbosity control, and robust mechanisms for aborting test execution in critical scenarios.
This file must be included when building the µTest++ library.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
38
39
40
41#if defined(MICRO_OS_PLUS_INCLUDE_CONFIG_H)
42#include <micro-os-plus/config.h>
43#endif
44
46
47#include <stdio.h>
48#include <vector>
49
50
51
52#pragma GCC diagnostic ignored "-Waggregate-return"
53#if defined(__clang__)
54#pragma clang diagnostic ignored "-Wc++98-compat"
55#pragma clang diagnostic ignored "-Wc++98-c++11-c++14-compat"
56#pragma clang diagnostic ignored "-Wunknown-warning-option"
57#endif
58
60{
61
62
73 {
74#if defined(MICRO_OS_PLUS_TRACE_MICRO_TEST_PLUS)
75 printf ("%s\n", __PRETTY_FUNCTION__);
76#endif
77 }
78
79#pragma GCC diagnostic push
80#if defined(__clang__)
81#pragma clang diagnostic ignored "-Wunsafe-buffer-usage"
82#endif
95 void
97 {
98#if defined(MICRO_OS_PLUS_TRACE_MICRO_TEST_PLUS)
99 printf ("%s\n", __PRETTY_FUNCTION__);
100#endif
101
104
106
107#if !(defined(MICRO_OS_PLUS_INCLUDE_STARTUP) && defined(MICRO_OS_PLUS_TRACE))
108#if defined(MICRO_OS_PLUS_DEBUG)
109 printf ("argv[");
110 for (int i = 0; i < argc; ++i)
111 {
112 if (i > 0)
113 {
114 printf (", ");
115 }
116 printf ("'%s'", argv[i]);
117 }
118 puts ("]");
119#endif
120#endif
121
123 for (int i = 0; i < argc; ++i)
124 {
125 if (strcmp (argv[i], "--verbose") == 0)
126 {
128 }
129 else if (strcmp (argv[i], "--quiet") == 0)
130 {
132 }
133 else if (strcmp (argv[i], "--silent") == 0)
134 {
136 }
137 }
138
139
141
142
143
144#if !(defined(MICRO_OS_PLUS_INCLUDE_STARTUP) && defined(MICRO_OS_PLUS_TRACE))
146 {
147#if defined(__clang__)
148 printf ("Built with clang " __VERSION__);
149#elif defined(__GNUC__)
150 printf ("Built with GCC " __VERSION__);
151#elif defined(_MSC_VER)
152
153 printf ("Built with MSVC %d", _MSC_VER);
154#else
155 printf ("Built with an unknown compiler");
156#endif
157#if !(defined(__APPLE__) || defined(__linux__) || defined(__unix__) \
158 || defined(WIN32))
159
160#if defined(__ARM_PCS_VFP) || defined(__ARM_FP)
161 printf (", with FP");
162#else
163 printf (", no FP");
164#endif
165#endif
166#if defined(__EXCEPTIONS)
167 printf (", with exceptions");
168#else
169 printf (", no exceptions");
170#endif
171#if defined(MICRO_OS_PLUS_DEBUG)
172 printf (", with MICRO_OS_PLUS_DEBUG");
173#endif
174 puts (".");
175 }
176#endif
177
178
179
182
183
184
185
186 }
187#pragma GCC diagnostic pop
188
189 int
191 {
192 bool was_successful = true;
193
195 {
198 }
199
201 {
203 {
205
206 suite->begin_test_suite ();
207 suite->run ();
208 suite->end_test_suite ();
209
210 was_successful &= suite->was_successful ();
211 }
213 {
214
215 }
216 }
217 return was_successful ? 0 : 1;
218 }
219
231 void
233 {
234#if 0
235 printf ("%s\n", __PRETTY_FUNCTION__);
236#endif
237
239 {
240 suites_ = new std::vector<test_suite_base*> (); 241 }
243 }
244
254 void
256 {
258 }
259
260
261}
262
263