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