fork
Fork of cpputest by
src/CppUTest/TestPlugin.cpp@3:9e8c8907d9ee, 2015-05-13 (annotated)
- Committer:
- Kojto
- Date:
- Wed May 13 13:20:35 2015 +0000
- Revision:
- 3:9e8c8907d9ee
- Parent:
- 1:4769360130ed
Rename console to mbed_cpputest_console (as in mbed testrunner)
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Rohit Grover |
1:4769360130ed | 1 | /* |
Rohit Grover |
1:4769360130ed | 2 | * Copyright (c) 2007, Michael Feathers, James Grenning and Bas Vodde |
Rohit Grover |
1:4769360130ed | 3 | * All rights reserved. |
Rohit Grover |
1:4769360130ed | 4 | * |
Rohit Grover |
1:4769360130ed | 5 | * Redistribution and use in source and binary forms, with or without |
Rohit Grover |
1:4769360130ed | 6 | * modification, are permitted provided that the following conditions are met: |
Rohit Grover |
1:4769360130ed | 7 | * * Redistributions of source code must retain the above copyright |
Rohit Grover |
1:4769360130ed | 8 | * notice, this list of conditions and the following disclaimer. |
Rohit Grover |
1:4769360130ed | 9 | * * Redistributions in binary form must reproduce the above copyright |
Rohit Grover |
1:4769360130ed | 10 | * notice, this list of conditions and the following disclaimer in the |
Rohit Grover |
1:4769360130ed | 11 | * documentation and/or other materials provided with the distribution. |
Rohit Grover |
1:4769360130ed | 12 | * * Neither the name of the <organization> nor the |
Rohit Grover |
1:4769360130ed | 13 | * names of its contributors may be used to endorse or promote products |
Rohit Grover |
1:4769360130ed | 14 | * derived from this software without specific prior written permission. |
Rohit Grover |
1:4769360130ed | 15 | * |
Rohit Grover |
1:4769360130ed | 16 | * THIS SOFTWARE IS PROVIDED BY THE EARLIER MENTIONED AUTHORS ``AS IS'' AND ANY |
Rohit Grover |
1:4769360130ed | 17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
Rohit Grover |
1:4769360130ed | 18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
Rohit Grover |
1:4769360130ed | 19 | * DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY |
Rohit Grover |
1:4769360130ed | 20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
Rohit Grover |
1:4769360130ed | 21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
Rohit Grover |
1:4769360130ed | 22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
Rohit Grover |
1:4769360130ed | 23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
Rohit Grover |
1:4769360130ed | 24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
Rohit Grover |
1:4769360130ed | 25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
Rohit Grover |
1:4769360130ed | 26 | */ |
Rohit Grover |
1:4769360130ed | 27 | |
Rohit Grover |
1:4769360130ed | 28 | #include "CppUTest/TestHarness.h" |
Rohit Grover |
1:4769360130ed | 29 | #include "CppUTest/TestPlugin.h" |
Rohit Grover |
1:4769360130ed | 30 | |
Rohit Grover |
1:4769360130ed | 31 | TestPlugin::TestPlugin(const SimpleString& name) : |
Rohit Grover |
1:4769360130ed | 32 | next_(NullTestPlugin::instance()), name_(name), enabled_(true) |
Rohit Grover |
1:4769360130ed | 33 | { |
Rohit Grover |
1:4769360130ed | 34 | } |
Rohit Grover |
1:4769360130ed | 35 | |
Rohit Grover |
1:4769360130ed | 36 | TestPlugin::TestPlugin(TestPlugin* next) : |
Rohit Grover |
1:4769360130ed | 37 | next_(next), name_("null"), enabled_(true) |
Rohit Grover |
1:4769360130ed | 38 | { |
Rohit Grover |
1:4769360130ed | 39 | } |
Rohit Grover |
1:4769360130ed | 40 | |
Rohit Grover |
1:4769360130ed | 41 | TestPlugin::~TestPlugin() |
Rohit Grover |
1:4769360130ed | 42 | { |
Rohit Grover |
1:4769360130ed | 43 | } |
Rohit Grover |
1:4769360130ed | 44 | |
Rohit Grover |
1:4769360130ed | 45 | TestPlugin* TestPlugin::addPlugin(TestPlugin* plugin) |
Rohit Grover |
1:4769360130ed | 46 | { |
Rohit Grover |
1:4769360130ed | 47 | next_ = plugin; |
Rohit Grover |
1:4769360130ed | 48 | return this; |
Rohit Grover |
1:4769360130ed | 49 | } |
Rohit Grover |
1:4769360130ed | 50 | |
Rohit Grover |
1:4769360130ed | 51 | void TestPlugin::runAllPreTestAction(UtestShell& test, TestResult& result) |
Rohit Grover |
1:4769360130ed | 52 | { |
Rohit Grover |
1:4769360130ed | 53 | if (enabled_) preTestAction(test, result); |
Rohit Grover |
1:4769360130ed | 54 | next_->runAllPreTestAction(test, result); |
Rohit Grover |
1:4769360130ed | 55 | } |
Rohit Grover |
1:4769360130ed | 56 | |
Rohit Grover |
1:4769360130ed | 57 | void TestPlugin::runAllPostTestAction(UtestShell& test, TestResult& result) |
Rohit Grover |
1:4769360130ed | 58 | { |
Rohit Grover |
1:4769360130ed | 59 | next_ ->runAllPostTestAction(test, result); |
Rohit Grover |
1:4769360130ed | 60 | if (enabled_) postTestAction(test, result); |
Rohit Grover |
1:4769360130ed | 61 | } |
Rohit Grover |
1:4769360130ed | 62 | |
Rohit Grover |
1:4769360130ed | 63 | bool TestPlugin::parseAllArguments(int ac, char** av, int index) |
Rohit Grover |
1:4769360130ed | 64 | { |
Rohit Grover |
1:4769360130ed | 65 | return parseAllArguments(ac, const_cast<const char**> (av), index); |
Rohit Grover |
1:4769360130ed | 66 | } |
Rohit Grover |
1:4769360130ed | 67 | |
Rohit Grover |
1:4769360130ed | 68 | bool TestPlugin::parseAllArguments(int ac, const char** av, int index) |
Rohit Grover |
1:4769360130ed | 69 | { |
Rohit Grover |
1:4769360130ed | 70 | if (parseArguments(ac, av, index)) return true; |
Rohit Grover |
1:4769360130ed | 71 | if (next_) return next_->parseAllArguments(ac, av, index); |
Rohit Grover |
1:4769360130ed | 72 | return false; |
Rohit Grover |
1:4769360130ed | 73 | } |
Rohit Grover |
1:4769360130ed | 74 | |
Rohit Grover |
1:4769360130ed | 75 | const SimpleString& TestPlugin::getName() |
Rohit Grover |
1:4769360130ed | 76 | { |
Rohit Grover |
1:4769360130ed | 77 | return name_; |
Rohit Grover |
1:4769360130ed | 78 | } |
Rohit Grover |
1:4769360130ed | 79 | |
Rohit Grover |
1:4769360130ed | 80 | TestPlugin* TestPlugin::getPluginByName(const SimpleString& name) |
Rohit Grover |
1:4769360130ed | 81 | { |
Rohit Grover |
1:4769360130ed | 82 | if (name == name_) return this; |
Rohit Grover |
1:4769360130ed | 83 | if (next_) return next_->getPluginByName(name); |
Rohit Grover |
1:4769360130ed | 84 | return (next_); |
Rohit Grover |
1:4769360130ed | 85 | } |
Rohit Grover |
1:4769360130ed | 86 | |
Rohit Grover |
1:4769360130ed | 87 | TestPlugin* TestPlugin::getNext() |
Rohit Grover |
1:4769360130ed | 88 | { |
Rohit Grover |
1:4769360130ed | 89 | return next_; |
Rohit Grover |
1:4769360130ed | 90 | } |
Rohit Grover |
1:4769360130ed | 91 | TestPlugin* TestPlugin::removePluginByName(const SimpleString& name) |
Rohit Grover |
1:4769360130ed | 92 | { |
Rohit Grover |
1:4769360130ed | 93 | TestPlugin* removed = 0; |
Rohit Grover |
1:4769360130ed | 94 | if (next_ && next_->getName() == name) { |
Rohit Grover |
1:4769360130ed | 95 | removed = next_; |
Rohit Grover |
1:4769360130ed | 96 | next_ = next_->next_; |
Rohit Grover |
1:4769360130ed | 97 | } |
Rohit Grover |
1:4769360130ed | 98 | return removed; |
Rohit Grover |
1:4769360130ed | 99 | } |
Rohit Grover |
1:4769360130ed | 100 | |
Rohit Grover |
1:4769360130ed | 101 | void TestPlugin::disable() |
Rohit Grover |
1:4769360130ed | 102 | { |
Rohit Grover |
1:4769360130ed | 103 | enabled_ = false; |
Rohit Grover |
1:4769360130ed | 104 | } |
Rohit Grover |
1:4769360130ed | 105 | |
Rohit Grover |
1:4769360130ed | 106 | void TestPlugin::enable() |
Rohit Grover |
1:4769360130ed | 107 | { |
Rohit Grover |
1:4769360130ed | 108 | enabled_ = true; |
Rohit Grover |
1:4769360130ed | 109 | } |
Rohit Grover |
1:4769360130ed | 110 | |
Rohit Grover |
1:4769360130ed | 111 | bool TestPlugin::isEnabled() |
Rohit Grover |
1:4769360130ed | 112 | { |
Rohit Grover |
1:4769360130ed | 113 | return enabled_; |
Rohit Grover |
1:4769360130ed | 114 | } |
Rohit Grover |
1:4769360130ed | 115 | |
Rohit Grover |
1:4769360130ed | 116 | struct cpputest_pair |
Rohit Grover |
1:4769360130ed | 117 | { |
Rohit Grover |
1:4769360130ed | 118 | void **orig; |
Rohit Grover |
1:4769360130ed | 119 | void *orig_value; |
Rohit Grover |
1:4769360130ed | 120 | }; |
Rohit Grover |
1:4769360130ed | 121 | |
Rohit Grover |
1:4769360130ed | 122 | //////// SetPlugin |
Rohit Grover |
1:4769360130ed | 123 | |
Rohit Grover |
1:4769360130ed | 124 | static int pointerTableIndex; |
Rohit Grover |
1:4769360130ed | 125 | static cpputest_pair setlist[SetPointerPlugin::MAX_SET]; |
Rohit Grover |
1:4769360130ed | 126 | |
Rohit Grover |
1:4769360130ed | 127 | SetPointerPlugin::SetPointerPlugin(const SimpleString& name) : |
Rohit Grover |
1:4769360130ed | 128 | TestPlugin(name) |
Rohit Grover |
1:4769360130ed | 129 | { |
Rohit Grover |
1:4769360130ed | 130 | pointerTableIndex = 0; |
Rohit Grover |
1:4769360130ed | 131 | } |
Rohit Grover |
1:4769360130ed | 132 | |
Rohit Grover |
1:4769360130ed | 133 | SetPointerPlugin::~SetPointerPlugin() |
Rohit Grover |
1:4769360130ed | 134 | { |
Rohit Grover |
1:4769360130ed | 135 | } |
Rohit Grover |
1:4769360130ed | 136 | |
Rohit Grover |
1:4769360130ed | 137 | void CppUTestStore(void**function) |
Rohit Grover |
1:4769360130ed | 138 | { |
Rohit Grover |
1:4769360130ed | 139 | if (pointerTableIndex >= SetPointerPlugin::MAX_SET) { |
Rohit Grover |
1:4769360130ed | 140 | FAIL("Maximum number of function pointers installed!"); |
Rohit Grover |
1:4769360130ed | 141 | } |
Rohit Grover |
1:4769360130ed | 142 | setlist[pointerTableIndex].orig_value = *function; |
Rohit Grover |
1:4769360130ed | 143 | setlist[pointerTableIndex].orig = function; |
Rohit Grover |
1:4769360130ed | 144 | pointerTableIndex++; |
Rohit Grover |
1:4769360130ed | 145 | } |
Rohit Grover |
1:4769360130ed | 146 | |
Rohit Grover |
1:4769360130ed | 147 | void SetPointerPlugin::postTestAction(UtestShell& /*test*/, TestResult& /*result*/) |
Rohit Grover |
1:4769360130ed | 148 | { |
Rohit Grover |
1:4769360130ed | 149 | for (int i = pointerTableIndex - 1; i >= 0; i--) |
Rohit Grover |
1:4769360130ed | 150 | *((void**) setlist[i].orig) = setlist[i].orig_value; |
Rohit Grover |
1:4769360130ed | 151 | pointerTableIndex = 0; |
Rohit Grover |
1:4769360130ed | 152 | } |
Rohit Grover |
1:4769360130ed | 153 | |
Rohit Grover |
1:4769360130ed | 154 | //////// NullPlugin |
Rohit Grover |
1:4769360130ed | 155 | |
Rohit Grover |
1:4769360130ed | 156 | NullTestPlugin::NullTestPlugin() : |
Rohit Grover |
1:4769360130ed | 157 | TestPlugin(0) |
Rohit Grover |
1:4769360130ed | 158 | { |
Rohit Grover |
1:4769360130ed | 159 | } |
Rohit Grover |
1:4769360130ed | 160 | |
Rohit Grover |
1:4769360130ed | 161 | NullTestPlugin* NullTestPlugin::instance() |
Rohit Grover |
1:4769360130ed | 162 | { |
Rohit Grover |
1:4769360130ed | 163 | static NullTestPlugin _instance; |
Rohit Grover |
1:4769360130ed | 164 | return &_instance; |
Rohit Grover |
1:4769360130ed | 165 | } |
Rohit Grover |
1:4769360130ed | 166 | |
Rohit Grover |
1:4769360130ed | 167 | void NullTestPlugin::runAllPreTestAction(UtestShell&, TestResult&) |
Rohit Grover |
1:4769360130ed | 168 | { |
Rohit Grover |
1:4769360130ed | 169 | } |
Rohit Grover |
1:4769360130ed | 170 | |
Rohit Grover |
1:4769360130ed | 171 | void NullTestPlugin::runAllPostTestAction(UtestShell&, TestResult&) |
Rohit Grover |
1:4769360130ed | 172 | { |
Rohit Grover |
1:4769360130ed | 173 | } |