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.
CommandLineTestRunner.cpp
00001 /* 00002 * Copyright (c) 2007, Michael Feathers, James Grenning and Bas Vodde 00003 * All rights reserved. 00004 * 00005 * Redistribution and use in source and binary forms, with or without 00006 * modification, are permitted provided that the following conditions are met: 00007 * * Redistributions of source code must retain the above copyright 00008 * notice, this list of conditions and the following disclaimer. 00009 * * Redistributions in binary form must reproduce the above copyright 00010 * notice, this list of conditions and the following disclaimer in the 00011 * documentation and/or other materials provided with the distribution. 00012 * * Neither the name of the <organization> nor the 00013 * names of its contributors may be used to endorse or promote products 00014 * derived from this software without specific prior written permission. 00015 * 00016 * THIS SOFTWARE IS PROVIDED BY THE EARLIER MENTIONED AUTHORS ``AS IS'' AND ANY 00017 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 00018 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 00019 * DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY 00020 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 00021 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 00022 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 00023 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 00024 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 00025 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00026 */ 00027 00028 #include "CppUTest/TestHarness.h" 00029 #include "CppUTest/CommandLineTestRunner.h" 00030 #include "CppUTest/TestOutput.h" 00031 #include "CppUTest/JUnitTestOutput.h" 00032 #include "CppUTest/TestRegistry.h" 00033 00034 CommandLineTestRunner::CommandLineTestRunner(int ac, const char** av, TestOutput* output, TestRegistry* registry) : 00035 output_(output), jUnitOutput_(NULL), arguments_(NULL), registry_(registry) 00036 { 00037 arguments_ = new CommandLineArguments(ac, av); 00038 } 00039 00040 CommandLineTestRunner::~CommandLineTestRunner() 00041 { 00042 delete arguments_; 00043 delete jUnitOutput_; 00044 } 00045 00046 int CommandLineTestRunner::RunAllTests(int ac, char** av) 00047 { 00048 return RunAllTests(ac, const_cast<const char**> (av)); 00049 } 00050 00051 int CommandLineTestRunner::RunAllTests(int ac, const char** av) 00052 { 00053 int result = 0; 00054 ConsoleTestOutput output; 00055 00056 MemoryLeakWarningPlugin memLeakWarn(DEF_PLUGIN_MEM_LEAK); 00057 memLeakWarn.destroyGlobalDetectorAndTurnOffMemoryLeakDetectionInDestructor(true); 00058 TestRegistry::getCurrentRegistry()->installPlugin(&memLeakWarn); 00059 00060 { 00061 CommandLineTestRunner runner(ac, av, &output, TestRegistry::getCurrentRegistry()); 00062 result = runner.runAllTestsMain(); 00063 } 00064 00065 if (result == 0) { 00066 output << memLeakWarn.FinalReport(0); 00067 } 00068 TestRegistry::getCurrentRegistry()->removePluginByName(DEF_PLUGIN_MEM_LEAK); 00069 return result; 00070 } 00071 00072 int CommandLineTestRunner::runAllTestsMain() 00073 { 00074 int testResult = 0; 00075 00076 SetPointerPlugin pPlugin(DEF_PLUGIN_SET_POINTER); 00077 registry_->installPlugin(&pPlugin); 00078 00079 if (parseArguments(registry_->getFirstPlugin())) 00080 testResult = runAllTests(); 00081 00082 registry_->removePluginByName(DEF_PLUGIN_SET_POINTER); 00083 return testResult; 00084 } 00085 00086 void CommandLineTestRunner::initializeTestRun() 00087 { 00088 registry_->groupFilter(arguments_->getGroupFilter()); 00089 registry_->nameFilter(arguments_->getNameFilter()); 00090 if (arguments_->isVerbose()) output_->verbose(); 00091 if (arguments_->runTestsInSeperateProcess()) registry_->setRunTestsInSeperateProcess(); 00092 } 00093 00094 int CommandLineTestRunner::runAllTests() 00095 { 00096 initializeTestRun(); 00097 int loopCount = 0; 00098 int failureCount = 0; 00099 int repeat_ = arguments_->getRepeatCount(); 00100 00101 while (loopCount++ < repeat_) { 00102 output_->printTestRun(loopCount, repeat_); 00103 TestResult tr(*output_); 00104 registry_->runAllTests(tr); 00105 failureCount += tr.getFailureCount(); 00106 } 00107 00108 return failureCount; 00109 } 00110 00111 bool CommandLineTestRunner::parseArguments(TestPlugin* plugin) 00112 { 00113 if (arguments_->parse(plugin)) { 00114 if (arguments_->isJUnitOutput()) { 00115 output_ = jUnitOutput_ = new JUnitTestOutput; 00116 if (jUnitOutput_ != NULL) { 00117 jUnitOutput_->setPackageName(arguments_->getPackageName()); 00118 } 00119 } 00120 return true; 00121 } 00122 else { 00123 output_->print(arguments_->usage()); 00124 return false; 00125 } 00126 } 00127 00128 bool CommandLineTestRunner::isVerbose() 00129 { 00130 return arguments_->isVerbose(); 00131 } 00132 00133 int CommandLineTestRunner::getRepeatCount() 00134 { 00135 return arguments_->getRepeatCount(); 00136 } 00137 00138 TestFilter CommandLineTestRunner::getGroupFilter() 00139 { 00140 return arguments_->getGroupFilter(); 00141 } 00142 00143 TestFilter CommandLineTestRunner::getNameFilter() 00144 { 00145 return arguments_->getNameFilter(); 00146 }
Generated on Fri Jul 15 2022 01:46:32 by
1.7.2