|
Packit |
8c9aa0 |
#ifndef MOCKPROTECTOR_H
|
|
Packit |
8c9aa0 |
#define MOCKPROTECTOR_H
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
#include <stdexcept>
|
|
Packit |
8c9aa0 |
#include <cppunit/Protector.h>
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
class MockProtectorException : public std::runtime_error
|
|
Packit |
8c9aa0 |
{
|
|
Packit |
8c9aa0 |
public:
|
|
Packit |
8c9aa0 |
MockProtectorException()
|
|
Packit |
8c9aa0 |
: std::runtime_error( "MockProtectorException" )
|
|
Packit |
8c9aa0 |
{
|
|
Packit |
8c9aa0 |
}
|
|
Packit |
8c9aa0 |
};
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
class MockProtector : public CPPUNIT_NS::Protector
|
|
Packit |
8c9aa0 |
{
|
|
Packit |
8c9aa0 |
public:
|
|
Packit |
8c9aa0 |
MockProtector()
|
|
Packit |
8c9aa0 |
: m_wasCalled( false )
|
|
Packit |
8c9aa0 |
, m_wasTrapped( false )
|
|
Packit |
8c9aa0 |
, m_expectException( false )
|
|
Packit |
8c9aa0 |
, m_hasExpectation( false )
|
|
Packit |
8c9aa0 |
, m_shouldPropagateException( false )
|
|
Packit |
8c9aa0 |
{
|
|
Packit |
8c9aa0 |
}
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
bool protect( const CPPUNIT_NS::Functor &functor,
|
|
Packit |
8c9aa0 |
const CPPUNIT_NS::ProtectorContext &context )
|
|
Packit |
8c9aa0 |
{
|
|
Packit |
8c9aa0 |
try
|
|
Packit |
8c9aa0 |
{
|
|
Packit |
8c9aa0 |
m_wasCalled = true;
|
|
Packit |
8c9aa0 |
return functor();
|
|
Packit |
8c9aa0 |
}
|
|
Packit |
8c9aa0 |
catch ( MockProtectorException & )
|
|
Packit |
8c9aa0 |
{
|
|
Packit |
8c9aa0 |
m_wasTrapped = true;
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
if ( m_shouldPropagateException )
|
|
Packit |
8c9aa0 |
throw;
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
reportError( context, CPPUNIT_NS::Message("MockProtector trap") );
|
|
Packit |
8c9aa0 |
}
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
return false;
|
|
Packit |
8c9aa0 |
}
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
void setExpectException()
|
|
Packit |
8c9aa0 |
{
|
|
Packit |
8c9aa0 |
m_expectException = true;
|
|
Packit |
8c9aa0 |
m_hasExpectation = true;
|
|
Packit |
8c9aa0 |
}
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
void setExpectNoException()
|
|
Packit |
8c9aa0 |
{
|
|
Packit |
8c9aa0 |
m_expectException = false;
|
|
Packit |
8c9aa0 |
m_hasExpectation = true;
|
|
Packit |
8c9aa0 |
}
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
void setExpectCatchAndPropagateException()
|
|
Packit |
8c9aa0 |
{
|
|
Packit |
8c9aa0 |
setExpectException();
|
|
Packit |
8c9aa0 |
m_shouldPropagateException = true;
|
|
Packit |
8c9aa0 |
}
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
void verify()
|
|
Packit |
8c9aa0 |
{
|
|
Packit |
8c9aa0 |
if ( m_hasExpectation )
|
|
Packit |
8c9aa0 |
{
|
|
Packit |
8c9aa0 |
CPPUNIT_ASSERT_MESSAGE( "MockProtector::protect() was not called",
|
|
Packit |
8c9aa0 |
m_wasCalled );
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
std::string message;
|
|
Packit |
8c9aa0 |
if ( m_expectException )
|
|
Packit |
8c9aa0 |
message = "did not catch the exception.";
|
|
Packit |
8c9aa0 |
else
|
|
Packit |
8c9aa0 |
message = "caught an unexpected exception.";
|
|
Packit |
8c9aa0 |
CPPUNIT_ASSERT_EQUAL_MESSAGE( "MockProtector::protect() " + message,
|
|
Packit |
8c9aa0 |
m_expectException,
|
|
Packit |
8c9aa0 |
m_wasTrapped );
|
|
Packit |
8c9aa0 |
}
|
|
Packit |
8c9aa0 |
}
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
private:
|
|
Packit |
8c9aa0 |
bool m_wasCalled;
|
|
Packit |
8c9aa0 |
bool m_wasTrapped;
|
|
Packit |
8c9aa0 |
bool m_expectException;
|
|
Packit |
8c9aa0 |
bool m_hasExpectation;
|
|
Packit |
8c9aa0 |
bool m_shouldPropagateException;
|
|
Packit |
8c9aa0 |
};
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
#endif // MOCKPROTECTOR_H
|