mirror of
https://github.com/libSDL2pp/libSDL2pp.git
synced 2025-09-09 15:28:29 -04:00
Added PollEvent(T eventHandler)
This commit is contained in:
parent
088eaa873c
commit
78cc589fc9
@ -26,6 +26,18 @@
|
|||||||
|
|
||||||
namespace SDL2pp {
|
namespace SDL2pp {
|
||||||
bool PollEvent();
|
bool PollEvent();
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
bool PollEvent(T& eventHandler) {
|
||||||
|
SDL_Event event;
|
||||||
|
if (!SDL_PollEvent(&event)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
eventHandler(event);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -5,7 +5,10 @@
|
|||||||
|
|
||||||
#include "testing.h"
|
#include "testing.h"
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
using namespace SDL2pp;
|
using namespace SDL2pp;
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
inline SDL_Event PushUserEvent(Sint32 userCode = 0, void *data1 = nullptr, void *data2 = nullptr) {
|
inline SDL_Event PushUserEvent(Sint32 userCode = 0, void *data1 = nullptr, void *data2 = nullptr) {
|
||||||
SDL_Event event;
|
SDL_Event event;
|
||||||
@ -21,6 +24,22 @@ inline SDL_Event PushUserEvent(Sint32 userCode = 0, void *data1 = nullptr, void
|
|||||||
return event;
|
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*[])
|
BEGIN_TEST(int, char*[])
|
||||||
// With no callback and no polled event
|
// With no callback and no polled event
|
||||||
{
|
{
|
||||||
@ -34,4 +53,62 @@ BEGIN_TEST(int, char*[])
|
|||||||
EXPECT_TRUE(PollEvent() == true);
|
EXPECT_TRUE(PollEvent() == true);
|
||||||
EXPECT_TRUE(PollEvent() == false);
|
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()
|
END_TEST()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user