summaryrefslogtreecommitdiff
path: root/libadhocutil/unittests/testScopeExit.cpp
blob: 97aac8a28732fd3eae84d5cde1bd26eb8af48202 (plain)
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
#define BOOST_TEST_MODULE ScopeExit
#include <boost/test/unit_test.hpp>

#include "scopeExit.h"
#include <stdexcept>
#include <string>

using namespace AdHoc;

BOOST_AUTO_TEST_CASE(cleanexit)
{
	std::string log;
	{
		ScopeExit se(
				[&log] {
					log += "before";
				},
				[&log] {
					log += "clean";
				},
				[&log] {
					log += "error";
				},
				[&log] {
					log += "after";
				});
	}
	BOOST_REQUIRE_EQUAL(log, "beforecleanafter");
}

BOOST_AUTO_TEST_CASE(uncaught)
{
	BOOST_REQUIRE_THROW(
			{
				std::string log;
				{
					ScopeExit se(
							[&log] {
								log += "before";
							},
							[&log] {
								log += "clean";
							},
							[&log] {
								log += "error";
							},
							[&log] {
								log += "after";
							});
					throw std::runtime_error("test unclean exit");
				}
				BOOST_REQUIRE_EQUAL(log, "beforeerrorafter");
			},
			std::runtime_error);
}