From ce876eaa6d38845c0df04c7be5d0561b4fa6b62c Mon Sep 17 00:00:00 2001 From: Vraiment Date: Sat, 15 Jul 2017 19:25:10 -0700 Subject: [PATCH] Added PollAllEvents(T eventHandler) --- SDL2pp/EventPolling.hh | 7 ++++ tests/test_eventpolling.cc | 81 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+) diff --git a/SDL2pp/EventPolling.hh b/SDL2pp/EventPolling.hh index 1b13ede..40cff9a 100644 --- a/SDL2pp/EventPolling.hh +++ b/SDL2pp/EventPolling.hh @@ -40,6 +40,13 @@ namespace SDL2pp { } int PollAllEvents(); + + template + int PollAllEvents(T& eventHandler) { + int result; + for (result = 0; PollEvent(eventHandler); result++); + return result; + } } #endif diff --git a/tests/test_eventpolling.cc b/tests/test_eventpolling.cc index efd0945..3983a06 100644 --- a/tests/test_eventpolling.cc +++ b/tests/test_eventpolling.cc @@ -128,4 +128,85 @@ BEGIN_TEST(int, char*[]) // Verify no further events EXPECT_TRUE(PollEvent() == false); } + + // With function as an event handler + { + StaticEventHandler::events.clear(); + + vector expectedEvents; + for (const auto eventCode : { 15, 32, 99, 85 }) { + expectedEvents.push_back(PushUserEvent(eventCode)); + } + int totalExpectedEvents = static_cast(expectedEvents.size()); + + EXPECT_TRUE(PollAllEvents(StaticEventHandler::EventHandler) == totalExpectedEvents); + EXPECT_TRUE(StaticEventHandler::events.size() == expectedEvents.size()); + + for (int n = 0; n < totalExpectedEvents; n++) { + const SDL_Event result = StaticEventHandler::events[n]; + const SDL_Event expected = expectedEvents[n]; + + EXPECT_TRUE(result.type == expected.type); + EXPECT_TRUE(result.user.code == expected.user.code); + } + + // Verify no further events + EXPECT_TRUE(PollEvent(StaticEventHandler::EventHandler) == false); + EXPECT_TRUE(StaticEventHandler::events.size() == expectedEvents.size()); + } + + // With lambda as an event handler + { + vector handledEvents; + auto eventHandler = [&handledEvents](const SDL_Event& event) { + handledEvents.push_back(event); + }; + + vector expectedEvents; + for (const auto eventCode : { 37, 88, 42, 63, 23, 19 }) { + expectedEvents.push_back(PushUserEvent(eventCode)); + } + int totalExpectedEvents = static_cast(expectedEvents.size()); + + EXPECT_TRUE(PollAllEvents(eventHandler) == totalExpectedEvents); + EXPECT_TRUE(handledEvents.size() == expectedEvents.size()); + + for (int n = 0; n < totalExpectedEvents; n++) { + const SDL_Event result = handledEvents[n]; + const SDL_Event expected = expectedEvents[n]; + + EXPECT_TRUE(result.type == expected.type); + EXPECT_TRUE(result.user.code == expected.user.code); + } + + // Verify no further events + EXPECT_TRUE(PollEvent(eventHandler) == false); + EXPECT_TRUE(handledEvents.size() == expectedEvents.size()); + } + + // With callable object as an event handler + { + CallableEventHandler eventHandler; + + vector expectedEvents; + for (const auto eventCode : { 11, 98, 62, 35, 71 }) { + expectedEvents.push_back(PushUserEvent(eventCode)); + } + int totalExpectedEvents = static_cast(expectedEvents.size()); + + EXPECT_TRUE(PollAllEvents(eventHandler) == totalExpectedEvents); + EXPECT_TRUE(eventHandler.events.size() == expectedEvents.size()); + + for (int n = 0; n < totalExpectedEvents; n++) { + const SDL_Event result = eventHandler.events[n]; + const SDL_Event expected = expectedEvents[n]; + + EXPECT_TRUE(result.type == expected.type); + EXPECT_TRUE(result.user.code == expected.user.code); + } + + // Verify no further events + EXPECT_TRUE(PollEvent(eventHandler) == false); + EXPECT_TRUE(eventHandler.events.size() == expectedEvents.size()); + } END_TEST()