Blame include/cppunit/TestRunner.h

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 &copy );
Packit 8c9aa0
Packit 8c9aa0
  /// Prevents the use of the copy operator.
Packit 8c9aa0
  void operator =( const TestRunner &copy );
Packit 8c9aa0
Packit 8c9aa0
private:
Packit 8c9aa0
};
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
CPPUNIT_NS_END
Packit 8c9aa0
Packit 8c9aa0
#endif  // CPPUNIT_TESTRUNNER_H