Blame src/cppunit/TextTestRunner.cpp

Packit 8c9aa0
// ==> Implementation of cppunit/ui/text/TestRunner.h
Packit 8c9aa0
Packit 8c9aa0
#include <cppunit/config/SourcePrefix.h>
Packit 8c9aa0
#include <cppunit/TestSuite.h>
Packit 8c9aa0
#include <cppunit/TextTestResult.h>
Packit 8c9aa0
#include <cppunit/TextOutputter.h>
Packit 8c9aa0
#include <cppunit/TextTestProgressListener.h>
Packit 8c9aa0
#include <cppunit/TestResult.h>
Packit 8c9aa0
#include <cppunit/ui/text/TextTestRunner.h>
Packit 8c9aa0
#include <cppunit/portability/Stream.h>
Packit 8c9aa0
#include <stdexcept>
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
CPPUNIT_NS_BEGIN
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
/*! Constructs a new text runner.
Packit 8c9aa0
 * \param outputter used to print text result. Owned by the runner.
Packit 8c9aa0
 */
Packit 8c9aa0
TextTestRunner::TextTestRunner( Outputter *outputter ) 
Packit 8c9aa0
    : m_result( new TestResultCollector() )
Packit 8c9aa0
    , m_eventManager( new TestResult() )
Packit 8c9aa0
    , m_outputter( outputter )
Packit 8c9aa0
{
Packit 8c9aa0
  if ( !m_outputter )
Packit 8c9aa0
    m_outputter = new TextOutputter( m_result, stdCOut() );
Packit 8c9aa0
  m_eventManager->addListener( m_result );
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
TextTestRunner::~TextTestRunner()
Packit 8c9aa0
{
Packit 8c9aa0
  delete m_eventManager;
Packit 8c9aa0
  delete m_outputter;
Packit 8c9aa0
  delete m_result;
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
/*! Runs the named test case.
Packit 8c9aa0
 *
Packit 8c9aa0
 * \param testName Name of the test case to run. If an empty is given, then
Packit 8c9aa0
 *                 all added tests are run. The name can be the name of any
Packit 8c9aa0
 *                 test in the hierarchy.
Packit 8c9aa0
 * \param doWait if \c true then the user must press the RETURN key 
Packit 8c9aa0
 *               before the run() method exit.
Packit 8c9aa0
 * \param doPrintResult if \c true (default) then the test result are printed
Packit 8c9aa0
 *                      on the standard output.
Packit 8c9aa0
 * \param doPrintProgress if \c true (default) then TextTestProgressListener is
Packit 8c9aa0
 *                        used to show the progress.
Packit 8c9aa0
 * \return \c true is the test was successful, \c false if the test
Packit 8c9aa0
 *         failed or was not found.
Packit 8c9aa0
 */
Packit 8c9aa0
bool
Packit 8c9aa0
TextTestRunner::run( std::string testName,
Packit 8c9aa0
                       bool doWait,
Packit 8c9aa0
                       bool doPrintResult,
Packit 8c9aa0
                       bool doPrintProgress )
Packit 8c9aa0
{
Packit 8c9aa0
  TextTestProgressListener progress;
Packit 8c9aa0
  if ( doPrintProgress )
Packit 8c9aa0
    m_eventManager->addListener( &progress );
Packit 8c9aa0
Packit 8c9aa0
  TestRunner *pThis = this;
Packit 8c9aa0
  pThis->run( *m_eventManager, testName );
Packit 8c9aa0
Packit 8c9aa0
  if ( doPrintProgress )
Packit 8c9aa0
    m_eventManager->removeListener( &progress );
Packit 8c9aa0
Packit 8c9aa0
  printResult( doPrintResult );
Packit 8c9aa0
  wait( doWait );
Packit 8c9aa0
Packit 8c9aa0
  return m_result->wasSuccessful();
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
void 
Packit 8c9aa0
TextTestRunner::wait( bool doWait )
Packit 8c9aa0
{
Packit 8c9aa0
#if !defined( CPPUNIT_NO_STREAM )
Packit 8c9aa0
  if ( doWait ) 
Packit 8c9aa0
  {
Packit 8c9aa0
    stdCOut() << "<RETURN> to continue\n";
Packit 8c9aa0
    stdCOut().flush();
Packit 8c9aa0
    std::cin.get ();
Packit 8c9aa0
  }
Packit 8c9aa0
#endif
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
void 
Packit 8c9aa0
TextTestRunner::printResult( bool doPrintResult )
Packit 8c9aa0
{
Packit 8c9aa0
  stdCOut() << "\n";
Packit 8c9aa0
  if ( doPrintResult )
Packit 8c9aa0
    m_outputter->write();
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
/*! Returns the result of the test run.
Packit 8c9aa0
 * Use this after calling run() to access the result of the test run.
Packit 8c9aa0
 */
Packit 8c9aa0
TestResultCollector &
Packit 8c9aa0
TextTestRunner::result() const
Packit 8c9aa0
{
Packit 8c9aa0
  return *m_result;
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
/*! Returns the event manager.
Packit 8c9aa0
 * The instance of TestResult results returned is the one that is used to run the
Packit 8c9aa0
 * test. Use this to register additional TestListener before running the tests.
Packit 8c9aa0
 */
Packit 8c9aa0
TestResult &
Packit 8c9aa0
TextTestRunner::eventManager() const
Packit 8c9aa0
{
Packit 8c9aa0
  return *m_eventManager;
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
/*! Specifies an alternate outputter.
Packit 8c9aa0
 *
Packit 8c9aa0
 * Notes that the outputter will be use after the test run only if \a printResult was
Packit 8c9aa0
 * \c true.
Packit 8c9aa0
 * \param outputter New outputter to use. The previous outputter is destroyed. 
Packit 8c9aa0
 *                  The TextTestRunner assumes ownership of the outputter.
Packit 8c9aa0
 * \see CompilerOutputter, XmlOutputter, TextOutputter.
Packit 8c9aa0
 */
Packit 8c9aa0
void 
Packit 8c9aa0
TextTestRunner::setOutputter( Outputter *outputter )
Packit 8c9aa0
{
Packit 8c9aa0
  delete m_outputter;
Packit 8c9aa0
  m_outputter = outputter;
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
void 
Packit 8c9aa0
TextTestRunner::run( TestResult &controller,
Packit 8c9aa0
                     const std::string &testPath )
Packit 8c9aa0
{
Packit 8c9aa0
  TestRunner::run( controller, testPath );
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
CPPUNIT_NS_END