xref: /openbmc/telemetry/tests/src/test_ensure.cpp (revision f7ea2997ae6b4fad0dc35f9afa9b488d774f2ee1)
1 #include "utils/ensure.hpp"
2 
3 #include <gmock/gmock.h>
4 
5 using namespace testing;
6 
7 class 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 
19 TEST_F(TestEnsure, executesCallbackOnceWhenDestroyed)
20 {
21     sut = makeEnsure();
22     sut = nullptr;
23 
24     EXPECT_THAT(executed, Eq(1u));
25 }
26 
27 TEST_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 
36 TEST_F(TestEnsure, executesCallbackTwiceWhenReplaced)
37 {
38     sut = makeEnsure();
39     sut = makeEnsure();
40     sut = nullptr;
41 
42     EXPECT_THAT(executed, Eq(2u));
43 }
44 
45 TEST_F(TestEnsure, executesCallbackTwiceWhenNewCallbackAssigned)
46 {
47     sut = makeEnsure();
48     sut = [this] { executed += 10; };
49     sut = nullptr;
50 
51     EXPECT_THAT(executed, Eq(11u));
52 }
53