1*b5645947SKrzysztof Grobelny #include "utils/unique_call.hpp" 2*b5645947SKrzysztof Grobelny 3*b5645947SKrzysztof Grobelny #include <gmock/gmock.h> 4*b5645947SKrzysztof Grobelny 5*b5645947SKrzysztof Grobelny namespace utils 6*b5645947SKrzysztof Grobelny { 7*b5645947SKrzysztof Grobelny 8*b5645947SKrzysztof Grobelny using namespace testing; 9*b5645947SKrzysztof Grobelny 10*b5645947SKrzysztof Grobelny class TestUniqueCall : public Test 11*b5645947SKrzysztof Grobelny { 12*b5645947SKrzysztof Grobelny public: 13*b5645947SKrzysztof Grobelny void uniqueCallIncrementCounter() 14*b5645947SKrzysztof Grobelny { 15*b5645947SKrzysztof Grobelny uniqueCall1([this](auto context) { ++counter; }); 16*b5645947SKrzysztof Grobelny } 17*b5645947SKrzysztof Grobelny 18*b5645947SKrzysztof Grobelny void uniqueCallWhileUniqueCallIsActiveIncrementCounter() 19*b5645947SKrzysztof Grobelny { 20*b5645947SKrzysztof Grobelny uniqueCall2([this](auto context) { 21*b5645947SKrzysztof Grobelny ++counter; 22*b5645947SKrzysztof Grobelny uniqueCallWhileUniqueCallIsActiveIncrementCounter(); 23*b5645947SKrzysztof Grobelny }); 24*b5645947SKrzysztof Grobelny } 25*b5645947SKrzysztof Grobelny 26*b5645947SKrzysztof Grobelny UniqueCall uniqueCall1; 27*b5645947SKrzysztof Grobelny UniqueCall uniqueCall2; 28*b5645947SKrzysztof Grobelny uint32_t counter = 0u; 29*b5645947SKrzysztof Grobelny }; 30*b5645947SKrzysztof Grobelny 31*b5645947SKrzysztof Grobelny TEST_F(TestUniqueCall, shouldExecuteNormally) 32*b5645947SKrzysztof Grobelny { 33*b5645947SKrzysztof Grobelny for (size_t i = 0; i < 3u; ++i) 34*b5645947SKrzysztof Grobelny { 35*b5645947SKrzysztof Grobelny uniqueCallIncrementCounter(); 36*b5645947SKrzysztof Grobelny } 37*b5645947SKrzysztof Grobelny 38*b5645947SKrzysztof Grobelny ASSERT_THAT(counter, Eq(3u)); 39*b5645947SKrzysztof Grobelny } 40*b5645947SKrzysztof Grobelny 41*b5645947SKrzysztof Grobelny TEST_F(TestUniqueCall, shouldNotExecuteWhenPreviousExecutionIsStillActive) 42*b5645947SKrzysztof Grobelny { 43*b5645947SKrzysztof Grobelny for (size_t i = 0; i < 3u; ++i) 44*b5645947SKrzysztof Grobelny { 45*b5645947SKrzysztof Grobelny uniqueCallWhileUniqueCallIsActiveIncrementCounter(); 46*b5645947SKrzysztof Grobelny } 47*b5645947SKrzysztof Grobelny 48*b5645947SKrzysztof Grobelny ASSERT_THAT(counter, Eq(3u)); 49*b5645947SKrzysztof Grobelny } 50*b5645947SKrzysztof Grobelny 51*b5645947SKrzysztof Grobelny } // namespace utils 52