|
- #include <gtest/gtest.h>
-
- #include "../../helper/now_mock.h"
-
- #include <asyncpp.h>
- #include <asyncpp/timer.h>
-
- using namespace ::testing;
- using namespace ::asyncpp;
- using namespace ::asyncpp::timer;
-
- TEST(interval_tests, poll)
- {
- InSequence seq;
- StrictMock<now_mock> m;
- asyncpp::timer::timer t;
- interval i(
- time_point(std::chrono::seconds(10)),
- std::chrono::seconds(5),
- time_point(std::chrono::seconds(30)));
-
- // 30 - 10 = 20
- // 20 / 5 = 4
- // 4 - 1 = 3
- // 3 x Ready
-
- t.make_current();
-
- auto s = as_stream(i);
-
- EXPECT_CALL(m, now)
- .WillOnce(Return(time_point(std::chrono::seconds(0))));
-
- auto r0 = s.poll();
- ASSERT_EQ(result_status::not_ready, r0.status());
-
- EXPECT_CALL(m, now)
- .WillOnce(Return(time_point(std::chrono::seconds(9))));
-
- auto r1 = s.poll();
- ASSERT_EQ(result_status::not_ready, r1.status());
-
- EXPECT_CALL(m, now)
- .WillOnce(Return(time_point(std::chrono::seconds(10))));
-
- auto r2 = s.poll();
- ASSERT_EQ(result_status::ready, r2.status());
-
- EXPECT_CALL(m, now)
- .WillOnce(Return(time_point(std::chrono::seconds(11))));
-
- auto r3 = s.poll();
- ASSERT_EQ(result_status::not_ready, r3.status());
-
- EXPECT_CALL(m, now)
- .WillOnce(Return(time_point(std::chrono::seconds(30))));
-
- auto r4 = s.poll();
- ASSERT_EQ(result_status::ready, r4.status());
-
- EXPECT_CALL(m, now)
- .WillOnce(Return(time_point(std::chrono::seconds(30))));
-
- auto r5 = s.poll();
- ASSERT_EQ(result_status::ready, r5.status());
-
- EXPECT_CALL(m, now)
- .WillOnce(Return(time_point(std::chrono::seconds(30))));
-
- auto r6 = s.poll();
- ASSERT_EQ(result_status::done, r6.status());
- }
|