File: test_autoptr.cpp

package info (click to toggle)
hippomocks 5.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 672 kB
  • sloc: cpp: 7,791; ansic: 31; makefile: 28
file content (69 lines) | stat: -rw-r--r-- 1,266 bytes parent folder | download | duplicates (2)
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);
}