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