You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
201 lines
6.0 KiB
201 lines
6.0 KiB
/** |
|
* Events test suite |
|
*/ |
|
|
|
#include <stdio.h> |
|
|
|
#include "SDL.h" |
|
#include "SDL_test.h" |
|
|
|
/* ================= Test Case Implementation ================== */ |
|
|
|
/* Test case functions */ |
|
|
|
/* Flag indicating if the userdata should be checked */ |
|
int _userdataCheck = 0; |
|
|
|
/* Userdata value to check */ |
|
int _userdataValue = 0; |
|
|
|
/* Flag indicating that the filter was called */ |
|
int _eventFilterCalled = 0; |
|
|
|
/* Userdata values for event */ |
|
int _userdataValue1 = 1; |
|
int _userdataValue2 = 2; |
|
|
|
/* Event filter that sets some flags and optionally checks userdata */ |
|
int SDLCALL _events_sampleNullEventFilter(void *userdata, SDL_Event *event) |
|
{ |
|
_eventFilterCalled = 1; |
|
|
|
if (_userdataCheck != 0) { |
|
SDLTest_AssertCheck(userdata != NULL, "Check userdata pointer, expected: non-NULL, got: %s", (userdata != NULL) ? "non-NULL" : "NULL"); |
|
if (userdata != NULL) { |
|
SDLTest_AssertCheck(*(int *)userdata == _userdataValue, "Check userdata value, expected: %i, got: %i", _userdataValue, *(int *)userdata); |
|
} |
|
} |
|
|
|
return 0; |
|
} |
|
|
|
/** |
|
* @brief Test pumping and peeking events. |
|
* |
|
* @sa http://wiki.libsdl.org/moin.cgi/SDL_PumpEvents |
|
* @sa http://wiki.libsdl.org/moin.cgi/SDL_PollEvent |
|
*/ |
|
int |
|
events_pushPumpAndPollUserevent(void *arg) |
|
{ |
|
SDL_Event event1; |
|
SDL_Event event2; |
|
int result; |
|
|
|
/* Create user event */ |
|
event1.type = SDL_USEREVENT; |
|
event1.user.code = SDLTest_RandomSint32(); |
|
event1.user.data1 = (void *)&_userdataValue1; |
|
event1.user.data2 = (void *)&_userdataValue2; |
|
|
|
/* Push a user event onto the queue and force queue update */ |
|
SDL_PushEvent(&event1); |
|
SDLTest_AssertPass("Call to SDL_PushEvent()"); |
|
SDL_PumpEvents(); |
|
SDLTest_AssertPass("Call to SDL_PumpEvents()"); |
|
|
|
/* Poll for user event */ |
|
result = SDL_PollEvent(&event2); |
|
SDLTest_AssertPass("Call to SDL_PollEvent()"); |
|
SDLTest_AssertCheck(result == 1, "Check result from SDL_PollEvent, expected: 1, got: %d", result); |
|
|
|
return TEST_COMPLETED; |
|
} |
|
|
|
|
|
/** |
|
* @brief Adds and deletes an event watch function with NULL userdata |
|
* |
|
* @sa http://wiki.libsdl.org/moin.cgi/SDL_AddEventWatch |
|
* @sa http://wiki.libsdl.org/moin.cgi/SDL_DelEventWatch |
|
* |
|
*/ |
|
int |
|
events_addDelEventWatch(void *arg) |
|
{ |
|
SDL_Event event; |
|
|
|
/* Create user event */ |
|
event.type = SDL_USEREVENT; |
|
event.user.code = SDLTest_RandomSint32(); |
|
event.user.data1 = (void *)&_userdataValue1; |
|
event.user.data2 = (void *)&_userdataValue2; |
|
|
|
/* Disable userdata check */ |
|
_userdataCheck = 0; |
|
|
|
/* Reset event filter call tracker */ |
|
_eventFilterCalled = 0; |
|
|
|
/* Add watch */ |
|
SDL_AddEventWatch(_events_sampleNullEventFilter, NULL); |
|
SDLTest_AssertPass("Call to SDL_AddEventWatch()"); |
|
|
|
/* Push a user event onto the queue and force queue update */ |
|
SDL_PushEvent(&event); |
|
SDLTest_AssertPass("Call to SDL_PushEvent()"); |
|
SDL_PumpEvents(); |
|
SDLTest_AssertPass("Call to SDL_PumpEvents()"); |
|
SDLTest_AssertCheck(_eventFilterCalled == 1, "Check that event filter was called"); |
|
|
|
/* Delete watch */ |
|
SDL_DelEventWatch(_events_sampleNullEventFilter, NULL); |
|
SDLTest_AssertPass("Call to SDL_DelEventWatch()"); |
|
|
|
/* Push a user event onto the queue and force queue update */ |
|
_eventFilterCalled = 0; |
|
SDL_PushEvent(&event); |
|
SDLTest_AssertPass("Call to SDL_PushEvent()"); |
|
SDL_PumpEvents(); |
|
SDLTest_AssertPass("Call to SDL_PumpEvents()"); |
|
SDLTest_AssertCheck(_eventFilterCalled == 0, "Check that event filter was NOT called"); |
|
|
|
return TEST_COMPLETED; |
|
} |
|
|
|
/** |
|
* @brief Adds and deletes an event watch function with userdata |
|
* |
|
* @sa http://wiki.libsdl.org/moin.cgi/SDL_AddEventWatch |
|
* @sa http://wiki.libsdl.org/moin.cgi/SDL_DelEventWatch |
|
* |
|
*/ |
|
int |
|
events_addDelEventWatchWithUserdata(void *arg) |
|
{ |
|
SDL_Event event; |
|
|
|
/* Create user event */ |
|
event.type = SDL_USEREVENT; |
|
event.user.code = SDLTest_RandomSint32(); |
|
event.user.data1 = (void *)&_userdataValue1; |
|
event.user.data2 = (void *)&_userdataValue2; |
|
|
|
/* Enable userdata check and set a value to check */ |
|
_userdataCheck = 1; |
|
_userdataValue = SDLTest_RandomIntegerInRange(-1024, 1024); |
|
|
|
/* Reset event filter call tracker */ |
|
_eventFilterCalled = 0; |
|
|
|
/* Add watch */ |
|
SDL_AddEventWatch(_events_sampleNullEventFilter, (void *)&_userdataValue); |
|
SDLTest_AssertPass("Call to SDL_AddEventWatch()"); |
|
|
|
/* Push a user event onto the queue and force queue update */ |
|
SDL_PushEvent(&event); |
|
SDLTest_AssertPass("Call to SDL_PushEvent()"); |
|
SDL_PumpEvents(); |
|
SDLTest_AssertPass("Call to SDL_PumpEvents()"); |
|
SDLTest_AssertCheck(_eventFilterCalled == 1, "Check that event filter was called"); |
|
|
|
/* Delete watch */ |
|
SDL_DelEventWatch(_events_sampleNullEventFilter, (void *)&_userdataValue); |
|
SDLTest_AssertPass("Call to SDL_DelEventWatch()"); |
|
|
|
/* Push a user event onto the queue and force queue update */ |
|
_eventFilterCalled = 0; |
|
SDL_PushEvent(&event); |
|
SDLTest_AssertPass("Call to SDL_PushEvent()"); |
|
SDL_PumpEvents(); |
|
SDLTest_AssertPass("Call to SDL_PumpEvents()"); |
|
SDLTest_AssertCheck(_eventFilterCalled == 0, "Check that event filter was NOT called"); |
|
|
|
return TEST_COMPLETED; |
|
} |
|
|
|
|
|
/* ================= Test References ================== */ |
|
|
|
/* Events test cases */ |
|
static const SDLTest_TestCaseReference eventsTest1 = |
|
{ (SDLTest_TestCaseFp)events_pushPumpAndPollUserevent, "events_pushPumpAndPollUserevent", "Pushes, pumps and polls a user event", TEST_ENABLED }; |
|
|
|
static const SDLTest_TestCaseReference eventsTest2 = |
|
{ (SDLTest_TestCaseFp)events_addDelEventWatch, "events_addDelEventWatch", "Adds and deletes an event watch function with NULL userdata", TEST_ENABLED }; |
|
|
|
static const SDLTest_TestCaseReference eventsTest3 = |
|
{ (SDLTest_TestCaseFp)events_addDelEventWatchWithUserdata, "events_addDelEventWatchWithUserdata", "Adds and deletes an event watch function with userdata", TEST_ENABLED }; |
|
|
|
/* Sequence of Events test cases */ |
|
static const SDLTest_TestCaseReference *eventsTests[] = { |
|
&eventsTest1, &eventsTest2, &eventsTest3, NULL |
|
}; |
|
|
|
/* Events test suite (global) */ |
|
SDLTest_TestSuiteReference eventsTestSuite = { |
|
"Events", |
|
NULL, |
|
eventsTests, |
|
NULL |
|
};
|
|
|