blob: b6045384ad1409c1e6dc2c0712eb0ebc9ab62864 [file] [log] [blame]
Krzysztof Grobelnyf7ea2992022-01-27 11:04:58 +01001#include "utils/ensure.hpp"
2
3#include <gmock/gmock.h>
4
5using namespace testing;
6
7class TestEnsure : public Test
8{
9 public:
10 utils::Ensure<std::function<void()>> makeEnsure()
11 {
12 return [this] { ++executed; };
13 }
14
15 utils::Ensure<std::function<void()>> sut;
16 size_t executed = 0u;
17};
18
19TEST_F(TestEnsure, executesCallbackOnceWhenDestroyed)
20{
21 sut = makeEnsure();
22 sut = nullptr;
23
24 EXPECT_THAT(executed, Eq(1u));
25}
26
27TEST_F(TestEnsure, executesCallbackOnceWhenMoved)
28{
29 sut = makeEnsure();
30 auto copy = std::move(sut);
31 copy = nullptr;
32
33 EXPECT_THAT(executed, Eq(1u));
34}
35
36TEST_F(TestEnsure, executesCallbackTwiceWhenReplaced)
37{
38 sut = makeEnsure();
39 sut = makeEnsure();
40 sut = nullptr;
41
42 EXPECT_THAT(executed, Eq(2u));
43}
44
45TEST_F(TestEnsure, executesCallbackTwiceWhenNewCallbackAssigned)
46{
47 sut = makeEnsure();
48 sut = [this] { executed += 10; };
49 sut = nullptr;
50
51 EXPECT_THAT(executed, Eq(11u));
52}