Blame include/cppunit/TestListener.h

Packit 8c9aa0
#ifndef CPPUNIT_TESTLISTENER_H    // -*- C++ -*-
Packit 8c9aa0
#define CPPUNIT_TESTLISTENER_H
Packit 8c9aa0
Packit 8c9aa0
#include <cppunit/Portability.h>
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
CPPUNIT_NS_BEGIN
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
class Exception;
Packit 8c9aa0
class Test;
Packit 8c9aa0
class TestFailure;
Packit 8c9aa0
class TestResult;
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
/*! \brief Listener for test progress and result.
Packit 8c9aa0
 * \ingroup TrackingTestExecution
Packit 8c9aa0
 *
Packit 8c9aa0
 * Implementing the Observer pattern a TestListener may be registered
Packit 8c9aa0
 * to a TestResult to obtain information on the testing progress. Use
Packit 8c9aa0
 * specialized sub classes of TestListener for text output
Packit 8c9aa0
 * (TextTestProgressListener). Do not use the Listener for the test
Packit 8c9aa0
 * result output, use a subclass of Outputter instead.
Packit 8c9aa0
 *
Packit 8c9aa0
 * The test framework distinguishes between failures and errors.
Packit 8c9aa0
 * A failure is anticipated and checked for with assertions. Errors are
Packit 8c9aa0
 * unanticipated problems signified by exceptions that are not generated
Packit 8c9aa0
 * by the framework.
Packit 8c9aa0
 *
Packit 8c9aa0
 * Here is an example to track test time:
Packit 8c9aa0
 *
Packit 8c9aa0
 *
Packit 8c9aa0
 * \code
Packit 8c9aa0
 * #include <cppunit/TestListener.h>
Packit 8c9aa0
 * #include <cppunit/Test.h>
Packit 8c9aa0
 * #include <time.h>    // for clock()
Packit 8c9aa0
 *
Packit 8c9aa0
 * class TimingListener : public CppUnit::TestListener
Packit 8c9aa0
 * {
Packit 8c9aa0
 * public:
Packit 8c9aa0
 *   void startTest( CppUnit::Test *test )
Packit 8c9aa0
 *   {
Packit 8c9aa0
 *     _chronometer.start();
Packit 8c9aa0
 *   }
Packit 8c9aa0
 *  
Packit 8c9aa0
 *   void endTest( CppUnit::Test *test )
Packit 8c9aa0
 *   {
Packit 8c9aa0
 *     _chronometer.end();
Packit 8c9aa0
 *     addTest( test, _chronometer.elapsedTime() );
Packit 8c9aa0
 *   }
Packit 8c9aa0
 *
Packit 8c9aa0
 *   // ... (interface to add/read test timing result)
Packit 8c9aa0
 *
Packit 8c9aa0
 * private:
Packit 8c9aa0
 *   Clock _chronometer;
Packit 8c9aa0
 * };
Packit 8c9aa0
 * \endcode
Packit 8c9aa0
 *   
Packit 8c9aa0
 * And another example that track failure/success at test suite level and captures
Packit 8c9aa0
 * the TestPath of each suite:
Packit 8c9aa0
 * \code
Packit 8c9aa0
 * class SuiteTracker : public CppUnit::TestListener
Packit 8c9aa0
 * {
Packit 8c9aa0
 * public:
Packit 8c9aa0
 *   void startSuite( CppUnit::Test *suite )
Packit 8c9aa0
 *   {
Packit 8c9aa0
 *     m_currentPath.add( suite );
Packit 8c9aa0
 *   }
Packit 8c9aa0
 *   
Packit 8c9aa0
 *   void addFailure( const TestFailure &failure )
Packit 8c9aa0
 *   {
Packit 8c9aa0
 *     m_suiteFailure.top() = false;
Packit 8c9aa0
 *   }
Packit 8c9aa0
 * 
Packit 8c9aa0
 *   void endSuite( CppUnit::Test *suite )
Packit 8c9aa0
 *   {
Packit 8c9aa0
 *     m_suiteStatus.insert( std::make_pair( suite, m_suiteFailure.top() ) );
Packit 8c9aa0
 *     m_suitePaths.insert( std::make_pair( suite, m_currentPath ) );
Packit 8c9aa0
 *
Packit 8c9aa0
 *     m_currentPath.up();
Packit 8c9aa0
 *     m_suiteFailure.pop();
Packit 8c9aa0
 *   }
Packit 8c9aa0
 *
Packit 8c9aa0
 * private:
Packit 8c9aa0
 *   std::stack<bool> m_suiteFailure;
Packit 8c9aa0
 *   CppUnit::TestPath m_currentPath;
Packit 8c9aa0
 *   std::map<CppUnit::Test *, bool> m_suiteStatus;
Packit 8c9aa0
 *   std::map<CppUnit::Test *, CppUnit::TestPath> m_suitePaths;
Packit 8c9aa0
 * };
Packit 8c9aa0
 * \endcode
Packit 8c9aa0
 *
Packit 8c9aa0
 * \see TestResult
Packit 8c9aa0
 */
Packit 8c9aa0
class CPPUNIT_API TestListener
Packit 8c9aa0
{
Packit 8c9aa0
public:
Packit 8c9aa0
  virtual ~TestListener() {}
Packit 8c9aa0
  
Packit 8c9aa0
  /// Called when just before a TestCase is run.
Packit 8c9aa0
  virtual void startTest( Test * /*test*/ ) {}
Packit 8c9aa0
Packit 8c9aa0
  /*! \brief Called when a failure occurs while running a test.
Packit 8c9aa0
   * \see TestFailure.
Packit 8c9aa0
   * \warning \a failure is a temporary object that is destroyed after the 
Packit 8c9aa0
   *          method call. Use TestFailure::clone() to create a duplicate.
Packit 8c9aa0
   */
Packit 8c9aa0
  virtual void addFailure( const TestFailure & /*failure*/ ) {}
Packit 8c9aa0
Packit 8c9aa0
  /// Called just after a TestCase was run (even if a failure occured).
Packit 8c9aa0
  virtual void endTest( Test * /*test*/ ) {}
Packit 8c9aa0
Packit 8c9aa0
  /*! \brief Called by a TestComposite just before running its child tests.
Packit 8c9aa0
   */
Packit 8c9aa0
  virtual void startSuite( Test * /*suite*/ ) {}
Packit 8c9aa0
Packit 8c9aa0
  /*! \brief Called by a TestComposite after running its child tests.
Packit 8c9aa0
   */
Packit 8c9aa0
  virtual void endSuite( Test * /*suite*/ ) {}
Packit 8c9aa0
Packit 8c9aa0
  /*! \brief Called by a TestRunner before running the test.
Packit 8c9aa0
   * 
Packit 8c9aa0
   * You can use this to do some global initialisation. A listener
Packit 8c9aa0
   * could also use to output a 'prolog' to the test run.
Packit 8c9aa0
   *
Packit 8c9aa0
   * \param test Test that is going to be run.
Packit 8c9aa0
   * \param eventManager Event manager used for the test run.
Packit 8c9aa0
   */
Packit 8c9aa0
  virtual void startTestRun( Test * /*test*/, 
Packit 8c9aa0
                             TestResult * /*eventManager*/ ) {}
Packit 8c9aa0
Packit 8c9aa0
  /*! \brief Called by a TestRunner after running the test.
Packit 8c9aa0
   *
Packit 8c9aa0
   * TextTestProgressListener use this to emit a line break. You can also use this
Packit 8c9aa0
   * to do some global uninitialisation.
Packit 8c9aa0
   *
Packit 8c9aa0
   * \param test Test that was run.
Packit 8c9aa0
   * \param eventManager Event manager used for the test run.
Packit 8c9aa0
   */
Packit 8c9aa0
  virtual void endTestRun( Test * /*test*/, 
Packit 8c9aa0
                           TestResult * /*eventManager*/ ) {}
Packit 8c9aa0
};
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
CPPUNIT_NS_END
Packit 8c9aa0
Packit 8c9aa0
#endif // CPPUNIT_TESTLISTENER_H
Packit 8c9aa0
Packit 8c9aa0