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