Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
src/CppUTest/Utest.cpp@1:4769360130ed, 2014-06-17 (annotated)
- Committer:
- Rohit Grover
- Date:
- Tue Jun 17 15:52:54 2014 +0100
- Revision:
- 1:4769360130ed
- Parent:
- 0:0b799af9d58e
updating to the latest version of cppUtest; tested against nordic's m-kit
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| rgrover1 | 0:0b799af9d58e | 1 | /* |
| rgrover1 | 0:0b799af9d58e | 2 | * Copyright (c) 2007, Michael Feathers, James Grenning and Bas Vodde |
| rgrover1 | 0:0b799af9d58e | 3 | * All rights reserved. |
| rgrover1 | 0:0b799af9d58e | 4 | * |
| rgrover1 | 0:0b799af9d58e | 5 | * Redistribution and use in source and binary forms, with or without |
| rgrover1 | 0:0b799af9d58e | 6 | * modification, are permitted provided that the following conditions are met: |
| rgrover1 | 0:0b799af9d58e | 7 | * * Redistributions of source code must retain the above copyright |
| rgrover1 | 0:0b799af9d58e | 8 | * notice, this list of conditions and the following disclaimer. |
| rgrover1 | 0:0b799af9d58e | 9 | * * Redistributions in binary form must reproduce the above copyright |
| rgrover1 | 0:0b799af9d58e | 10 | * notice, this list of conditions and the following disclaimer in the |
| rgrover1 | 0:0b799af9d58e | 11 | * documentation and/or other materials provided with the distribution. |
| rgrover1 | 0:0b799af9d58e | 12 | * * Neither the name of the <organization> nor the |
| rgrover1 | 0:0b799af9d58e | 13 | * names of its contributors may be used to endorse or promote products |
| rgrover1 | 0:0b799af9d58e | 14 | * derived from this software without specific prior written permission. |
| rgrover1 | 0:0b799af9d58e | 15 | * |
| rgrover1 | 0:0b799af9d58e | 16 | * THIS SOFTWARE IS PROVIDED BY THE EARLIER MENTIONED AUTHORS ``AS IS'' AND ANY |
| rgrover1 | 0:0b799af9d58e | 17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
| rgrover1 | 0:0b799af9d58e | 18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
| rgrover1 | 0:0b799af9d58e | 19 | * DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY |
| rgrover1 | 0:0b799af9d58e | 20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
| rgrover1 | 0:0b799af9d58e | 21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
| rgrover1 | 0:0b799af9d58e | 22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
| rgrover1 | 0:0b799af9d58e | 23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| rgrover1 | 0:0b799af9d58e | 24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
| rgrover1 | 0:0b799af9d58e | 25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| rgrover1 | 0:0b799af9d58e | 26 | */ |
| rgrover1 | 0:0b799af9d58e | 27 | |
| rgrover1 | 0:0b799af9d58e | 28 | #include "CppUTest/TestHarness.h" |
| rgrover1 | 0:0b799af9d58e | 29 | #include "CppUTest/TestRegistry.h" |
| rgrover1 | 0:0b799af9d58e | 30 | #include "CppUTest/PlatformSpecificFunctions.h" |
| rgrover1 | 0:0b799af9d58e | 31 | #include "CppUTest/TestOutput.h" |
| rgrover1 | 0:0b799af9d58e | 32 | |
| rgrover1 | 0:0b799af9d58e | 33 | bool doubles_equal(double d1, double d2, double threshold) |
| rgrover1 | 0:0b799af9d58e | 34 | { |
| rgrover1 | 0:0b799af9d58e | 35 | if (PlatformSpecificIsNan(d1) || PlatformSpecificIsNan(d2) || PlatformSpecificIsNan(threshold)) |
| rgrover1 | 0:0b799af9d58e | 36 | return false; |
| rgrover1 | 0:0b799af9d58e | 37 | return PlatformSpecificFabs(d1 - d2) <= threshold; |
| rgrover1 | 0:0b799af9d58e | 38 | } |
| rgrover1 | 0:0b799af9d58e | 39 | |
| rgrover1 | 0:0b799af9d58e | 40 | /* Sometimes stubs use the CppUTest assertions. |
| rgrover1 | 0:0b799af9d58e | 41 | * Its not correct to do so, but this small helper class will prevent a segmentation fault and instead |
| rgrover1 | 0:0b799af9d58e | 42 | * will give an error message and also the file/line of the check that was executed outside the tests. |
| rgrover1 | 0:0b799af9d58e | 43 | */ |
| rgrover1 | 0:0b799af9d58e | 44 | class OutsideTestRunnerUTest: public UtestShell |
| rgrover1 | 0:0b799af9d58e | 45 | { |
| rgrover1 | 0:0b799af9d58e | 46 | public: |
| rgrover1 | 0:0b799af9d58e | 47 | static OutsideTestRunnerUTest& instance(); |
| rgrover1 | 0:0b799af9d58e | 48 | virtual TestResult& getTestResult() |
| rgrover1 | 0:0b799af9d58e | 49 | { |
| rgrover1 | 0:0b799af9d58e | 50 | return defaultTestResult; |
| rgrover1 | 0:0b799af9d58e | 51 | } |
| rgrover1 | 0:0b799af9d58e | 52 | virtual void exitCurrentTest() |
| rgrover1 | 0:0b799af9d58e | 53 | { |
| rgrover1 | 0:0b799af9d58e | 54 | } |
| rgrover1 | 0:0b799af9d58e | 55 | virtual ~OutsideTestRunnerUTest() |
| rgrover1 | 0:0b799af9d58e | 56 | { |
| rgrover1 | 0:0b799af9d58e | 57 | } |
| rgrover1 | 0:0b799af9d58e | 58 | private: |
| rgrover1 | 0:0b799af9d58e | 59 | OutsideTestRunnerUTest() : |
| rgrover1 | 0:0b799af9d58e | 60 | UtestShell("\n\t NOTE: Assertion happened without being in a test run (perhaps in main?)", "\n\t Something is very wrong. Check this assertion and fix", "unknown file", 0), |
| rgrover1 | 0:0b799af9d58e | 61 | defaultTestResult(defaultOutput) |
| rgrover1 | 0:0b799af9d58e | 62 | { |
| rgrover1 | 0:0b799af9d58e | 63 | } |
| rgrover1 | 0:0b799af9d58e | 64 | ConsoleTestOutput defaultOutput; |
| rgrover1 | 0:0b799af9d58e | 65 | TestResult defaultTestResult; |
| rgrover1 | 0:0b799af9d58e | 66 | }; |
| rgrover1 | 0:0b799af9d58e | 67 | |
| rgrover1 | 0:0b799af9d58e | 68 | OutsideTestRunnerUTest& OutsideTestRunnerUTest::instance() |
| rgrover1 | 0:0b799af9d58e | 69 | { |
| rgrover1 | 0:0b799af9d58e | 70 | static OutsideTestRunnerUTest instance_; |
| rgrover1 | 0:0b799af9d58e | 71 | return instance_; |
| rgrover1 | 0:0b799af9d58e | 72 | } |
| rgrover1 | 0:0b799af9d58e | 73 | |
| rgrover1 | 0:0b799af9d58e | 74 | /* |
| rgrover1 | 0:0b799af9d58e | 75 | * Below helpers are used for the PlatformSpecificSetJmp and LongJmp. They pass a method for what needs to happen after |
| rgrover1 | 0:0b799af9d58e | 76 | * the jump, so that the stack stays right. |
| rgrover1 | 0:0b799af9d58e | 77 | * |
| rgrover1 | 0:0b799af9d58e | 78 | */ |
| rgrover1 | 0:0b799af9d58e | 79 | |
| rgrover1 | 0:0b799af9d58e | 80 | extern "C" { |
| rgrover1 | 0:0b799af9d58e | 81 | |
| rgrover1 | 0:0b799af9d58e | 82 | static void helperDoTestSetup(void* data) |
| rgrover1 | 0:0b799af9d58e | 83 | { |
| rgrover1 | 0:0b799af9d58e | 84 | ((Utest*)data)->setup(); |
| rgrover1 | 0:0b799af9d58e | 85 | } |
| rgrover1 | 0:0b799af9d58e | 86 | |
| rgrover1 | 0:0b799af9d58e | 87 | static void helperDoTestBody(void* data) |
| rgrover1 | 0:0b799af9d58e | 88 | { |
| rgrover1 | 0:0b799af9d58e | 89 | ((Utest*)data)->testBody(); |
| rgrover1 | 0:0b799af9d58e | 90 | } |
| rgrover1 | 0:0b799af9d58e | 91 | |
| rgrover1 | 0:0b799af9d58e | 92 | static void helperDoTestTeardown(void* data) |
| rgrover1 | 0:0b799af9d58e | 93 | { |
| rgrover1 | 0:0b799af9d58e | 94 | ((Utest*)data)->teardown(); |
| rgrover1 | 0:0b799af9d58e | 95 | } |
| rgrover1 | 0:0b799af9d58e | 96 | |
| rgrover1 | 0:0b799af9d58e | 97 | struct HelperTestRunInfo |
| rgrover1 | 0:0b799af9d58e | 98 | { |
| rgrover1 | 0:0b799af9d58e | 99 | HelperTestRunInfo(UtestShell* shell, TestPlugin* plugin, TestResult* result) : shell_(shell), plugin_(plugin), result_(result){} |
| rgrover1 | 0:0b799af9d58e | 100 | |
| rgrover1 | 0:0b799af9d58e | 101 | UtestShell* shell_; |
| rgrover1 | 0:0b799af9d58e | 102 | TestPlugin* plugin_; |
| rgrover1 | 0:0b799af9d58e | 103 | TestResult* result_; |
| rgrover1 | 0:0b799af9d58e | 104 | }; |
| rgrover1 | 0:0b799af9d58e | 105 | |
| rgrover1 | 0:0b799af9d58e | 106 | static void helperDoRunOneTestInCurrentProcess(void* data) |
| rgrover1 | 0:0b799af9d58e | 107 | { |
| rgrover1 | 0:0b799af9d58e | 108 | HelperTestRunInfo* runInfo = (HelperTestRunInfo*) data; |
| rgrover1 | 0:0b799af9d58e | 109 | |
| rgrover1 | 0:0b799af9d58e | 110 | UtestShell* shell = runInfo->shell_; |
| rgrover1 | 0:0b799af9d58e | 111 | TestPlugin* plugin = runInfo->plugin_; |
| rgrover1 | 0:0b799af9d58e | 112 | TestResult* result = runInfo->result_; |
| rgrover1 | 0:0b799af9d58e | 113 | |
| rgrover1 | 0:0b799af9d58e | 114 | shell->runOneTestInCurrentProcess(plugin, *result); |
| rgrover1 | 0:0b799af9d58e | 115 | } |
| rgrover1 | 0:0b799af9d58e | 116 | |
| rgrover1 | 0:0b799af9d58e | 117 | static void helperDoRunOneTestSeperateProcess(void* data) |
| rgrover1 | 0:0b799af9d58e | 118 | { |
| rgrover1 | 0:0b799af9d58e | 119 | HelperTestRunInfo* runInfo = (HelperTestRunInfo*) data; |
| rgrover1 | 0:0b799af9d58e | 120 | |
| rgrover1 | 0:0b799af9d58e | 121 | UtestShell* shell = runInfo->shell_; |
| rgrover1 | 0:0b799af9d58e | 122 | TestPlugin* plugin = runInfo->plugin_; |
| rgrover1 | 0:0b799af9d58e | 123 | TestResult* result = runInfo->result_; |
| rgrover1 | 0:0b799af9d58e | 124 | PlatformSpecificRunTestInASeperateProcess(shell, plugin, result); |
| rgrover1 | 0:0b799af9d58e | 125 | } |
| rgrover1 | 0:0b799af9d58e | 126 | |
| rgrover1 | 0:0b799af9d58e | 127 | } |
| rgrover1 | 0:0b799af9d58e | 128 | |
| rgrover1 | 0:0b799af9d58e | 129 | /******************************** */ |
| rgrover1 | 0:0b799af9d58e | 130 | |
| rgrover1 | 0:0b799af9d58e | 131 | UtestShell::UtestShell() : |
| rgrover1 | 0:0b799af9d58e | 132 | group_("UndefinedTestGroup"), name_("UndefinedTest"), file_("UndefinedFile"), lineNumber_(0), next_(&NullTestShell::instance()), isRunAsSeperateProcess_(false), hasFailed_(false) |
| rgrover1 | 0:0b799af9d58e | 133 | { |
| rgrover1 | 0:0b799af9d58e | 134 | } |
| rgrover1 | 0:0b799af9d58e | 135 | |
| rgrover1 | 0:0b799af9d58e | 136 | UtestShell::UtestShell(const char* groupName, const char* testName, const char* fileName, int lineNumber) : |
| rgrover1 | 0:0b799af9d58e | 137 | group_(groupName), name_(testName), file_(fileName), lineNumber_(lineNumber), next_(&NullTestShell::instance()), isRunAsSeperateProcess_(false), hasFailed_(false) |
| rgrover1 | 0:0b799af9d58e | 138 | { |
| rgrover1 | 0:0b799af9d58e | 139 | } |
| rgrover1 | 0:0b799af9d58e | 140 | |
| rgrover1 | 0:0b799af9d58e | 141 | UtestShell::UtestShell(const char* groupName, const char* testName, const char* fileName, int lineNumber, UtestShell* nextTest) : |
| rgrover1 | 0:0b799af9d58e | 142 | group_(groupName), name_(testName), file_(fileName), lineNumber_(lineNumber), next_(nextTest), isRunAsSeperateProcess_(false), hasFailed_(false) |
| rgrover1 | 0:0b799af9d58e | 143 | { |
| rgrover1 | 0:0b799af9d58e | 144 | } |
| rgrover1 | 0:0b799af9d58e | 145 | |
| rgrover1 | 0:0b799af9d58e | 146 | UtestShell::~UtestShell() |
| rgrover1 | 0:0b799af9d58e | 147 | { |
| rgrover1 | 0:0b799af9d58e | 148 | } |
| rgrover1 | 0:0b799af9d58e | 149 | |
| rgrover1 | 0:0b799af9d58e | 150 | static void defaultCrashMethod() |
| rgrover1 | 0:0b799af9d58e | 151 | { |
| rgrover1 | 0:0b799af9d58e | 152 | UtestShell* ptr = (UtestShell*) 0x0; ptr->countTests(); |
| rgrover1 | 0:0b799af9d58e | 153 | } |
| rgrover1 | 0:0b799af9d58e | 154 | |
| rgrover1 | 0:0b799af9d58e | 155 | static void (*pleaseCrashMeRightNow) () = defaultCrashMethod; |
| rgrover1 | 0:0b799af9d58e | 156 | |
| rgrover1 | 0:0b799af9d58e | 157 | void UtestShell::setCrashMethod(void (*crashme)()) |
| rgrover1 | 0:0b799af9d58e | 158 | { |
| rgrover1 | 0:0b799af9d58e | 159 | pleaseCrashMeRightNow = crashme; |
| rgrover1 | 0:0b799af9d58e | 160 | } |
| rgrover1 | 0:0b799af9d58e | 161 | |
| rgrover1 | 0:0b799af9d58e | 162 | void UtestShell::resetCrashMethod() |
| rgrover1 | 0:0b799af9d58e | 163 | { |
| rgrover1 | 0:0b799af9d58e | 164 | pleaseCrashMeRightNow = defaultCrashMethod; |
| rgrover1 | 0:0b799af9d58e | 165 | } |
| rgrover1 | 0:0b799af9d58e | 166 | |
| rgrover1 | 0:0b799af9d58e | 167 | void UtestShell::crash() |
| rgrover1 | 0:0b799af9d58e | 168 | { |
| rgrover1 | 0:0b799af9d58e | 169 | pleaseCrashMeRightNow(); |
| rgrover1 | 0:0b799af9d58e | 170 | } |
| rgrover1 | 0:0b799af9d58e | 171 | |
| rgrover1 | 0:0b799af9d58e | 172 | void UtestShell::runOneTest(TestPlugin* plugin, TestResult& result) |
| rgrover1 | 0:0b799af9d58e | 173 | { |
| rgrover1 | 0:0b799af9d58e | 174 | HelperTestRunInfo runInfo(this, plugin, &result); |
| rgrover1 | 0:0b799af9d58e | 175 | if (isRunInSeperateProcess()) |
| rgrover1 | 0:0b799af9d58e | 176 | PlatformSpecificSetJmp(helperDoRunOneTestSeperateProcess, &runInfo); |
| rgrover1 | 0:0b799af9d58e | 177 | else |
| rgrover1 | 0:0b799af9d58e | 178 | PlatformSpecificSetJmp(helperDoRunOneTestInCurrentProcess, &runInfo); |
| rgrover1 | 0:0b799af9d58e | 179 | } |
| rgrover1 | 0:0b799af9d58e | 180 | |
| rgrover1 | 0:0b799af9d58e | 181 | Utest* UtestShell::createTest() |
| rgrover1 | 0:0b799af9d58e | 182 | { |
| rgrover1 | 0:0b799af9d58e | 183 | return new Utest(); |
| rgrover1 | 0:0b799af9d58e | 184 | } |
| rgrover1 | 0:0b799af9d58e | 185 | |
| rgrover1 | 0:0b799af9d58e | 186 | void UtestShell::destroyTest(Utest* test) |
| rgrover1 | 0:0b799af9d58e | 187 | { |
| rgrover1 | 0:0b799af9d58e | 188 | delete test; |
| rgrover1 | 0:0b799af9d58e | 189 | } |
| rgrover1 | 0:0b799af9d58e | 190 | |
| rgrover1 | 0:0b799af9d58e | 191 | void UtestShell::runOneTestInCurrentProcess(TestPlugin* plugin, TestResult& result) |
| rgrover1 | 0:0b799af9d58e | 192 | { |
| rgrover1 | 0:0b799af9d58e | 193 | plugin->runAllPreTestAction(*this, result); |
| rgrover1 | 0:0b799af9d58e | 194 | |
| rgrover1 | 0:0b799af9d58e | 195 | //save test context, so that test class can be tested |
| rgrover1 | 0:0b799af9d58e | 196 | UtestShell* savedTest = UtestShell::getCurrent(); |
| rgrover1 | 0:0b799af9d58e | 197 | TestResult* savedResult = UtestShell::getTestResult(); |
| rgrover1 | 0:0b799af9d58e | 198 | |
| rgrover1 | 0:0b799af9d58e | 199 | result.countRun(); |
| rgrover1 | 0:0b799af9d58e | 200 | UtestShell::setTestResult(&result); |
| rgrover1 | 0:0b799af9d58e | 201 | UtestShell::setCurrentTest(this); |
| rgrover1 | 0:0b799af9d58e | 202 | |
| rgrover1 | 0:0b799af9d58e | 203 | Utest* testToRun = createTest(); |
| rgrover1 | 0:0b799af9d58e | 204 | testToRun->run(); |
| rgrover1 | 0:0b799af9d58e | 205 | destroyTest(testToRun); |
| rgrover1 | 0:0b799af9d58e | 206 | |
| rgrover1 | 0:0b799af9d58e | 207 | UtestShell::setCurrentTest(savedTest); |
| rgrover1 | 0:0b799af9d58e | 208 | UtestShell::setTestResult(savedResult); |
| rgrover1 | 0:0b799af9d58e | 209 | |
| rgrover1 | 0:0b799af9d58e | 210 | plugin->runAllPostTestAction(*this, result); |
| rgrover1 | 0:0b799af9d58e | 211 | } |
| rgrover1 | 0:0b799af9d58e | 212 | |
| rgrover1 | 0:0b799af9d58e | 213 | UtestShell *UtestShell::getNext() const |
| rgrover1 | 0:0b799af9d58e | 214 | { |
| rgrover1 | 0:0b799af9d58e | 215 | return next_; |
| rgrover1 | 0:0b799af9d58e | 216 | } |
| rgrover1 | 0:0b799af9d58e | 217 | |
| rgrover1 | 0:0b799af9d58e | 218 | UtestShell* UtestShell::addTest(UtestShell *test) |
| rgrover1 | 0:0b799af9d58e | 219 | { |
| rgrover1 | 0:0b799af9d58e | 220 | next_ = test; |
| rgrover1 | 0:0b799af9d58e | 221 | return this; |
| rgrover1 | 0:0b799af9d58e | 222 | } |
| rgrover1 | 0:0b799af9d58e | 223 | |
| rgrover1 | 0:0b799af9d58e | 224 | int UtestShell::countTests() |
| rgrover1 | 0:0b799af9d58e | 225 | { |
| rgrover1 | 0:0b799af9d58e | 226 | return next_->countTests() + 1; |
| rgrover1 | 0:0b799af9d58e | 227 | } |
| rgrover1 | 0:0b799af9d58e | 228 | |
| rgrover1 | 0:0b799af9d58e | 229 | bool UtestShell::isNull() const |
| rgrover1 | 0:0b799af9d58e | 230 | { |
| rgrover1 | 0:0b799af9d58e | 231 | return false; |
| rgrover1 | 0:0b799af9d58e | 232 | } |
| rgrover1 | 0:0b799af9d58e | 233 | |
| rgrover1 | 0:0b799af9d58e | 234 | SimpleString UtestShell::getMacroName() const |
| rgrover1 | 0:0b799af9d58e | 235 | { |
| rgrover1 | 0:0b799af9d58e | 236 | return "TEST"; |
| rgrover1 | 0:0b799af9d58e | 237 | } |
| rgrover1 | 0:0b799af9d58e | 238 | |
| rgrover1 | 0:0b799af9d58e | 239 | const SimpleString UtestShell::getName() const |
| rgrover1 | 0:0b799af9d58e | 240 | { |
| rgrover1 | 0:0b799af9d58e | 241 | return SimpleString(name_); |
| rgrover1 | 0:0b799af9d58e | 242 | } |
| rgrover1 | 0:0b799af9d58e | 243 | |
| rgrover1 | 0:0b799af9d58e | 244 | const SimpleString UtestShell::getGroup() const |
| rgrover1 | 0:0b799af9d58e | 245 | { |
| rgrover1 | 0:0b799af9d58e | 246 | return SimpleString(group_); |
| rgrover1 | 0:0b799af9d58e | 247 | } |
| rgrover1 | 0:0b799af9d58e | 248 | |
| rgrover1 | 0:0b799af9d58e | 249 | SimpleString UtestShell::getFormattedName() const |
| rgrover1 | 0:0b799af9d58e | 250 | { |
| rgrover1 | 0:0b799af9d58e | 251 | SimpleString formattedName(getMacroName()); |
| rgrover1 | 0:0b799af9d58e | 252 | formattedName += "("; |
| rgrover1 | 0:0b799af9d58e | 253 | formattedName += group_; |
| rgrover1 | 0:0b799af9d58e | 254 | formattedName += ", "; |
| rgrover1 | 0:0b799af9d58e | 255 | formattedName += name_; |
| rgrover1 | 0:0b799af9d58e | 256 | formattedName += ")"; |
| rgrover1 | 0:0b799af9d58e | 257 | |
| rgrover1 | 0:0b799af9d58e | 258 | return formattedName; |
| rgrover1 | 0:0b799af9d58e | 259 | } |
| rgrover1 | 0:0b799af9d58e | 260 | |
| rgrover1 | 0:0b799af9d58e | 261 | bool UtestShell::hasFailed() const |
| rgrover1 | 0:0b799af9d58e | 262 | { |
| rgrover1 | 0:0b799af9d58e | 263 | return hasFailed_; |
| rgrover1 | 0:0b799af9d58e | 264 | } |
| rgrover1 | 0:0b799af9d58e | 265 | |
| rgrover1 | 0:0b799af9d58e | 266 | const char* UtestShell::getProgressIndicator() const |
| rgrover1 | 0:0b799af9d58e | 267 | { |
| rgrover1 | 0:0b799af9d58e | 268 | return "."; |
| rgrover1 | 0:0b799af9d58e | 269 | } |
| rgrover1 | 0:0b799af9d58e | 270 | |
| rgrover1 | 0:0b799af9d58e | 271 | bool UtestShell::isRunInSeperateProcess() const |
| rgrover1 | 0:0b799af9d58e | 272 | { |
| rgrover1 | 0:0b799af9d58e | 273 | return isRunAsSeperateProcess_; |
| rgrover1 | 0:0b799af9d58e | 274 | } |
| rgrover1 | 0:0b799af9d58e | 275 | |
| rgrover1 | 0:0b799af9d58e | 276 | void UtestShell::setRunInSeperateProcess() |
| rgrover1 | 0:0b799af9d58e | 277 | { |
| rgrover1 | 0:0b799af9d58e | 278 | isRunAsSeperateProcess_ = true; |
| rgrover1 | 0:0b799af9d58e | 279 | } |
| rgrover1 | 0:0b799af9d58e | 280 | |
| rgrover1 | 0:0b799af9d58e | 281 | |
| rgrover1 | 0:0b799af9d58e | 282 | void UtestShell::setFileName(const char* fileName) |
| rgrover1 | 0:0b799af9d58e | 283 | { |
| rgrover1 | 0:0b799af9d58e | 284 | file_ = fileName; |
| rgrover1 | 0:0b799af9d58e | 285 | } |
| rgrover1 | 0:0b799af9d58e | 286 | |
| rgrover1 | 0:0b799af9d58e | 287 | void UtestShell::setLineNumber(int lineNumber) |
| rgrover1 | 0:0b799af9d58e | 288 | { |
| rgrover1 | 0:0b799af9d58e | 289 | lineNumber_ = lineNumber; |
| rgrover1 | 0:0b799af9d58e | 290 | } |
| rgrover1 | 0:0b799af9d58e | 291 | |
| rgrover1 | 0:0b799af9d58e | 292 | void UtestShell::setGroupName(const char* groupName) |
| rgrover1 | 0:0b799af9d58e | 293 | { |
| rgrover1 | 0:0b799af9d58e | 294 | group_ = groupName; |
| rgrover1 | 0:0b799af9d58e | 295 | } |
| rgrover1 | 0:0b799af9d58e | 296 | |
| rgrover1 | 0:0b799af9d58e | 297 | void UtestShell::setTestName(const char* testName) |
| rgrover1 | 0:0b799af9d58e | 298 | { |
| rgrover1 | 0:0b799af9d58e | 299 | name_ = testName; |
| rgrover1 | 0:0b799af9d58e | 300 | } |
| rgrover1 | 0:0b799af9d58e | 301 | |
| rgrover1 | 0:0b799af9d58e | 302 | const SimpleString UtestShell::getFile() const |
| rgrover1 | 0:0b799af9d58e | 303 | { |
| rgrover1 | 0:0b799af9d58e | 304 | return SimpleString(file_); |
| rgrover1 | 0:0b799af9d58e | 305 | } |
| rgrover1 | 0:0b799af9d58e | 306 | |
| rgrover1 | 0:0b799af9d58e | 307 | int UtestShell::getLineNumber() const |
| rgrover1 | 0:0b799af9d58e | 308 | { |
| rgrover1 | 0:0b799af9d58e | 309 | return lineNumber_; |
| rgrover1 | 0:0b799af9d58e | 310 | } |
| rgrover1 | 0:0b799af9d58e | 311 | |
| rgrover1 | 0:0b799af9d58e | 312 | bool UtestShell::shouldRun(const TestFilter& groupFilter, const TestFilter& nameFilter) const |
| rgrover1 | 0:0b799af9d58e | 313 | { |
| rgrover1 | 0:0b799af9d58e | 314 | if (groupFilter.match(group_) && nameFilter.match(name_)) return true; |
| rgrover1 | 0:0b799af9d58e | 315 | |
| rgrover1 | 0:0b799af9d58e | 316 | return false; |
| rgrover1 | 0:0b799af9d58e | 317 | } |
| rgrover1 | 0:0b799af9d58e | 318 | |
| rgrover1 | 0:0b799af9d58e | 319 | void UtestShell::failWith(const TestFailure& failure) |
| rgrover1 | 0:0b799af9d58e | 320 | { |
| rgrover1 | 0:0b799af9d58e | 321 | failWith(failure, NormalTestTerminator()); |
| rgrover1 | 0:0b799af9d58e | 322 | } |
| rgrover1 | 0:0b799af9d58e | 323 | |
| rgrover1 | 0:0b799af9d58e | 324 | void UtestShell::failWith(const TestFailure& failure, const TestTerminator& terminator) |
| rgrover1 | 0:0b799af9d58e | 325 | { |
| rgrover1 | 0:0b799af9d58e | 326 | hasFailed_ = true; |
| rgrover1 | 0:0b799af9d58e | 327 | getTestResult()->addFailure(failure); |
| rgrover1 | 0:0b799af9d58e | 328 | terminator.exitCurrentTest(); |
| rgrover1 | 0:0b799af9d58e | 329 | } |
| rgrover1 | 0:0b799af9d58e | 330 | |
| rgrover1 | 0:0b799af9d58e | 331 | void UtestShell::assertTrue(bool condition, const char * checkString, const char* conditionString, const char* fileName, int lineNumber, const TestTerminator& testTerminator) |
| rgrover1 | 0:0b799af9d58e | 332 | { |
| rgrover1 | 0:0b799af9d58e | 333 | assertTrueText(condition, checkString, conditionString, "", fileName, lineNumber, testTerminator); |
| rgrover1 | 0:0b799af9d58e | 334 | } |
| rgrover1 | 0:0b799af9d58e | 335 | |
| rgrover1 | 0:0b799af9d58e | 336 | void UtestShell::assertTrueText(bool condition, const char *checkString, const char *conditionString, const char* text, const char *fileName, int lineNumber, const TestTerminator& testTerminator) |
| rgrover1 | 0:0b799af9d58e | 337 | { |
| rgrover1 | 0:0b799af9d58e | 338 | getTestResult()->countCheck(); |
| rgrover1 | 0:0b799af9d58e | 339 | if (!condition) |
| rgrover1 | 0:0b799af9d58e | 340 | failWith(CheckFailure(this, fileName, lineNumber, checkString, conditionString, text), testTerminator); |
| rgrover1 | 0:0b799af9d58e | 341 | } |
| rgrover1 | 0:0b799af9d58e | 342 | |
| rgrover1 | 0:0b799af9d58e | 343 | void UtestShell::fail(const char *text, const char* fileName, int lineNumber, const TestTerminator& testTerminator) |
| rgrover1 | 0:0b799af9d58e | 344 | { |
| rgrover1 | 0:0b799af9d58e | 345 | getTestResult()->countCheck(); |
| rgrover1 | 0:0b799af9d58e | 346 | failWith(FailFailure(this, fileName, lineNumber, text), testTerminator); |
| rgrover1 | 0:0b799af9d58e | 347 | } |
| rgrover1 | 0:0b799af9d58e | 348 | |
| rgrover1 | 0:0b799af9d58e | 349 | void UtestShell::assertCstrEqual(const char* expected, const char* actual, const char* fileName, int lineNumber, const TestTerminator& testTerminator) |
| rgrover1 | 0:0b799af9d58e | 350 | { |
| rgrover1 | 0:0b799af9d58e | 351 | getTestResult()->countCheck(); |
| rgrover1 | 0:0b799af9d58e | 352 | if (actual == 0 && expected == 0) return; |
| rgrover1 | 0:0b799af9d58e | 353 | if (actual == 0 || expected == 0) |
| rgrover1 | 0:0b799af9d58e | 354 | failWith(StringEqualFailure(this, fileName, lineNumber, expected, actual), testTerminator); |
| rgrover1 | 0:0b799af9d58e | 355 | if (PlatformSpecificStrCmp(expected, actual) != 0) |
| rgrover1 | 0:0b799af9d58e | 356 | failWith(StringEqualFailure(this, fileName, lineNumber, expected, actual), testTerminator); |
| rgrover1 | 0:0b799af9d58e | 357 | } |
| rgrover1 | 0:0b799af9d58e | 358 | |
| rgrover1 | 0:0b799af9d58e | 359 | void UtestShell::assertCstrNoCaseEqual(const char* expected, const char* actual, const char* fileName, int lineNumber) |
| rgrover1 | 0:0b799af9d58e | 360 | { |
| rgrover1 | 0:0b799af9d58e | 361 | getTestResult()->countCheck(); |
| rgrover1 | 0:0b799af9d58e | 362 | if (actual == 0 && expected == 0) return; |
| rgrover1 | 0:0b799af9d58e | 363 | if (actual == 0 || expected == 0) |
| rgrover1 | 0:0b799af9d58e | 364 | failWith(StringEqualNoCaseFailure(this, fileName, lineNumber, expected, actual)); |
| rgrover1 | 0:0b799af9d58e | 365 | if (!SimpleString(expected).equalsNoCase(actual)) |
| rgrover1 | 0:0b799af9d58e | 366 | failWith(StringEqualNoCaseFailure(this, fileName, lineNumber, expected, actual)); |
| rgrover1 | 0:0b799af9d58e | 367 | } |
| rgrover1 | 0:0b799af9d58e | 368 | |
| rgrover1 | 0:0b799af9d58e | 369 | void UtestShell::assertCstrContains(const char* expected, const char* actual, const char* fileName, int lineNumber) |
| rgrover1 | 0:0b799af9d58e | 370 | { |
| rgrover1 | 0:0b799af9d58e | 371 | getTestResult()->countCheck(); |
| rgrover1 | 0:0b799af9d58e | 372 | if (actual == 0 && expected == 0) return; |
| rgrover1 | 0:0b799af9d58e | 373 | if(actual == 0 || expected == 0) |
| rgrover1 | 0:0b799af9d58e | 374 | failWith(ContainsFailure(this, fileName, lineNumber, expected, actual)); |
| rgrover1 | 0:0b799af9d58e | 375 | if (!SimpleString(actual).contains(expected)) |
| rgrover1 | 0:0b799af9d58e | 376 | failWith(ContainsFailure(this, fileName, lineNumber, expected, actual)); |
| rgrover1 | 0:0b799af9d58e | 377 | } |
| rgrover1 | 0:0b799af9d58e | 378 | |
| rgrover1 | 0:0b799af9d58e | 379 | void UtestShell::assertCstrNoCaseContains(const char* expected, const char* actual, const char* fileName, int lineNumber) |
| rgrover1 | 0:0b799af9d58e | 380 | { |
| rgrover1 | 0:0b799af9d58e | 381 | getTestResult()->countCheck(); |
| rgrover1 | 0:0b799af9d58e | 382 | if (actual == 0 && expected == 0) return; |
| rgrover1 | 0:0b799af9d58e | 383 | if(actual == 0 || expected == 0) |
| rgrover1 | 0:0b799af9d58e | 384 | failWith(ContainsFailure(this, fileName, lineNumber, expected, actual)); |
| rgrover1 | 0:0b799af9d58e | 385 | if (!SimpleString(actual).containsNoCase(expected)) |
| rgrover1 | 0:0b799af9d58e | 386 | failWith(ContainsFailure(this, fileName, lineNumber, expected, actual)); |
| rgrover1 | 0:0b799af9d58e | 387 | } |
| rgrover1 | 0:0b799af9d58e | 388 | |
| rgrover1 | 0:0b799af9d58e | 389 | void UtestShell::assertLongsEqual(long expected, long actual, const char* fileName, int lineNumber, const TestTerminator& testTerminator) |
| rgrover1 | 0:0b799af9d58e | 390 | { |
| rgrover1 | 0:0b799af9d58e | 391 | getTestResult()->countCheck(); |
| rgrover1 | 0:0b799af9d58e | 392 | if (expected != actual) |
| rgrover1 | 0:0b799af9d58e | 393 | failWith(LongsEqualFailure (this, fileName, lineNumber, expected, actual), testTerminator); |
| rgrover1 | 0:0b799af9d58e | 394 | } |
| rgrover1 | 0:0b799af9d58e | 395 | |
| Rohit Grover |
1:4769360130ed | 396 | void UtestShell::assertUnsignedLongsEqual(unsigned long expected, unsigned long actual, const char* fileName, int lineNumber, const TestTerminator& testTerminator) |
| Rohit Grover |
1:4769360130ed | 397 | { |
| Rohit Grover |
1:4769360130ed | 398 | getTestResult()->countCheck(); |
| Rohit Grover |
1:4769360130ed | 399 | if (expected != actual) |
| Rohit Grover |
1:4769360130ed | 400 | failWith(UnsignedLongsEqualFailure (this, fileName, lineNumber, expected, actual), testTerminator); |
| Rohit Grover |
1:4769360130ed | 401 | } |
| Rohit Grover |
1:4769360130ed | 402 | |
| rgrover1 | 0:0b799af9d58e | 403 | void UtestShell::assertPointersEqual(const void* expected, const void* actual, const char* fileName, int lineNumber) |
| rgrover1 | 0:0b799af9d58e | 404 | { |
| rgrover1 | 0:0b799af9d58e | 405 | getTestResult()->countCheck(); |
| rgrover1 | 0:0b799af9d58e | 406 | if (expected != actual) |
| rgrover1 | 0:0b799af9d58e | 407 | failWith(EqualsFailure(this, fileName, lineNumber, StringFrom(expected), StringFrom(actual))); |
| rgrover1 | 0:0b799af9d58e | 408 | } |
| rgrover1 | 0:0b799af9d58e | 409 | |
| rgrover1 | 0:0b799af9d58e | 410 | void UtestShell::assertDoublesEqual(double expected, double actual, double threshold, const char* fileName, int lineNumber, const TestTerminator& testTerminator) |
| rgrover1 | 0:0b799af9d58e | 411 | { |
| rgrover1 | 0:0b799af9d58e | 412 | getTestResult()->countCheck(); |
| rgrover1 | 0:0b799af9d58e | 413 | if (!doubles_equal(expected, actual, threshold)) |
| rgrover1 | 0:0b799af9d58e | 414 | failWith(DoublesEqualFailure(this, fileName, lineNumber, expected, actual, threshold), testTerminator); |
| rgrover1 | 0:0b799af9d58e | 415 | } |
| rgrover1 | 0:0b799af9d58e | 416 | |
| rgrover1 | 0:0b799af9d58e | 417 | void UtestShell::assertEquals(bool failed, const char* expected, const char* actual, const char* file, int line, const TestTerminator& testTerminator) |
| rgrover1 | 0:0b799af9d58e | 418 | { |
| rgrover1 | 0:0b799af9d58e | 419 | getTestResult()->countCheck(); |
| rgrover1 | 0:0b799af9d58e | 420 | if (failed) |
| rgrover1 | 0:0b799af9d58e | 421 | failWith(CheckEqualFailure(this, file, line, expected, actual), testTerminator); |
| rgrover1 | 0:0b799af9d58e | 422 | } |
| rgrover1 | 0:0b799af9d58e | 423 | |
| rgrover1 | 0:0b799af9d58e | 424 | |
| rgrover1 | 0:0b799af9d58e | 425 | void UtestShell::print(const char *text, const char* fileName, int lineNumber) |
| rgrover1 | 0:0b799af9d58e | 426 | { |
| rgrover1 | 0:0b799af9d58e | 427 | SimpleString stringToPrint = "\n"; |
| rgrover1 | 0:0b799af9d58e | 428 | stringToPrint += fileName; |
| rgrover1 | 0:0b799af9d58e | 429 | stringToPrint += ":"; |
| rgrover1 | 0:0b799af9d58e | 430 | stringToPrint += StringFrom(lineNumber); |
| rgrover1 | 0:0b799af9d58e | 431 | stringToPrint += " "; |
| rgrover1 | 0:0b799af9d58e | 432 | stringToPrint += text; |
| rgrover1 | 0:0b799af9d58e | 433 | getTestResult()->print(stringToPrint.asCharString()); |
| rgrover1 | 0:0b799af9d58e | 434 | } |
| rgrover1 | 0:0b799af9d58e | 435 | |
| rgrover1 | 0:0b799af9d58e | 436 | void UtestShell::print(const SimpleString& text, const char* fileName, int lineNumber) |
| rgrover1 | 0:0b799af9d58e | 437 | { |
| rgrover1 | 0:0b799af9d58e | 438 | print(text.asCharString(), fileName, lineNumber); |
| rgrover1 | 0:0b799af9d58e | 439 | } |
| rgrover1 | 0:0b799af9d58e | 440 | |
| rgrover1 | 0:0b799af9d58e | 441 | TestResult* UtestShell::testResult_ = NULL; |
| rgrover1 | 0:0b799af9d58e | 442 | UtestShell* UtestShell::currentTest_ = NULL; |
| rgrover1 | 0:0b799af9d58e | 443 | |
| rgrover1 | 0:0b799af9d58e | 444 | void UtestShell::setTestResult(TestResult* result) |
| rgrover1 | 0:0b799af9d58e | 445 | { |
| rgrover1 | 0:0b799af9d58e | 446 | testResult_ = result; |
| rgrover1 | 0:0b799af9d58e | 447 | } |
| rgrover1 | 0:0b799af9d58e | 448 | |
| rgrover1 | 0:0b799af9d58e | 449 | void UtestShell::setCurrentTest(UtestShell* test) |
| rgrover1 | 0:0b799af9d58e | 450 | { |
| rgrover1 | 0:0b799af9d58e | 451 | currentTest_ = test; |
| rgrover1 | 0:0b799af9d58e | 452 | } |
| rgrover1 | 0:0b799af9d58e | 453 | |
| rgrover1 | 0:0b799af9d58e | 454 | TestResult* UtestShell::getTestResult() |
| rgrover1 | 0:0b799af9d58e | 455 | { |
| rgrover1 | 0:0b799af9d58e | 456 | if (testResult_ == NULL) |
| rgrover1 | 0:0b799af9d58e | 457 | return &OutsideTestRunnerUTest::instance().getTestResult(); |
| rgrover1 | 0:0b799af9d58e | 458 | return testResult_; |
| rgrover1 | 0:0b799af9d58e | 459 | } |
| rgrover1 | 0:0b799af9d58e | 460 | |
| rgrover1 | 0:0b799af9d58e | 461 | UtestShell* UtestShell::getCurrent() |
| rgrover1 | 0:0b799af9d58e | 462 | { |
| rgrover1 | 0:0b799af9d58e | 463 | if (currentTest_ == NULL) |
| rgrover1 | 0:0b799af9d58e | 464 | return &OutsideTestRunnerUTest::instance(); |
| rgrover1 | 0:0b799af9d58e | 465 | return currentTest_; |
| rgrover1 | 0:0b799af9d58e | 466 | } |
| rgrover1 | 0:0b799af9d58e | 467 | |
| rgrover1 | 0:0b799af9d58e | 468 | |
| rgrover1 | 0:0b799af9d58e | 469 | ExecFunctionTestShell::~ExecFunctionTestShell() |
| rgrover1 | 0:0b799af9d58e | 470 | { |
| rgrover1 | 0:0b799af9d58e | 471 | } |
| rgrover1 | 0:0b799af9d58e | 472 | |
| rgrover1 | 0:0b799af9d58e | 473 | ////////////// Utest //////////// |
| rgrover1 | 0:0b799af9d58e | 474 | |
| rgrover1 | 0:0b799af9d58e | 475 | Utest::Utest() |
| rgrover1 | 0:0b799af9d58e | 476 | { |
| rgrover1 | 0:0b799af9d58e | 477 | } |
| rgrover1 | 0:0b799af9d58e | 478 | |
| rgrover1 | 0:0b799af9d58e | 479 | Utest::~Utest() |
| rgrover1 | 0:0b799af9d58e | 480 | { |
| rgrover1 | 0:0b799af9d58e | 481 | } |
| rgrover1 | 0:0b799af9d58e | 482 | |
| rgrover1 | 0:0b799af9d58e | 483 | #if CPPUTEST_USE_STD_CPP_LIB |
| rgrover1 | 0:0b799af9d58e | 484 | |
| rgrover1 | 0:0b799af9d58e | 485 | void Utest::run() |
| rgrover1 | 0:0b799af9d58e | 486 | { |
| rgrover1 | 0:0b799af9d58e | 487 | try { |
| rgrover1 | 0:0b799af9d58e | 488 | if (PlatformSpecificSetJmp(helperDoTestSetup, this)) { |
| rgrover1 | 0:0b799af9d58e | 489 | PlatformSpecificSetJmp(helperDoTestBody, this); |
| rgrover1 | 0:0b799af9d58e | 490 | } |
| rgrover1 | 0:0b799af9d58e | 491 | } |
| rgrover1 | 0:0b799af9d58e | 492 | catch (CppUTestFailedException&) |
| rgrover1 | 0:0b799af9d58e | 493 | { |
| rgrover1 | 0:0b799af9d58e | 494 | PlatformSpecificRestoreJumpBuffer(); |
| rgrover1 | 0:0b799af9d58e | 495 | } |
| rgrover1 | 0:0b799af9d58e | 496 | |
| rgrover1 | 0:0b799af9d58e | 497 | try { |
| rgrover1 | 0:0b799af9d58e | 498 | PlatformSpecificSetJmp(helperDoTestTeardown, this); |
| rgrover1 | 0:0b799af9d58e | 499 | } |
| rgrover1 | 0:0b799af9d58e | 500 | catch (CppUTestFailedException&) |
| rgrover1 | 0:0b799af9d58e | 501 | { |
| rgrover1 | 0:0b799af9d58e | 502 | PlatformSpecificRestoreJumpBuffer(); |
| rgrover1 | 0:0b799af9d58e | 503 | } |
| rgrover1 | 0:0b799af9d58e | 504 | |
| rgrover1 | 0:0b799af9d58e | 505 | } |
| rgrover1 | 0:0b799af9d58e | 506 | #else |
| rgrover1 | 0:0b799af9d58e | 507 | |
| rgrover1 | 0:0b799af9d58e | 508 | void Utest::run() |
| rgrover1 | 0:0b799af9d58e | 509 | { |
| rgrover1 | 0:0b799af9d58e | 510 | if (PlatformSpecificSetJmp(helperDoTestSetup, this)) { |
| rgrover1 | 0:0b799af9d58e | 511 | PlatformSpecificSetJmp(helperDoTestBody, this); |
| rgrover1 | 0:0b799af9d58e | 512 | } |
| rgrover1 | 0:0b799af9d58e | 513 | PlatformSpecificSetJmp(helperDoTestTeardown, this); |
| rgrover1 | 0:0b799af9d58e | 514 | } |
| rgrover1 | 0:0b799af9d58e | 515 | |
| rgrover1 | 0:0b799af9d58e | 516 | #endif |
| rgrover1 | 0:0b799af9d58e | 517 | |
| rgrover1 | 0:0b799af9d58e | 518 | void Utest::setup() |
| rgrover1 | 0:0b799af9d58e | 519 | { |
| rgrover1 | 0:0b799af9d58e | 520 | } |
| rgrover1 | 0:0b799af9d58e | 521 | |
| rgrover1 | 0:0b799af9d58e | 522 | void Utest::testBody() |
| rgrover1 | 0:0b799af9d58e | 523 | { |
| rgrover1 | 0:0b799af9d58e | 524 | } |
| rgrover1 | 0:0b799af9d58e | 525 | |
| rgrover1 | 0:0b799af9d58e | 526 | void Utest::teardown() |
| rgrover1 | 0:0b799af9d58e | 527 | { |
| rgrover1 | 0:0b799af9d58e | 528 | } |
| rgrover1 | 0:0b799af9d58e | 529 | |
| rgrover1 | 0:0b799af9d58e | 530 | |
| rgrover1 | 0:0b799af9d58e | 531 | ////////////// NullTestShell //////////// |
| rgrover1 | 0:0b799af9d58e | 532 | |
| rgrover1 | 0:0b799af9d58e | 533 | |
| rgrover1 | 0:0b799af9d58e | 534 | NullTestShell::NullTestShell() : |
| rgrover1 | 0:0b799af9d58e | 535 | UtestShell("NullGroup", "NullName", "NullFile", -1, 0) |
| rgrover1 | 0:0b799af9d58e | 536 | { |
| rgrover1 | 0:0b799af9d58e | 537 | } |
| rgrover1 | 0:0b799af9d58e | 538 | |
| rgrover1 | 0:0b799af9d58e | 539 | NullTestShell::NullTestShell(const char* fileName, int lineNumber) : |
| rgrover1 | 0:0b799af9d58e | 540 | UtestShell("NullGroup", "NullName", fileName, lineNumber, 0) |
| rgrover1 | 0:0b799af9d58e | 541 | { |
| rgrover1 | 0:0b799af9d58e | 542 | } |
| rgrover1 | 0:0b799af9d58e | 543 | |
| rgrover1 | 0:0b799af9d58e | 544 | NullTestShell::~NullTestShell() |
| rgrover1 | 0:0b799af9d58e | 545 | { |
| rgrover1 | 0:0b799af9d58e | 546 | } |
| rgrover1 | 0:0b799af9d58e | 547 | |
| rgrover1 | 0:0b799af9d58e | 548 | NullTestShell& NullTestShell::instance() |
| rgrover1 | 0:0b799af9d58e | 549 | { |
| rgrover1 | 0:0b799af9d58e | 550 | static NullTestShell _instance; |
| rgrover1 | 0:0b799af9d58e | 551 | return _instance; |
| rgrover1 | 0:0b799af9d58e | 552 | } |
| rgrover1 | 0:0b799af9d58e | 553 | |
| rgrover1 | 0:0b799af9d58e | 554 | int NullTestShell::countTests() |
| rgrover1 | 0:0b799af9d58e | 555 | { |
| rgrover1 | 0:0b799af9d58e | 556 | return 0; |
| rgrover1 | 0:0b799af9d58e | 557 | } |
| rgrover1 | 0:0b799af9d58e | 558 | |
| rgrover1 | 0:0b799af9d58e | 559 | UtestShell* NullTestShell::getNext() const |
| rgrover1 | 0:0b799af9d58e | 560 | { |
| rgrover1 | 0:0b799af9d58e | 561 | return &instance(); |
| rgrover1 | 0:0b799af9d58e | 562 | } |
| rgrover1 | 0:0b799af9d58e | 563 | |
| rgrover1 | 0:0b799af9d58e | 564 | bool NullTestShell::isNull() const |
| rgrover1 | 0:0b799af9d58e | 565 | { |
| rgrover1 | 0:0b799af9d58e | 566 | return true; |
| rgrover1 | 0:0b799af9d58e | 567 | } |
| rgrover1 | 0:0b799af9d58e | 568 | |
| rgrover1 | 0:0b799af9d58e | 569 | void NullTestShell::testBody() |
| rgrover1 | 0:0b799af9d58e | 570 | { |
| rgrover1 | 0:0b799af9d58e | 571 | } |
| rgrover1 | 0:0b799af9d58e | 572 | |
| rgrover1 | 0:0b799af9d58e | 573 | |
| rgrover1 | 0:0b799af9d58e | 574 | /////////////////// Terminators |
| rgrover1 | 0:0b799af9d58e | 575 | |
| rgrover1 | 0:0b799af9d58e | 576 | TestTerminator::~TestTerminator() |
| rgrover1 | 0:0b799af9d58e | 577 | { |
| rgrover1 | 0:0b799af9d58e | 578 | } |
| rgrover1 | 0:0b799af9d58e | 579 | |
| rgrover1 | 0:0b799af9d58e | 580 | void NormalTestTerminator::exitCurrentTest() const |
| rgrover1 | 0:0b799af9d58e | 581 | { |
| rgrover1 | 0:0b799af9d58e | 582 | #if CPPUTEST_USE_STD_CPP_LIB |
| rgrover1 | 0:0b799af9d58e | 583 | throw CppUTestFailedException(); |
| rgrover1 | 0:0b799af9d58e | 584 | #else |
| rgrover1 | 0:0b799af9d58e | 585 | TestTerminatorWithoutExceptions().exitCurrentTest(); |
| rgrover1 | 0:0b799af9d58e | 586 | #endif |
| rgrover1 | 0:0b799af9d58e | 587 | } |
| rgrover1 | 0:0b799af9d58e | 588 | |
| rgrover1 | 0:0b799af9d58e | 589 | NormalTestTerminator::~NormalTestTerminator() |
| rgrover1 | 0:0b799af9d58e | 590 | { |
| rgrover1 | 0:0b799af9d58e | 591 | } |
| rgrover1 | 0:0b799af9d58e | 592 | |
| rgrover1 | 0:0b799af9d58e | 593 | void TestTerminatorWithoutExceptions::exitCurrentTest() const |
| rgrover1 | 0:0b799af9d58e | 594 | { |
| rgrover1 | 0:0b799af9d58e | 595 | PlatformSpecificLongJmp(); |
| rgrover1 | 0:0b799af9d58e | 596 | } |
| rgrover1 | 0:0b799af9d58e | 597 | |
| rgrover1 | 0:0b799af9d58e | 598 | TestTerminatorWithoutExceptions::~TestTerminatorWithoutExceptions() |
| rgrover1 | 0:0b799af9d58e | 599 | { |
| rgrover1 | 0:0b799af9d58e | 600 | } |
| rgrover1 | 0:0b799af9d58e | 601 | |
| rgrover1 | 0:0b799af9d58e | 602 | //////////////////// ExecFunctionTest |
| rgrover1 | 0:0b799af9d58e | 603 | |
| rgrover1 | 0:0b799af9d58e | 604 | ExecFunctionTest::ExecFunctionTest(ExecFunctionTestShell* shell) |
| rgrover1 | 0:0b799af9d58e | 605 | : shell_(shell) |
| rgrover1 | 0:0b799af9d58e | 606 | { |
| rgrover1 | 0:0b799af9d58e | 607 | } |
| rgrover1 | 0:0b799af9d58e | 608 | |
| rgrover1 | 0:0b799af9d58e | 609 | void ExecFunctionTest::testBody() |
| rgrover1 | 0:0b799af9d58e | 610 | { |
| rgrover1 | 0:0b799af9d58e | 611 | if (shell_->testFunction_) shell_->testFunction_(); |
| rgrover1 | 0:0b799af9d58e | 612 | } |
| rgrover1 | 0:0b799af9d58e | 613 | |
| rgrover1 | 0:0b799af9d58e | 614 | void ExecFunctionTest::setup() |
| rgrover1 | 0:0b799af9d58e | 615 | { |
| rgrover1 | 0:0b799af9d58e | 616 | if (shell_->setup_) shell_->setup_(); |
| rgrover1 | 0:0b799af9d58e | 617 | } |
| rgrover1 | 0:0b799af9d58e | 618 | |
| rgrover1 | 0:0b799af9d58e | 619 | void ExecFunctionTest::teardown() |
| rgrover1 | 0:0b799af9d58e | 620 | { |
| rgrover1 | 0:0b799af9d58e | 621 | if (shell_->teardown_) shell_->teardown_(); |
| rgrover1 | 0:0b799af9d58e | 622 | } |
| rgrover1 | 0:0b799af9d58e | 623 | |
| rgrover1 | 0:0b799af9d58e | 624 | /////////////// IgnoredUtestShell ///////////// |
| rgrover1 | 0:0b799af9d58e | 625 | IgnoredUtestShell::IgnoredUtestShell() |
| rgrover1 | 0:0b799af9d58e | 626 | { |
| rgrover1 | 0:0b799af9d58e | 627 | } |
| rgrover1 | 0:0b799af9d58e | 628 | |
| rgrover1 | 0:0b799af9d58e | 629 | IgnoredUtestShell::~IgnoredUtestShell() |
| rgrover1 | 0:0b799af9d58e | 630 | { |
| rgrover1 | 0:0b799af9d58e | 631 | } |
| rgrover1 | 0:0b799af9d58e | 632 | |
| rgrover1 | 0:0b799af9d58e | 633 | const char* IgnoredUtestShell::getProgressIndicator() const |
| rgrover1 | 0:0b799af9d58e | 634 | { |
| rgrover1 | 0:0b799af9d58e | 635 | return "!"; |
| rgrover1 | 0:0b799af9d58e | 636 | } |
| rgrover1 | 0:0b799af9d58e | 637 | |
| rgrover1 | 0:0b799af9d58e | 638 | SimpleString IgnoredUtestShell::getMacroName() const |
| rgrover1 | 0:0b799af9d58e | 639 | { |
| rgrover1 | 0:0b799af9d58e | 640 | return "IGNORE_TEST"; |
| rgrover1 | 0:0b799af9d58e | 641 | } |
| rgrover1 | 0:0b799af9d58e | 642 | |
| rgrover1 | 0:0b799af9d58e | 643 | void IgnoredUtestShell::runOneTest(TestPlugin* /* plugin */, TestResult& result) |
| rgrover1 | 0:0b799af9d58e | 644 | { |
| rgrover1 | 0:0b799af9d58e | 645 | result.countIgnored(); |
| rgrover1 | 0:0b799af9d58e | 646 | } |
| rgrover1 | 0:0b799af9d58e | 647 | |
| rgrover1 | 0:0b799af9d58e | 648 | |
| rgrover1 | 0:0b799af9d58e | 649 | ////////////// TestInstaller //////////// |
| rgrover1 | 0:0b799af9d58e | 650 | |
| rgrover1 | 0:0b799af9d58e | 651 | TestInstaller::TestInstaller(UtestShell& shell, const char* groupName, const char* testName, const char* fileName, int lineNumber) |
| rgrover1 | 0:0b799af9d58e | 652 | { |
| rgrover1 | 0:0b799af9d58e | 653 | shell.setGroupName(groupName); |
| rgrover1 | 0:0b799af9d58e | 654 | shell.setTestName(testName); |
| rgrover1 | 0:0b799af9d58e | 655 | shell.setFileName(fileName); |
| rgrover1 | 0:0b799af9d58e | 656 | shell.setLineNumber(lineNumber); |
| rgrover1 | 0:0b799af9d58e | 657 | TestRegistry::getCurrentRegistry()->addTest(&shell); |
| rgrover1 | 0:0b799af9d58e | 658 | } |
| rgrover1 | 0:0b799af9d58e | 659 | |
| rgrover1 | 0:0b799af9d58e | 660 | TestInstaller::~TestInstaller() |
| rgrover1 | 0:0b799af9d58e | 661 | { |
| rgrover1 | 0:0b799af9d58e | 662 | } |
| rgrover1 | 0:0b799af9d58e | 663 | |
| rgrover1 | 0:0b799af9d58e | 664 | void TestInstaller::unDo() |
| rgrover1 | 0:0b799af9d58e | 665 | { |
| rgrover1 | 0:0b799af9d58e | 666 | TestRegistry::getCurrentRegistry()->unDoLastAddTest(); |
| rgrover1 | 0:0b799af9d58e | 667 | } |