|
Packit |
8c9aa0 |
#ifndef CPPUNIT_TESTRUNNER_H
|
|
Packit |
8c9aa0 |
#define CPPUNIT_TESTRUNNER_H
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
#include <cppunit/TestSuite.h>
|
|
Packit |
8c9aa0 |
#include <string>
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
CPPUNIT_NS_BEGIN
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
class Test;
|
|
Packit |
8c9aa0 |
class TestResult;
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
/*! \brief Generic test runner.
|
|
Packit |
8c9aa0 |
* \ingroup ExecutingTest
|
|
Packit |
8c9aa0 |
*
|
|
Packit |
8c9aa0 |
* The TestRunner assumes ownership of all added tests: you can not add test
|
|
Packit |
8c9aa0 |
* or suite that are local variable since they can't be deleted.
|
|
Packit |
8c9aa0 |
*
|
|
Packit |
8c9aa0 |
* Example of usage:
|
|
Packit |
8c9aa0 |
* \code
|
|
Packit |
8c9aa0 |
* #include <cppunit/extensions/TestFactoryRegistry.h>
|
|
Packit |
8c9aa0 |
* #include <cppunit/CompilerOutputter.h>
|
|
Packit |
8c9aa0 |
* #include <cppunit/TestResult.h>
|
|
Packit |
8c9aa0 |
* #include <cppunit/TestResultCollector.h>
|
|
Packit |
8c9aa0 |
* #include <cppunit/TestRunner.h>
|
|
Packit |
8c9aa0 |
* #include <cppunit/TextTestProgressListener.h>
|
|
Packit |
8c9aa0 |
*
|
|
Packit |
8c9aa0 |
*
|
|
Packit |
8c9aa0 |
* int
|
|
Packit |
8c9aa0 |
* main( int argc, char* argv[] )
|
|
Packit |
8c9aa0 |
* {
|
|
Packit |
8c9aa0 |
* std::string testPath = (argc > 1) ? std::string(argv[1]) : "";
|
|
Packit |
8c9aa0 |
*
|
|
Packit |
8c9aa0 |
* // Create the event manager and test controller
|
|
Packit |
8c9aa0 |
* CppUnit::TestResult controller;
|
|
Packit |
8c9aa0 |
*
|
|
Packit |
8c9aa0 |
* // Add a listener that colllects test result
|
|
Packit |
8c9aa0 |
* CppUnit::TestResultCollector result;
|
|
Packit |
8c9aa0 |
* controller.addListener( &result );
|
|
Packit |
8c9aa0 |
*
|
|
Packit |
8c9aa0 |
* // Add a listener that print dots as test run.
|
|
Packit |
8c9aa0 |
* CppUnit::TextTestProgressListener progress;
|
|
Packit |
8c9aa0 |
* controller.addListener( &progress );
|
|
Packit |
8c9aa0 |
*
|
|
Packit |
8c9aa0 |
* // Add the top suite to the test runner
|
|
Packit |
8c9aa0 |
* CppUnit::TestRunner runner;
|
|
Packit |
8c9aa0 |
* runner.addTest( CppUnit::TestFactoryRegistry::getRegistry().makeTest() );
|
|
Packit |
8c9aa0 |
* try
|
|
Packit |
8c9aa0 |
* {
|
|
Packit |
8c9aa0 |
* std::cout << "Running " << testPath;
|
|
Packit |
8c9aa0 |
* runner.run( controller, testPath );
|
|
Packit |
8c9aa0 |
*
|
|
Packit |
8c9aa0 |
* std::cerr << std::endl;
|
|
Packit |
8c9aa0 |
*
|
|
Packit |
8c9aa0 |
* // Print test in a compiler compatible format.
|
|
Packit |
8c9aa0 |
* CppUnit::CompilerOutputter outputter( &result, std::cerr );
|
|
Packit |
8c9aa0 |
* outputter.write();
|
|
Packit |
8c9aa0 |
* }
|
|
Packit |
8c9aa0 |
* catch ( std::invalid_argument &e ) // Test path not resolved
|
|
Packit |
8c9aa0 |
* {
|
|
Packit |
8c9aa0 |
* std::cerr << std::endl
|
|
Packit |
8c9aa0 |
* << "ERROR: " << e.what()
|
|
Packit |
8c9aa0 |
* << std::endl;
|
|
Packit |
8c9aa0 |
* return 0;
|
|
Packit |
8c9aa0 |
* }
|
|
Packit |
8c9aa0 |
*
|
|
Packit |
8c9aa0 |
* return result.wasSuccessful() ? 0 : 1;
|
|
Packit |
8c9aa0 |
* }
|
|
Packit |
8c9aa0 |
* \endcode
|
|
Packit |
8c9aa0 |
*/
|
|
Packit |
8c9aa0 |
class CPPUNIT_API TestRunner
|
|
Packit |
8c9aa0 |
{
|
|
Packit |
8c9aa0 |
public:
|
|
Packit |
8c9aa0 |
/*! \brief Constructs a TestRunner object.
|
|
Packit |
8c9aa0 |
*/
|
|
Packit |
8c9aa0 |
TestRunner( );
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
/// Destructor.
|
|
Packit |
8c9aa0 |
virtual ~TestRunner();
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
/*! \brief Adds the specified test.
|
|
Packit |
8c9aa0 |
* \param test Test to add. The TestRunner takes ownership of the test.
|
|
Packit |
8c9aa0 |
*/
|
|
Packit |
8c9aa0 |
virtual void addTest( Test *test );
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
/*! \brief Runs a test using the specified controller.
|
|
Packit |
8c9aa0 |
* \param controller Event manager and controller used for testing
|
|
Packit |
8c9aa0 |
* \param testPath Test path string. See Test::resolveTestPath() for detail.
|
|
Packit |
8c9aa0 |
* \exception std::invalid_argument if no test matching \a testPath is found.
|
|
Packit |
8c9aa0 |
* see TestPath::TestPath( Test*, const std::string &)
|
|
Packit |
8c9aa0 |
* for detail.
|
|
Packit |
8c9aa0 |
*/
|
|
Packit |
8c9aa0 |
virtual void run( TestResult &controller,
|
|
Packit |
8c9aa0 |
const std::string &testPath = "" );
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
protected:
|
|
Packit |
8c9aa0 |
/*! \brief (INTERNAL) Mutating test suite.
|
|
Packit |
8c9aa0 |
*/
|
|
Packit |
8c9aa0 |
class CPPUNIT_API WrappingSuite : public TestSuite
|
|
Packit |
8c9aa0 |
{
|
|
Packit |
8c9aa0 |
public:
|
|
Packit |
8c9aa0 |
WrappingSuite( const std::string &name = "All Tests" );
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
int getChildTestCount() const;
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
std::string getName() const;
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
void run( TestResult *result );
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
protected:
|
|
Packit |
8c9aa0 |
Test *doGetChildTestAt( int index ) const;
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
bool hasOnlyOneTest() const;
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
Test *getUniqueChildTest() const;
|
|
Packit |
8c9aa0 |
};
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
protected:
|
|
Packit |
8c9aa0 |
WrappingSuite *m_suite;
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
private:
|
|
Packit |
8c9aa0 |
/// Prevents the use of the copy constructor.
|
|
Packit |
8c9aa0 |
TestRunner( const TestRunner © );
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
/// Prevents the use of the copy operator.
|
|
Packit |
8c9aa0 |
void operator =( const TestRunner © );
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
private:
|
|
Packit |
8c9aa0 |
};
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
CPPUNIT_NS_END
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
#endif // CPPUNIT_TESTRUNNER_H
|