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