Added PollEvent(T eventHandler)

This commit is contained in:
Vraiment 2017-07-15 18:39:48 -07:00
parent 088eaa873c
commit 78cc589fc9
2 changed files with 89 additions and 0 deletions

View File

@ -26,6 +26,18 @@
namespace SDL2pp {
bool PollEvent();
template <typename T>
bool PollEvent(T& eventHandler) {
SDL_Event event;
if (!SDL_PollEvent(&event)) {
return false;
}
eventHandler(event);
return true;
}
}
#endif

View File

@ -5,7 +5,10 @@
#include "testing.h"
#include <vector>
using namespace SDL2pp;
using namespace std;
inline SDL_Event PushUserEvent(Sint32 userCode = 0, void *data1 = nullptr, void *data2 = nullptr) {
SDL_Event event;
@ -21,6 +24,22 @@ inline SDL_Event PushUserEvent(Sint32 userCode = 0, void *data1 = nullptr, void
return event;
}
namespace StaticEventHandler {
vector<SDL_Event> events;
inline void EventHandler(const SDL_Event& event) {
events.push_back(event);
}
}
struct CallableEventHandler {
vector<SDL_Event> events;
void operator()(const SDL_Event& event) {
events.push_back(event);
}
};
BEGIN_TEST(int, char*[])
// With no callback and no polled event
{
@ -34,4 +53,62 @@ BEGIN_TEST(int, char*[])
EXPECT_TRUE(PollEvent() == true);
EXPECT_TRUE(PollEvent() == false);
}
// With function as an event handler
{
StaticEventHandler::events.clear();
const SDL_Event expected = PushUserEvent(15);
EXPECT_TRUE(PollEvent(StaticEventHandler::EventHandler) == true);
EXPECT_TRUE(StaticEventHandler::events.size() == 1);
const SDL_Event result = StaticEventHandler::events[0];
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() == 1);
}
// With lambda as an event handler
{
vector<SDL_Event> events;
auto eventHandler = [&events](const SDL_Event& event) {
events.push_back(event);
};
const SDL_Event expectedEvent = PushUserEvent(22);
EXPECT_TRUE(PollEvent(eventHandler) == true);
EXPECT_TRUE(events.size() == 1);
const SDL_Event result = events[0];
EXPECT_TRUE(result.type == expectedEvent.type);
EXPECT_TRUE(result.user.code == expectedEvent.user.code);
// Verify no further events
EXPECT_TRUE(PollEvent(eventHandler) == false);
EXPECT_TRUE(events.size() == 1);
}
// With callable object
{
CallableEventHandler eventHandler;
const SDL_Event expectedEvent = PushUserEvent(45);
EXPECT_TRUE(PollEvent(eventHandler) == true);
EXPECT_TRUE(eventHandler.events.size() == 1);
const SDL_Event result = eventHandler.events[0];
EXPECT_TRUE(result.type == expectedEvent.type);
EXPECT_TRUE(result.user.code == expectedEvent.user.code);
// Verify no further events
EXPECT_TRUE(PollEvent(eventHandler) == false);
EXPECT_TRUE(eventHandler.events.size() == 1);
}
END_TEST()