fork

Fork of cpputest by Rohit Grover

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?

UserRevisionLine numberNew 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 }