cpputest for mbed-6

Committer:
rgrover1
Date:
Tue Jan 28 09:27:41 2014 +0000
Revision:
0:0b799af9d58e
Child:
1:4769360130ed
CppUTest unit test framework.

Who changed what in which revision?

UserRevisionLine numberNew 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/CommandLineTestRunner.h"
rgrover1 0:0b799af9d58e 30 #include "CppUTest/TestOutput.h"
rgrover1 0:0b799af9d58e 31 #include "CppUTest/JUnitTestOutput.h"
rgrover1 0:0b799af9d58e 32 #include "CppUTest/TestRegistry.h"
rgrover1 0:0b799af9d58e 33
rgrover1 0:0b799af9d58e 34 CommandLineTestRunner::CommandLineTestRunner(int ac, const char** av, TestOutput* output, TestRegistry* registry) :
rgrover1 0:0b799af9d58e 35 output_(output), jUnitOutput_(NULL), arguments_(NULL), registry_(registry)
rgrover1 0:0b799af9d58e 36 {
rgrover1 0:0b799af9d58e 37 arguments_ = new CommandLineArguments(ac, av);
rgrover1 0:0b799af9d58e 38 }
rgrover1 0:0b799af9d58e 39
rgrover1 0:0b799af9d58e 40 CommandLineTestRunner::~CommandLineTestRunner()
rgrover1 0:0b799af9d58e 41 {
rgrover1 0:0b799af9d58e 42 delete arguments_;
rgrover1 0:0b799af9d58e 43 delete jUnitOutput_;
rgrover1 0:0b799af9d58e 44 }
rgrover1 0:0b799af9d58e 45
rgrover1 0:0b799af9d58e 46 int CommandLineTestRunner::RunAllTests(int ac, char** av)
rgrover1 0:0b799af9d58e 47 {
rgrover1 0:0b799af9d58e 48 return RunAllTests(ac, const_cast<const char**> (av));
rgrover1 0:0b799af9d58e 49 }
rgrover1 0:0b799af9d58e 50
rgrover1 0:0b799af9d58e 51 int CommandLineTestRunner::RunAllTests(int ac, const char** av)
rgrover1 0:0b799af9d58e 52 {
rgrover1 0:0b799af9d58e 53 int result = 0;
rgrover1 0:0b799af9d58e 54 ConsoleTestOutput output;
rgrover1 0:0b799af9d58e 55
rgrover1 0:0b799af9d58e 56 MemoryLeakWarningPlugin memLeakWarn(DEF_PLUGIN_MEM_LEAK);
rgrover1 0:0b799af9d58e 57 memLeakWarn.destroyGlobalDetectorAndTurnOffMemoryLeakDetectionInDestructor(true);
rgrover1 0:0b799af9d58e 58 TestRegistry::getCurrentRegistry()->installPlugin(&memLeakWarn);
rgrover1 0:0b799af9d58e 59
rgrover1 0:0b799af9d58e 60 {
rgrover1 0:0b799af9d58e 61 CommandLineTestRunner runner(ac, av, &output, TestRegistry::getCurrentRegistry());
rgrover1 0:0b799af9d58e 62 result = runner.runAllTestsMain();
rgrover1 0:0b799af9d58e 63 }
rgrover1 0:0b799af9d58e 64
rgrover1 0:0b799af9d58e 65 if (result == 0) {
rgrover1 0:0b799af9d58e 66 output << memLeakWarn.FinalReport(0);
rgrover1 0:0b799af9d58e 67 }
rgrover1 0:0b799af9d58e 68 TestRegistry::getCurrentRegistry()->removePluginByName(DEF_PLUGIN_MEM_LEAK);
rgrover1 0:0b799af9d58e 69 return result;
rgrover1 0:0b799af9d58e 70 }
rgrover1 0:0b799af9d58e 71
rgrover1 0:0b799af9d58e 72 int CommandLineTestRunner::runAllTestsMain()
rgrover1 0:0b799af9d58e 73 {
rgrover1 0:0b799af9d58e 74 int testResult = 0;
rgrover1 0:0b799af9d58e 75
rgrover1 0:0b799af9d58e 76 SetPointerPlugin pPlugin(DEF_PLUGIN_SET_POINTER);
rgrover1 0:0b799af9d58e 77 registry_->installPlugin(&pPlugin);
rgrover1 0:0b799af9d58e 78
rgrover1 0:0b799af9d58e 79 if (parseArguments(registry_->getFirstPlugin()))
rgrover1 0:0b799af9d58e 80 testResult = runAllTests();
rgrover1 0:0b799af9d58e 81
rgrover1 0:0b799af9d58e 82 registry_->removePluginByName(DEF_PLUGIN_SET_POINTER);
rgrover1 0:0b799af9d58e 83 return testResult;
rgrover1 0:0b799af9d58e 84 }
rgrover1 0:0b799af9d58e 85
rgrover1 0:0b799af9d58e 86 void CommandLineTestRunner::initializeTestRun()
rgrover1 0:0b799af9d58e 87 {
rgrover1 0:0b799af9d58e 88 registry_->groupFilter(arguments_->getGroupFilter());
rgrover1 0:0b799af9d58e 89 registry_->nameFilter(arguments_->getNameFilter());
rgrover1 0:0b799af9d58e 90 if (arguments_->isVerbose()) output_->verbose();
rgrover1 0:0b799af9d58e 91 if (arguments_->runTestsInSeperateProcess()) registry_->setRunTestsInSeperateProcess();
rgrover1 0:0b799af9d58e 92 }
rgrover1 0:0b799af9d58e 93
rgrover1 0:0b799af9d58e 94 int CommandLineTestRunner::runAllTests()
rgrover1 0:0b799af9d58e 95 {
rgrover1 0:0b799af9d58e 96 initializeTestRun();
rgrover1 0:0b799af9d58e 97 int loopCount = 0;
rgrover1 0:0b799af9d58e 98 int failureCount = 0;
rgrover1 0:0b799af9d58e 99 int repeat_ = arguments_->getRepeatCount();
rgrover1 0:0b799af9d58e 100
rgrover1 0:0b799af9d58e 101 while (loopCount++ < repeat_) {
rgrover1 0:0b799af9d58e 102 output_->printTestRun(loopCount, repeat_);
rgrover1 0:0b799af9d58e 103 TestResult tr(*output_);
rgrover1 0:0b799af9d58e 104 registry_->runAllTests(tr);
rgrover1 0:0b799af9d58e 105 failureCount += tr.getFailureCount();
rgrover1 0:0b799af9d58e 106 }
rgrover1 0:0b799af9d58e 107
rgrover1 0:0b799af9d58e 108 return failureCount;
rgrover1 0:0b799af9d58e 109 }
rgrover1 0:0b799af9d58e 110
rgrover1 0:0b799af9d58e 111 bool CommandLineTestRunner::parseArguments(TestPlugin* plugin)
rgrover1 0:0b799af9d58e 112 {
rgrover1 0:0b799af9d58e 113 if (arguments_->parse(plugin)) {
rgrover1 0:0b799af9d58e 114 if (arguments_->isJUnitOutput()) {
rgrover1 0:0b799af9d58e 115 output_ = jUnitOutput_ = new JUnitTestOutput;
rgrover1 0:0b799af9d58e 116 }
rgrover1 0:0b799af9d58e 117 return true;
rgrover1 0:0b799af9d58e 118 }
rgrover1 0:0b799af9d58e 119 else {
rgrover1 0:0b799af9d58e 120 output_->print(arguments_->usage());
rgrover1 0:0b799af9d58e 121 return false;
rgrover1 0:0b799af9d58e 122 }
rgrover1 0:0b799af9d58e 123 }
rgrover1 0:0b799af9d58e 124
rgrover1 0:0b799af9d58e 125 bool CommandLineTestRunner::isVerbose()
rgrover1 0:0b799af9d58e 126 {
rgrover1 0:0b799af9d58e 127 return arguments_->isVerbose();
rgrover1 0:0b799af9d58e 128 }
rgrover1 0:0b799af9d58e 129
rgrover1 0:0b799af9d58e 130 int CommandLineTestRunner::getRepeatCount()
rgrover1 0:0b799af9d58e 131 {
rgrover1 0:0b799af9d58e 132 return arguments_->getRepeatCount();
rgrover1 0:0b799af9d58e 133 }
rgrover1 0:0b799af9d58e 134
rgrover1 0:0b799af9d58e 135 TestFilter CommandLineTestRunner::getGroupFilter()
rgrover1 0:0b799af9d58e 136 {
rgrover1 0:0b799af9d58e 137 return arguments_->getGroupFilter();
rgrover1 0:0b799af9d58e 138 }
rgrover1 0:0b799af9d58e 139
rgrover1 0:0b799af9d58e 140 TestFilter CommandLineTestRunner::getNameFilter()
rgrover1 0:0b799af9d58e 141 {
rgrover1 0:0b799af9d58e 142 return arguments_->getNameFilter();
rgrover1 0:0b799af9d58e 143 }