fork
Fork of cpputest by
Diff: src/CppUTest/TestRegistry.cpp
- Revision:
- 0:0b799af9d58e
- Child:
- 1:4769360130ed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/CppUTest/TestRegistry.cpp Tue Jan 28 09:27:41 2014 +0000 @@ -0,0 +1,216 @@ +/* + * Copyright (c) 2007, Michael Feathers, James Grenning and Bas Vodde + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the <organization> nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE EARLIER MENTIONED AUTHORS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "CppUTest/TestHarness.h" +#include "CppUTest/TestRegistry.h" + +TestRegistry::TestRegistry() : + tests_(&NullTestShell::instance()), firstPlugin_(NullTestPlugin::instance()), runInSeperateProcess_(false) +{ +} + +TestRegistry::~TestRegistry() +{ +} + +void TestRegistry::addTest(UtestShell *test) +{ + tests_ = test->addTest(tests_); +} + +void TestRegistry::runAllTests(TestResult& result) +{ + bool groupStart = true; + + result.testsStarted(); + for (UtestShell *test = tests_; !test->isNull(); test = test->getNext()) { + if (runInSeperateProcess_) test->setRunInSeperateProcess(); + + if (groupStart) { + result.currentGroupStarted(test); + groupStart = false; + } + + result.setProgressIndicator(test->getProgressIndicator()); + result.countTest(); + if (testShouldRun(test, result)) { + result.currentTestStarted(test); + test->runOneTest(firstPlugin_, result); + result.currentTestEnded(test); + } + + if (endOfGroup(test)) { + groupStart = true; + result.currentGroupEnded(test); + } + } + result.testsEnded(); +} + +bool TestRegistry::endOfGroup(UtestShell* test) +{ + return (test->isNull() || test->getGroup() != test->getNext()->getGroup()); +} + +int TestRegistry::countTests() +{ + return tests_->countTests(); +} + +TestRegistry* TestRegistry::currentRegistry_ = 0; + +TestRegistry* TestRegistry::getCurrentRegistry() +{ + static TestRegistry registry; + return (currentRegistry_ == 0) ? ®istry : currentRegistry_; +} + +void TestRegistry::setCurrentRegistry(TestRegistry* registry) +{ + currentRegistry_ = registry; +} + +void TestRegistry::unDoLastAddTest() +{ + tests_ = tests_->getNext(); + +} + +void TestRegistry::nameFilter(const TestFilter& f) +{ + nameFilter_ = f; +} + +void TestRegistry::groupFilter(const TestFilter& f) +{ + groupFilter_ = f; +} + +TestFilter TestRegistry::getGroupFilter() +{ + return groupFilter_; +} + +TestFilter TestRegistry::getNameFilter() +{ + return nameFilter_; +} + +void TestRegistry::setRunTestsInSeperateProcess() +{ + runInSeperateProcess_ = true; +} + + +bool TestRegistry::testShouldRun(UtestShell* test, TestResult& result) +{ + if (test->shouldRun(groupFilter_, nameFilter_)) return true; + else { + result.countFilteredOut(); + return false; + } +} + +void TestRegistry::resetPlugins() +{ + firstPlugin_ = NullTestPlugin::instance(); +} + +void TestRegistry::installPlugin(TestPlugin* plugin) +{ + firstPlugin_ = plugin->addPlugin(firstPlugin_); +} + +TestPlugin* TestRegistry::getFirstPlugin() +{ + return firstPlugin_; +} + +TestPlugin* TestRegistry::getPluginByName(const SimpleString& name) +{ + return firstPlugin_->getPluginByName(name); +} + +void TestRegistry::removePluginByName(const SimpleString& name) +{ + if (firstPlugin_->removePluginByName(name) == firstPlugin_) firstPlugin_ = firstPlugin_->getNext(); + if (firstPlugin_->getName() == name) firstPlugin_ = firstPlugin_->getNext(); + firstPlugin_->removePluginByName(name); +} + +int TestRegistry::countPlugins() +{ + int count = 0; + for (TestPlugin* plugin = firstPlugin_; plugin != NullTestPlugin::instance(); plugin = plugin->getNext()) + count++; + return count; +} + + +UtestShell* TestRegistry::getFirstTest() +{ + return tests_; +} + +UtestShell* TestRegistry::getLastTest() +{ + UtestShell* current = tests_; + while (!current->getNext()->isNull()) + current = current->getNext(); + return current; +} + +UtestShell* TestRegistry::getTestWithNext(UtestShell* test) +{ + UtestShell* current = tests_; + while (!current->getNext()->isNull() && current->getNext() != test) + current = current->getNext(); + return current; +} + +UtestShell* TestRegistry::findTestWithName(const SimpleString& name) +{ + UtestShell* current = tests_; + while (!current->isNull()) { + if (current->getName() == name) + return current; + current = current->getNext(); + } + return NULL; +} + +UtestShell* TestRegistry::findTestWithGroup(const SimpleString& group) +{ + UtestShell* current = tests_; + while (!current->isNull()) { + if (current->getGroup() == group) + return current; + current = current->getNext(); + } + return NULL; +} +