31 #include "Verbosity.h" 33 #include "TestRunner.h" 41 TestRunner* TestRunner::getRunner() {
42 static TestRunner singletonRunner;
43 return &singletonRunner;
50 void TestRunner::setStatusMatchingPattern(
const char* pattern, uint8_t status) {
51 size_t length = strlen(pattern);
52 if (length > 0 && pattern[length - 1] ==
'*') {
61 if (compareStringN((*p)->getName(), pattern, length) == 0) {
62 (*p)->setStatus(status);
67 void TestRunner::setStatusMatchingPattern(
const char* testClass,
68 const char* pattern, uint8_t status) {
72 String fullPattern(testClass);
73 fullPattern.concat(
'_');
74 fullPattern.concat(pattern);
76 setStatusMatchingPattern(fullPattern.c_str(), status);
79 TestRunner::TestRunner():
84 mVerbosity(Verbosity::kDefault),
89 mTimeout(kTimeoutDefault) {}
91 void TestRunner::runTest() {
110 if (*mCurrent ==
nullptr) {
116 switch ((*mCurrent)->getStatus()) {
119 (*mCurrent)->enableVerbosity(mVerbosity);
121 (*mCurrent)->setup();
137 unsigned long now = millis();
138 if (mTimeout > 0 && now >= mStartTime + 1000L * mTimeout) {
139 (*mCurrent)->expire();
149 mCurrent = (*mCurrent)->
getNext();
156 (*mCurrent)->teardown();
157 (*mCurrent)->resolve();
159 *mCurrent = *(*mCurrent)->
getNext();
163 (*mCurrent)->teardown();
164 (*mCurrent)->resolve();
166 *mCurrent = *(*mCurrent)->
getNext();
170 (*mCurrent)->teardown();
171 (*mCurrent)->resolve();
173 *mCurrent = *(*mCurrent)->
getNext();
177 (*mCurrent)->teardown();
178 (*mCurrent)->resolve();
180 *mCurrent = *(*mCurrent)->
getNext();
185 void TestRunner::setupRunner() {
188 mCount = countTests();
190 mStartTime = millis();
196 uint16_t TestRunner::countTests() {
204 void TestRunner::printStartRunner() {
208 printer->print(F(
"TestRunner started on "));
209 printer->print(mCount);
210 printer->println(F(
" test(s)."));
213 void TestRunner::resolveRun() {
217 printer->print(F(
"TestRunner summary: "));
218 printer->print(mPassedCount);
219 printer->print(F(
" passed, "));
220 printer->print(mFailedCount);
221 printer->print(F(
" failed, "));
222 printer->print(mSkippedCount);
223 printer->print(F(
" skipped, "));
224 printer->print(mExpiredCount);
225 printer->print(F(
" timed out, out of "));
226 printer->print(mCount);
227 printer->println(F(
" test(s)."));
232 void TestRunner::listTests() {
236 printer->print(F(
"TestRunner test count: "));
237 printer->println(mCount);
239 printer->print(F(
"Test "));
241 printer->print(F(
"; status: "));
242 printer->println((*p)->getStatus());
246 void TestRunner::setRunnerTimeout(TimeoutType timeout) {
static const uint8_t kStatusFailed
Test has failed, or failed() was called.
static const uint8_t kStatusNew
Test is new, needs to be setup.
static void print(const FCString &s)
Convenience method for printing an FCString.
static void setPrinter(Print *printer)
Set the printer.
static const uint8_t kStatusPassed
Test has passed, or pass() was called.
Test ** getNext()
Return the next pointer as a pointer to the pointer, similar to getRoot().
static const uint8_t kStatusSkipped
Test is skipped, through the exclude() method or skip() was called.
static Test ** getRoot()
Get the pointer to the root pointer.
static void setPrinter(Print *printer)
Set the output printer.
static Print * getPrinter()
Get the output printer used by the various assertion() methods and the TestRunner.
static const uint8_t kTestRunSummary
Print TestRunner summary message.
static const uint8_t kStatusSetup
Test is set up.
static const uint8_t kStatusExpired
Test has timed out, or expire() called.
static bool isVerbosity(uint8_t verbosity)
Returns true if ANY of the bit flags of 'verbosity' is set.