2023-11-18 10:50:16 -05:00
/**
* Events test suite
*/
2024-07-21 17:06:25 -04:00
# include <stdio.h>
# include "SDL.h"
# include "SDL_test.h"
2023-11-18 10:50:16 -05:00
/* ================= Test Case Implementation ================== */
/* Test case functions */
/* Flag indicating if the userdata should be checked */
2024-07-21 17:06:25 -04:00
int _userdataCheck = 0 ;
2023-11-18 10:50:16 -05:00
/* Userdata value to check */
2024-07-21 17:06:25 -04:00
int _userdataValue = 0 ;
2023-11-18 10:50:16 -05:00
/* Flag indicating that the filter was called */
2024-07-21 17:06:25 -04:00
int _eventFilterCalled = 0 ;
2023-11-18 10:50:16 -05:00
/* Userdata values for event */
2024-07-21 17:06:25 -04:00
int _userdataValue1 = 1 ;
int _userdataValue2 = 2 ;
2023-11-18 10:50:16 -05:00
/* Event filter that sets some flags and optionally checks userdata */
2024-07-21 17:06:25 -04:00
int SDLCALL _events_sampleNullEventFilter ( void * userdata , SDL_Event * event )
2023-11-18 10:50:16 -05:00
{
2024-07-21 17:06:25 -04:00
_eventFilterCalled = 1 ;
2023-11-18 10:50:16 -05:00
2024-07-21 17:06:25 -04:00
if ( _userdataCheck ! = 0 ) {
2023-11-18 10:50:16 -05:00
SDLTest_AssertCheck ( userdata ! = NULL , " Check userdata pointer, expected: non-NULL, got: %s " , ( userdata ! = NULL ) ? " non-NULL " : " NULL " ) ;
if ( userdata ! = NULL ) {
2024-07-21 17:06:25 -04:00
SDLTest_AssertCheck ( * ( int * ) userdata = = _userdataValue , " Check userdata value, expected: %i, got: %i " , _userdataValue , * ( int * ) userdata ) ;
2023-11-18 10:50:16 -05:00
}
}
return 0 ;
}
/**
2024-07-21 17:06:25 -04:00
* @ brief Test pumping and peeking events .
2023-11-18 10:50:16 -05:00
*
2024-07-21 17:06:25 -04:00
* @ sa http : //wiki.libsdl.org/SDL_PumpEvents
* @ sa http : //wiki.libsdl.org/SDL_PollEvent
2023-11-18 10:50:16 -05:00
*/
2024-07-21 17:06:25 -04:00
int events_pushPumpAndPollUserevent ( void * arg )
2023-11-18 10:50:16 -05:00
{
SDL_Event event1 ;
SDL_Event event2 ;
int result ;
/* Create user event */
2024-07-21 17:06:25 -04:00
event1 . type = SDL_USEREVENT ;
2023-11-18 10:50:16 -05:00
event1 . user . code = SDLTest_RandomSint32 ( ) ;
2024-07-21 17:06:25 -04:00
event1 . user . data1 = ( void * ) & _userdataValue1 ;
event1 . user . data2 = ( void * ) & _userdataValue2 ;
2023-11-18 10:50:16 -05:00
/* 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 ) ;
/* Need to finish getting all events and sentinel, otherwise other tests that rely on event are in bad state */
while ( SDL_PollEvent ( & event2 ) ) {
}
return TEST_COMPLETED ;
}
/**
2024-07-21 17:06:25 -04:00
* @ brief Adds and deletes an event watch function with NULL userdata
2023-11-18 10:50:16 -05:00
*
2024-07-21 17:06:25 -04:00
* @ sa http : //wiki.libsdl.org/SDL_AddEventWatch
* @ sa http : //wiki.libsdl.org/SDL_DelEventWatch
2023-11-18 10:50:16 -05:00
*
*/
2024-07-21 17:06:25 -04:00
int events_addDelEventWatch ( void * arg )
2023-11-18 10:50:16 -05:00
{
SDL_Event event ;
/* Create user event */
2024-07-21 17:06:25 -04:00
event . type = SDL_USEREVENT ;
2023-11-18 10:50:16 -05:00
event . user . code = SDLTest_RandomSint32 ( ) ;
2024-07-21 17:06:25 -04:00
event . user . data1 = ( void * ) & _userdataValue1 ;
event . user . data2 = ( void * ) & _userdataValue2 ;
2023-11-18 10:50:16 -05:00
/* Disable userdata check */
2024-07-21 17:06:25 -04:00
_userdataCheck = 0 ;
2023-11-18 10:50:16 -05:00
/* Reset event filter call tracker */
2024-07-21 17:06:25 -04:00
_eventFilterCalled = 0 ;
2023-11-18 10:50:16 -05:00
/* Add watch */
2024-07-21 17:06:25 -04:00
SDL_AddEventWatch ( _events_sampleNullEventFilter , NULL ) ;
2023-11-18 10:50:16 -05:00
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() " ) ;
2024-07-21 17:06:25 -04:00
SDLTest_AssertCheck ( _eventFilterCalled = = 1 , " Check that event filter was called " ) ;
2023-11-18 10:50:16 -05:00
/* Delete watch */
2024-07-21 17:06:25 -04:00
SDL_DelEventWatch ( _events_sampleNullEventFilter , NULL ) ;
2023-11-18 10:50:16 -05:00
SDLTest_AssertPass ( " Call to SDL_DelEventWatch() " ) ;
/* Push a user event onto the queue and force queue update */
2024-07-21 17:06:25 -04:00
_eventFilterCalled = 0 ;
2023-11-18 10:50:16 -05:00
SDL_PushEvent ( & event ) ;
SDLTest_AssertPass ( " Call to SDL_PushEvent() " ) ;
SDL_PumpEvents ( ) ;
SDLTest_AssertPass ( " Call to SDL_PumpEvents() " ) ;
2024-07-21 17:06:25 -04:00
SDLTest_AssertCheck ( _eventFilterCalled = = 0 , " Check that event filter was NOT called " ) ;
2023-11-18 10:50:16 -05:00
return TEST_COMPLETED ;
}
/**
2024-07-21 17:06:25 -04:00
* @ brief Adds and deletes an event watch function with userdata
2023-11-18 10:50:16 -05:00
*
2024-07-21 17:06:25 -04:00
* @ sa http : //wiki.libsdl.org/SDL_AddEventWatch
* @ sa http : //wiki.libsdl.org/SDL_DelEventWatch
2023-11-18 10:50:16 -05:00
*
*/
2024-07-21 17:06:25 -04:00
int events_addDelEventWatchWithUserdata ( void * arg )
2023-11-18 10:50:16 -05:00
{
SDL_Event event ;
/* Create user event */
2024-07-21 17:06:25 -04:00
event . type = SDL_USEREVENT ;
2023-11-18 10:50:16 -05:00
event . user . code = SDLTest_RandomSint32 ( ) ;
2024-07-21 17:06:25 -04:00
event . user . data1 = ( void * ) & _userdataValue1 ;
event . user . data2 = ( void * ) & _userdataValue2 ;
2023-11-18 10:50:16 -05:00
/* Enable userdata check and set a value to check */
2024-07-21 17:06:25 -04:00
_userdataCheck = 1 ;
_userdataValue = SDLTest_RandomIntegerInRange ( - 1024 , 1024 ) ;
2023-11-18 10:50:16 -05:00
/* Reset event filter call tracker */
2024-07-21 17:06:25 -04:00
_eventFilterCalled = 0 ;
2023-11-18 10:50:16 -05:00
/* Add watch */
2024-07-21 17:06:25 -04:00
SDL_AddEventWatch ( _events_sampleNullEventFilter , ( void * ) & _userdataValue ) ;
2023-11-18 10:50:16 -05:00
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() " ) ;
2024-07-21 17:06:25 -04:00
SDLTest_AssertCheck ( _eventFilterCalled = = 1 , " Check that event filter was called " ) ;
2023-11-18 10:50:16 -05:00
/* Delete watch */
2024-07-21 17:06:25 -04:00
SDL_DelEventWatch ( _events_sampleNullEventFilter , ( void * ) & _userdataValue ) ;
2023-11-18 10:50:16 -05:00
SDLTest_AssertPass ( " Call to SDL_DelEventWatch() " ) ;
/* Push a user event onto the queue and force queue update */
2024-07-21 17:06:25 -04:00
_eventFilterCalled = 0 ;
2023-11-18 10:50:16 -05:00
SDL_PushEvent ( & event ) ;
SDLTest_AssertPass ( " Call to SDL_PushEvent() " ) ;
SDL_PumpEvents ( ) ;
SDLTest_AssertPass ( " Call to SDL_PumpEvents() " ) ;
2024-07-21 17:06:25 -04:00
SDLTest_AssertCheck ( _eventFilterCalled = = 0 , " Check that event filter was NOT called " ) ;
2023-11-18 10:50:16 -05:00
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
} ;