forked from dascandy/hippomocks
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtest_autoptr.cpp
69 lines (61 loc) · 1.3 KB
/
test_autoptr.cpp
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
#include "hippomocks.h"
#include "gtest/gtest.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 (TestAutoPtr, checkAutoptrReturnable)
{
X *_t = new X;
MockRepository mocks;
IQ *iamock = mocks.Mock<IQ>();
mocks.ExpectCall(iamock, IQ::g).Return(auto_ptr<X>(_t));
EXPECT_EQ(_t, iamock->g().get());
}
TEST (TestAutoPtr, checkAutoptrCanReturnMock)
{
MockRepository mocks;
IQ *iamock = mocks.Mock<IQ>();
mocks.ExpectCall(iamock, IQ::getSelf).Return(auto_ptr<IQ>(iamock));
mocks.ExpectCallDestructor(iamock);
EXPECT_EQ(iamock, iamock->getSelf().get());
}
TEST (TestAutoPtr, checkCanDestroyMock)
{
MockRepository mocks;
IQ *iamock = mocks.Mock<IQ>();
mocks.ExpectCallDestructor(iamock);
delete iamock;
}
TEST (TestAutoPtr, 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++;
}
EXPECT_EQ(2, exceptionsCaught);
}