Skip to content

Commit 6384bb6

Browse files
committed
Add NAZARA_DEFER and CallOnExit tests
1 parent 75b829e commit 6384bb6

File tree

2 files changed

+49
-0
lines changed

2 files changed

+49
-0
lines changed

include/NazaraUtils/CallOnExit.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
#include <NazaraUtils/Prerequisites.hpp>
1111
#include <optional>
1212

13+
#define NAZARA_DEFER(expr) Nz::CallOnExit NazaraSuffixMacro(defer_, __LINE__)([&] { expr })
14+
1315
namespace Nz
1416
{
1517
template<typename F>

tests/src/CallOnExitTests.cpp

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
#include <NazaraUtils/CallOnExit.hpp>
2+
#include <catch2/catch_test_macros.hpp>
3+
4+
SCENARIO("CallOnExit", "[CallOnExit]")
5+
{
6+
WHEN("Checking if CallOnExit is called at end of scope")
7+
{
8+
bool called = false;
9+
{
10+
Nz::CallOnExit callOnExit([&]{ called = true; });
11+
CHECK_FALSE(called);
12+
}
13+
CHECK(called);
14+
}
15+
16+
WHEN("Checking if CallOnExit is called when reset")
17+
{
18+
bool called = false;
19+
{
20+
Nz::CallOnExit callOnExit([&] { called = true; });
21+
CHECK_FALSE(called);
22+
callOnExit.Reset();
23+
}
24+
CHECK_FALSE(called);
25+
}
26+
27+
WHEN("Checking that CallOnExit is still called only once when CallAndReset is used")
28+
{
29+
unsigned int callCount = 0;
30+
{
31+
Nz::CallOnExit callOnExit([&] { callCount++; });
32+
CHECK(callCount == 0);
33+
callOnExit.CallAndReset();
34+
}
35+
CHECK(callCount == 1);
36+
}
37+
38+
WHEN("Testing NAZARA_DEFER")
39+
{
40+
bool called = false;
41+
{
42+
NAZARA_DEFER({ called = true; });
43+
CHECK_FALSE(called);
44+
}
45+
CHECK(called);
46+
}
47+
}

0 commit comments

Comments
 (0)