|
|
- /**
- * 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/SDL_PumpEvents
- * @sa http://wiki.libsdl.org/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/SDL_AddEventWatch
- * @sa http://wiki.libsdl.org/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/SDL_AddEventWatch
- * @sa http://wiki.libsdl.org/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
- };
|