|
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
|