1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
|
#include "hippomocks.h"
#include "Framework.h"
#include <utility>
using std::auto_ptr;
class X {};
class IQ {
public:
virtual ~IQ() {}
virtual void f();
virtual auto_ptr<X> g();
virtual auto_ptr<IQ> getSelf();
};
TEST (checkAutoptrReturnable)
{
X *_t = new X;
MockRepository mocks;
IQ *iamock = mocks.Mock<IQ>();
mocks.ExpectCall(iamock, IQ::g).Return(auto_ptr<X>(_t));
CHECK(_t == iamock->g().get());
}
TEST (checkAutoptrCanReturnMock)
{
MockRepository mocks;
IQ *iamock = mocks.Mock<IQ>();
mocks.ExpectCall(iamock, IQ::getSelf).Return(auto_ptr<IQ>(iamock));
mocks.ExpectCallDestructor(iamock);
CHECK(iamock == iamock->getSelf().get());
}
TEST(checkCanDestroyMock)
{
MockRepository mocks;
IQ *iamock = mocks.Mock<IQ>();
mocks.ExpectCallDestructor(iamock);
delete iamock;
}
TEST(checkAutoptrStability)
{
int exceptionsCaught = 0;
try
{
MockRepository mocks;
try
{
IQ *iamock = mocks.Mock<IQ>();
auto_ptr<IQ> auto_ptr(iamock);
mocks.ExpectCall(iamock, IQ::f);
mocks.ExpectCallDestructor(iamock);
throw 42;
// implicit: destructor for iamock, that may not throw
}
catch(int)
{
exceptionsCaught++;
}
}
catch(HippoMocks::ExpectationException)
{
exceptionsCaught++;
}
CHECK(exceptionsCaught == 2);
}
|