#include "CoreSuite.h"
#include "MockFunctor.h"
#include "MockProtector.h"
#include "MockTestCase.h"
#include "TestResultTest.h"
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( TestResultTest,
coreSuiteName() );
TestResultTest::TestResultTest()
{
}
TestResultTest::~TestResultTest()
{
}
void
TestResultTest::setUp()
{
m_result = new CPPUNIT_NS::TestResult();
m_listener1 = new MockTestListener( "listener1" );
m_listener2 = new MockTestListener( "listener2" );
m_dummyTest = new MockTestCase( "dummy-test" );
}
void
TestResultTest::tearDown()
{
delete m_dummyTest;
delete m_listener1;
delete m_listener2;
delete m_result;
}
void
TestResultTest::testConstructor()
{
CPPUNIT_ASSERT( !m_result->shouldStop() );
}
void
TestResultTest::testStop()
{
m_result->stop();
CPPUNIT_ASSERT( m_result->shouldStop() );
}
void
TestResultTest::testAddError()
{
CPPUNIT_NS::Exception *dummyException = new CPPUNIT_NS::Exception(
CPPUNIT_NS::Message( "some_error" ) );
m_listener1->setExpectFailure( m_dummyTest, dummyException, true );
m_result->addListener( m_listener1 );
m_result->addError( m_dummyTest, dummyException );
m_listener1->verify();
}
void
TestResultTest::testAddFailure()
{
CPPUNIT_NS::Exception *dummyException = new CPPUNIT_NS::Exception(
CPPUNIT_NS::Message("some_error" ) );
m_listener1->setExpectFailure( m_dummyTest, dummyException, false );
m_result->addListener( m_listener1 );
m_result->addFailure( m_dummyTest, dummyException );
m_listener1->verify();
}
void
TestResultTest::testStartTest()
{
m_listener1->setExpectStartTest( m_dummyTest );
m_result->addListener( m_listener1 );
m_result->startTest( m_dummyTest );
m_listener1->verify();
}
void
TestResultTest::testEndTest()
{
m_listener1->setExpectEndTest( m_dummyTest );
m_result->addListener( m_listener1 );
m_result->endTest( m_dummyTest );
m_listener1->verify();
}
void
TestResultTest::testStartSuite()
{
m_listener1->setExpectStartSuite( m_dummyTest );
m_result->addListener( m_listener1 );
m_result->startSuite( m_dummyTest );
m_listener1->verify();
}
void
TestResultTest::testEndSuite()
{
m_listener1->setExpectEndSuite( m_dummyTest );
m_result->addListener( m_listener1 );
m_result->endSuite( m_dummyTest );
m_listener1->verify();
}
void
TestResultTest::testRunTest()
{
m_listener1->setExpectStartTestRun( m_dummyTest, m_result );
m_listener1->setExpectEndTestRun( m_dummyTest, m_result );
m_result->addListener( m_listener1 );
m_result->runTest( m_dummyTest );
m_listener1->verify();
}
void
TestResultTest::testTwoListener()
{
m_listener1->setExpectStartTest( m_dummyTest );
m_listener2->setExpectStartTest( m_dummyTest );
CPPUNIT_NS::Exception *dummyException1 = new CPPUNIT_NS::Exception(
CPPUNIT_NS::Message( "some_error" ) );
m_listener1->setExpectFailure( m_dummyTest, dummyException1, true );
m_listener2->setExpectFailure( m_dummyTest, dummyException1, true );
m_listener1->setExpectEndTest( m_dummyTest );
m_listener2->setExpectEndTest( m_dummyTest );
m_result->addListener( m_listener1 );
m_result->addListener( m_listener2 );
m_result->startTest( m_dummyTest );
m_result->addError( m_dummyTest, dummyException1 );
m_result->endTest( m_dummyTest );
m_listener1->verify();
m_listener2->verify();
}
void
TestResultTest::testDefaultProtectSucceed()
{
MockFunctor functor;
functor.setShouldSucceed();
m_listener1->setExpectNoFailure();
m_result->addListener( m_listener1 );
CPPUNIT_ASSERT( m_result->protect( functor, m_dummyTest ) );
m_listener1->verify();
functor.verify();
}
void
TestResultTest::testDefaultProtectFail()
{
MockFunctor functor;
functor.setShouldFail();
m_listener1->setExpectNoFailure();
m_result->addListener( m_listener1 );
CPPUNIT_ASSERT( !m_result->protect( functor, m_dummyTest ) );
m_listener1->verify();
functor.verify();
}
void
TestResultTest::testDefaultProtectFailIfThrow()
{
MockFunctor functor;
functor.setThrowFailureException();
m_listener1->setExpectFailure();
m_result->addListener( m_listener1 );
CPPUNIT_ASSERT( !m_result->protect( functor, m_dummyTest ) );
m_listener1->verify();
functor.verify();
}
void
TestResultTest::testProtectChainPushOneTrap()
{
MockFunctor functor;
MockProtector *protector = new MockProtector();
functor.setThrowMockProtectorException();
protector->setExpectException();
m_listener1->setExpectFailure();
m_result->pushProtector( protector );
m_result->addListener( m_listener1 );
CPPUNIT_ASSERT( !m_result->protect( functor, m_dummyTest ) );
protector->verify();
m_listener1->verify();
functor.verify();
}
void
TestResultTest::testProtectChainPushOnePassThrough()
{
MockFunctor functor;
MockProtector *protector = new MockProtector();
functor.setThrowFailureException();
protector->setExpectNoException();
m_listener1->setExpectFailure();
m_result->pushProtector( protector );
m_result->addListener( m_listener1 );
CPPUNIT_ASSERT( !m_result->protect( functor, m_dummyTest ) );
protector->verify();
m_listener1->verify();
functor.verify();
}
void
TestResultTest::testProtectChainPushTwoTrap()
{
MockFunctor functor;
functor.setThrowMockProtectorException();
// protector1 catch the exception retrown by protector2
MockProtector *protector1 = new MockProtector();
protector1->setExpectException();
// protector2 catch the exception and rethrow it
MockProtector *protector2 = new MockProtector();
protector2->setExpectCatchAndPropagateException();
m_listener1->setExpectFailure();
m_result->pushProtector( protector1 );
m_result->pushProtector( protector2 );
m_result->addListener( m_listener1 );
CPPUNIT_ASSERT( !m_result->protect( functor, m_dummyTest ) );
protector1->verify();
protector2->verify();
m_listener1->verify();
functor.verify();
}