diff options
Diffstat (limited to 'kunittest/runner.cpp')
-rw-r--r-- | kunittest/runner.cpp | 322 |
1 files changed, 0 insertions, 322 deletions
diff --git a/kunittest/runner.cpp b/kunittest/runner.cpp deleted file mode 100644 index e3a8830bb..000000000 --- a/kunittest/runner.cpp +++ /dev/null @@ -1,322 +0,0 @@ -/* - * - * Copyright (C) 2004 Zack Rusin <zack@kde.org> - * Copyright (C) 2005 Jeroen Wijnhout <Jeroen.Wijnhout@kdemail.net> - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. 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. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 THE AUTHOR 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 <stdio.h> -#include <iostream> -using namespace std; - -#include <tqregexp.h> -#include <tqdir.h> -#include <tqmetaobject.h> - -#include <kdebug.h> -#include <klibloader.h> -#include <kglobal.h> -#include <kstandarddirs.h> - -#include "runner.h" -#include "tester.h" - -namespace KUnitTest -{ - Runner *Runner::s_self = 0L; - bool Runner::s_debugCapturingEnabled = false; - - void Runner::registerTester(const char *name, Tester *test) - { - Runner::self()->m_registry.insert(name, test); - } - - void Runner::loadModules(const TQString &folder, const TQString &query) - { - TQRegExp reQuery(query); - TQDir dir(folder, "kunittest_*.la"); - - // Add the folder to the "module" resource such that the KLibLoader can - // find the modules in this folder. - TDEGlobal::dirs()->addResourceDir("module", folder); - kdDebug() << "Looking in folder: " << dir.absPath() << endl; - - // Get a list of all modules. - TQStringList modules = dir.entryList(); - - for ( uint i = 0; i < modules.count(); ++i ) - { - TQString module = modules[i]; - kdDebug() << "Module: " << dir.absPath() + "/" + module << endl; - - if ( reQuery.search(module) != -1 ) - { - // strip the .la extension - module.truncate(module.length()-3); - KLibFactory *factory = KLibLoader::self()->factory(module.local8Bit()); - if ( factory ) - factory->create(); - else { - kdWarning() << "\tError loading " << module << " : " << KLibLoader::self()->lastErrorMessage() << endl; - ::exit( 1 ); - } - } - else - kdDebug() << "\tModule doesn't match." << endl; - } - } - - void Runner::setDebugCapturingEnabled(bool enabled) - { - s_debugCapturingEnabled = enabled; - } - - RegistryType &Runner::registry() - { - return m_registry; - } - - int Runner::numberOfTestCases() - { - return m_registry.count(); - } - - Runner *Runner::self() - { - if ( s_self == 0L ) s_self = new Runner(); - - return s_self; - } - - Runner::Runner() - { - reset(); - } - - int Runner::numberOfTests() const - { - return globalSteps; - } - - int Runner::numberOfPassedTests() const - { - return globalPasses; - } - - int Runner::numberOfFailedTests() const - { - return globalFails; - } - - int Runner::numberOfExpectedFailures() const - { - return globalXFails; - } - - int Runner::numberOfSkippedTests() const - { - return globalSkipped; - } - - void Runner::reset() - { - globalSteps = 0; - globalPasses = 0; - globalFails = 0; - globalXFails = 0; - globalXPasses = 0; - globalSkipped = 0; - } - - int Runner::runTests() - { - globalSteps = 0; - globalPasses = 0; - globalFails = 0; - globalXFails = 0; - globalXPasses = 0; - globalSkipped = 0; - - cout << "# Running normal tests... #" << endl << endl; - RegistryIteratorType it(m_registry); - - for( ; it.current(); ++it ) - runTest(it.currentKey()); - -#if 0 // very thorough, but not very readable - cout << "# Done with normal tests:" << endl; - cout << " Total test cases: " << m_registry.count() << endl; - cout << " Total test steps : " << globalSteps << endl; - cout << " Total passed test steps (including unexpected) : " << globalPasses << endl; - cout << " Total unexpected passed test steps : " << globalXPasses << endl; - cout << " Total failed test steps (including expected) : " << globalFails << endl; - cout << " Total expected failed test steps : " << globalXFails << endl; - cout << " Total skipped test steps : " << globalSkipped << endl; -#else - unsigned int numTests = m_registry.count(); // should this be globalSteps instead? - TQString str; - if ( globalFails == 0 ) - if ( globalXFails == 0 ) - str = TQString( "All %1 tests passed" ).arg( numTests ); - else - str = TQString( "All %1 tests behaved as expected (%2 expected failures)" ).arg( numTests ).arg( globalXFails ); - else - if ( globalXPasses == 0 ) - str = TQString( "%1 of %2 tests failed" ).arg( globalFails ).arg( numTests ); - else - str = TQString( "%1 of %2 tests did not behave as expected (%1 unexpected passes)" ).arg( globalFails ).arg( numTests ).arg( globalXPasses ); - if ( globalSkipped ) - str += TQString( " (%1 tests skipped)" ).arg( globalSkipped ); - cout << str.local8Bit().data() << endl; -#endif - - return m_registry.count(); - } - - void Runner::runMatchingTests(const TQString &prefix) - { - RegistryIteratorType it(m_registry); - for( ; it.current(); ++it ) - if ( TQString(it.currentKey()).startsWith(prefix) ) - runTest(it.currentKey()); - } - - void Runner::runTest(const char *name) - { - Tester *test = m_registry.find(name); - if ( test == 0L ) return; - - if ( s_debugCapturingEnabled ) - { - cout << "KUnitTest_Debug_Start[" << name << "]" << endl; - } - - test->results()->clear(); - test->allTests(); - - if ( s_debugCapturingEnabled ) - { - cout << "KUnitTest_Debug_End[" << name << "]" << endl << endl << flush; - } - - int numPass = 0; - int numFail = 0; - int numXFail = 0; - int numXPass = 0; - int numSkip = 0; - TQStringList xpassList; - TQStringList errorList; - TQStringList xfailList; - TQStringList skipList; - - if ( test->inherits("KUnitTest::SlotTester") ) - { - SlotTester *sltest = static_cast<SlotTester*>(test); - TestResultsListIteratorType it(sltest->resultsList()); - for ( ; it.current(); ++it) - { - numPass += it.current()->passed() + it.current()->xpasses(); - numFail += it.current()->errors() + it.current()->xfails(); - numXFail += it.current()->xfails(); - numXPass += it.current()->xpasses(); - numSkip += it.current()->skipped(); - globalSteps += it.current()->testsFinished(); - - xpassList += it.current()->xpassList(); - errorList += it.current()->errorList(); - xfailList += it.current()->xfailList(); - skipList += it.current()->skipList(); - } - } - else - { - numPass= test->results()->passed() + test->results()->xpasses(); - numFail= test->results()->errors() + test->results()->xfails(); - numXFail = test->results()->xfails(); - numXPass = test->results()->xpasses(); - numSkip= test->results()->skipped(); - globalSteps += test->results()->testsFinished(); - - xpassList += test->results()->xpassList(); - errorList += test->results()->errorList(); - xfailList += test->results()->xfailList(); - skipList += test->results()->skipList(); - } - - - globalPasses += numPass; - globalFails += numFail; - globalXFails += numXFail; - globalXPasses += numXPass; - globalSkipped += numSkip; - - cout << name << " - "; - cout << numPass << " test" << ( ( 1 == numPass )?"":"s") << " passed"; - if ( 0 < xpassList.count() ) { - cout << " (" << numXPass << " unexpected pass" << ( ( 1 == numXPass )?"":"es") << ")"; - } - cout << ", " << numFail << " test" << ( ( 1 == numFail )?"":"s") << " failed"; - if ( 0 < numXFail ) { - cout << " (" << numXFail << " expected failure" << ( ( 1 == numXFail )?"":"s") << ")"; - } - if ( 0 < numSkip ) { - cout << "; also " << numSkip << " skipped"; - } - cout << endl; - - if ( 0 < numXPass ) { - cout << " Unexpected pass" << ( ( 1 == numXPass )?"":"es") << ":" << endl; - TQStringList list = xpassList; - for ( TQStringList::Iterator itr = list.begin(); itr != list.end(); ++itr ) { - cout << "\t" << (*itr).latin1() << endl; - } - } - if ( 0 < (numFail - numXFail) ) { - cout << " Unexpected failure" << ( ( 1 == numFail )?"":"s") << ":" << endl; - TQStringList list = errorList; - for ( TQStringList::Iterator itr = list.begin(); itr != list.end(); ++itr ) { - cout << "\t" << (*itr).latin1() << endl; - } - } - if ( 0 < numXFail ) { - cout << " Expected failure" << ( ( 1 == numXFail)?"":"s") << ":" << endl; - TQStringList list = xfailList; - for ( TQStringList::Iterator itr = list.begin(); itr != list.end(); ++itr ) { - cout << "\t" << (*itr).latin1() << endl; - } - } - if ( 0 < numSkip ) { - cout << " Skipped test" << ( ( 1 == numSkip )?"":"s") << ":" << endl; - TQStringList list = skipList; - for ( TQStringList::Iterator itr = list.begin(); itr != list.end(); ++itr ) { - cout << "\t" << (*itr).latin1() << endl; - } - } - cout << endl; - - emit finished(name, test); - } -} - -#include "runner.moc" - |