Blame examples/cppunittest/MockProtector.h

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