Blame src/cppunit/TestCase.cpp

Packit 8c9aa0
#include <cppunit/Portability.h>
Packit 8c9aa0
#include <cppunit/Exception.h>
Packit 8c9aa0
#include <cppunit/Protector.h>
Packit 8c9aa0
#include <cppunit/TestCase.h>
Packit 8c9aa0
#include <cppunit/TestResult.h>
Packit 8c9aa0
#include <stdexcept>
Packit 8c9aa0
Packit 8c9aa0
#if defined(CPPUNIT_USE_TYPEINFO_NAME)
Packit 8c9aa0
#  include <typeinfo>
Packit 8c9aa0
#endif
Packit 8c9aa0
Packit 8c9aa0
CPPUNIT_NS_BEGIN
Packit 8c9aa0
Packit 8c9aa0
/*! \brief Functor to call test case method (Implementation).
Packit 8c9aa0
 *
Packit 8c9aa0
 * Implementation detail.
Packit 8c9aa0
 */
Packit 8c9aa0
class TestCaseMethodFunctor : public Functor
Packit 8c9aa0
{
Packit 8c9aa0
public:
Packit 8c9aa0
  typedef void (TestCase::*Method)();
Packit 8c9aa0
Packit 8c9aa0
  TestCaseMethodFunctor( TestCase *target,
Packit 8c9aa0
                         Method method )
Packit 8c9aa0
     : m_target( target )
Packit 8c9aa0
     , m_method( method )
Packit 8c9aa0
  {
Packit 8c9aa0
  }
Packit 8c9aa0
Packit 8c9aa0
  bool operator()() const
Packit 8c9aa0
  {
Packit 8c9aa0
    (m_target->*m_method)();
Packit 8c9aa0
    return true;
Packit 8c9aa0
  }
Packit 8c9aa0
Packit 8c9aa0
private:
Packit 8c9aa0
  TestCase *m_target;
Packit 8c9aa0
  Method m_method;
Packit 8c9aa0
};
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
/** Constructs a test case.
Packit 8c9aa0
 *  \param name the name of the TestCase.
Packit 8c9aa0
 **/
Packit 8c9aa0
TestCase::TestCase( const std::string &name )
Packit 8c9aa0
    : m_name(name)
Packit 8c9aa0
{
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
/// Run the test and catch any exceptions that are triggered by it 
Packit 8c9aa0
void 
Packit 8c9aa0
TestCase::run( TestResult *result )
Packit 8c9aa0
{
Packit 8c9aa0
  result->startTest(this);
Packit 8c9aa0
/*
Packit 8c9aa0
  try {
Packit 8c9aa0
    setUp();
Packit 8c9aa0
Packit 8c9aa0
    try {
Packit 8c9aa0
      runTest();
Packit 8c9aa0
    }
Packit 8c9aa0
    catch ( Exception &e ) {
Packit 8c9aa0
      Exception *copy = e.clone();
Packit 8c9aa0
      result->addFailure( this, copy );
Packit 8c9aa0
    }
Packit 8c9aa0
    catch ( std::exception &e ) {
Packit 8c9aa0
      result->addError( this, new Exception( Message( "uncaught std::exception", 
Packit 8c9aa0
                                                      e.what() ) ) );
Packit 8c9aa0
    }
Packit 8c9aa0
    catch (...) {
Packit 8c9aa0
      Exception *e = new Exception( Message( "uncaught unknown exception" ) );
Packit 8c9aa0
      result->addError( this, e );
Packit 8c9aa0
    }
Packit 8c9aa0
Packit 8c9aa0
    try {
Packit 8c9aa0
      tearDown();
Packit 8c9aa0
    }
Packit 8c9aa0
    catch (...) {
Packit 8c9aa0
      result->addError( this, new Exception( Message( "tearDown() failed" ) ) );
Packit 8c9aa0
    }
Packit 8c9aa0
  }
Packit 8c9aa0
  catch (...) {
Packit 8c9aa0
    result->addError( this, new Exception( Message( "setUp() failed" ) ) );
Packit 8c9aa0
  }
Packit 8c9aa0
*/
Packit 8c9aa0
  if ( result->protect( TestCaseMethodFunctor( this, &TestCase::setUp ),
Packit 8c9aa0
                        this,
Packit 8c9aa0
                       "setUp() failed" ) )
Packit 8c9aa0
  {
Packit 8c9aa0
    result->protect( TestCaseMethodFunctor( this, &TestCase::runTest ),
Packit 8c9aa0
                     this );
Packit 8c9aa0
  }
Packit 8c9aa0
Packit 8c9aa0
  result->protect( TestCaseMethodFunctor( this, &TestCase::tearDown ),
Packit 8c9aa0
                   this,
Packit 8c9aa0
                   "tearDown() failed" );
Packit 8c9aa0
Packit 8c9aa0
  result->endTest( this );
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
/// All the work for runTest is deferred to subclasses 
Packit 8c9aa0
void 
Packit 8c9aa0
TestCase::runTest()
Packit 8c9aa0
{
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
/** Constructs a test case for a suite.
Packit 8c9aa0
 * \deprecated This constructor was used by fixture when TestFixture did not exist.
Packit 8c9aa0
 *             Have your fixture inherits TestFixture instead of TestCase.
Packit 8c9aa0
 * \internal
Packit 8c9aa0
 *  This TestCase was intended for use by the TestCaller and should not
Packit 8c9aa0
 *  be used by a test case for which run() is called.
Packit 8c9aa0
 **/
Packit 8c9aa0
TestCase::TestCase()
Packit 8c9aa0
    : m_name( "" )
Packit 8c9aa0
{
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
/// Destructs a test case
Packit 8c9aa0
TestCase::~TestCase()
Packit 8c9aa0
{
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
/// Returns the name of the test case
Packit 8c9aa0
std::string 
Packit 8c9aa0
TestCase::getName() const
Packit 8c9aa0
{ 
Packit 8c9aa0
  return m_name; 
Packit 8c9aa0
}
Packit 8c9aa0
  
Packit 8c9aa0
Packit 8c9aa0
CPPUNIT_NS_END