2023-10-13 10:43:18 -06:00
/**
* Events test suite
*/
# include "testautomation_suites.h"
# include <SDL3/SDL.h>
# include <SDL3/SDL_test.h>
/* ================= Test Case Implementation ================== */
/* Fixture */
static void subsystemsSetUp ( void * arg )
{
/* Reset each one of the SDL subsystems */
/* CHECKME: can we use SDL_Quit here, or this will break the flow of tests? */
SDL_Quit ( ) ;
/* Alternate variant without SDL_Quit:
2024-01-18 04:51:56 -07:00
while ( SDL_WasInit ( 0 ) ! = 0 ) {
SDL_QuitSubSystem ( ~ 0U ) ;
2023-10-13 10:43:18 -06:00
}
*/
SDLTest_AssertPass ( " Reset all subsystems before subsystems test " ) ;
2024-01-18 04:51:56 -07:00
SDLTest_AssertCheck ( SDL_WasInit ( 0 ) = = 0 , " Check result from SDL_WasInit(0) " ) ;
2023-10-13 10:43:18 -06:00
}
static void subsystemsTearDown ( void * arg )
{
/* Reset each one of the SDL subsystems */
SDL_Quit ( ) ;
SDLTest_AssertPass ( " Cleanup of subsystems test completed " ) ;
}
/* Test case functions */
/**
2023-11-06 08:26:06 -07:00
* Inits and Quits particular subsystem , checking its Init status .
2023-10-13 10:43:18 -06:00
*
* \ sa SDL_InitSubSystem
* \ sa SDL_QuitSubSystem
*
*/
static int subsystems_referenceCount ( )
{
const int system = SDL_INIT_VIDEO ;
int result ;
/* Ensure that we start with a non-initialized subsystem. */
SDLTest_AssertCheck ( SDL_WasInit ( system ) = = 0 , " Check result from SDL_WasInit(0x%x) " , system ) ;
/* Init subsystem once, and quit once */
SDL_InitSubSystem ( system ) ;
SDLTest_AssertPass ( " Call to SDL_InitSubSystem(0x%x) " , system ) ;
result = SDL_WasInit ( system ) ;
SDLTest_AssertCheck ( result = = system , " Check result from SDL_WasInit(0x%x), expected: 0x%x, got: 0x%x " , system , system , result ) ;
SDL_QuitSubSystem ( system ) ;
SDLTest_AssertPass ( " Call to SDL_QuitSubSystem(0x%x) " , system ) ;
result = SDL_WasInit ( system ) ;
SDLTest_AssertCheck ( result = = 0 , " Check result from SDL_WasInit(0x%x), expected: 0, got: 0x%x " , system , result ) ;
/* Init subsystem number of times, then decrement reference count until it's disposed of. */
SDL_InitSubSystem ( system ) ;
SDL_InitSubSystem ( system ) ;
SDL_InitSubSystem ( system ) ;
SDLTest_AssertPass ( " Call to SDL_InitSubSystem(0x%x) x3 times " , system ) ;
result = SDL_WasInit ( system ) ;
SDLTest_AssertCheck ( result = = system , " Check result from SDL_WasInit(0x%x), expected: 0x%x, got: 0x%x " , system , system , result ) ;
SDL_QuitSubSystem ( system ) ;
SDLTest_AssertPass ( " Call to SDL_QuitSubSystem(0x%x) x1 " , system ) ;
result = SDL_WasInit ( system ) ;
SDLTest_AssertCheck ( result = = system , " Check result from SDL_WasInit(0x%x), expected: 0x%x, got: 0x%x " , system , system , result ) ;
SDL_QuitSubSystem ( system ) ;
SDLTest_AssertPass ( " Call to SDL_QuitSubSystem(0x%x) x2 " , system ) ;
result = SDL_WasInit ( system ) ;
SDLTest_AssertCheck ( result = = system , " Check result from SDL_WasInit(0x%x), expected: 0x%x, got: 0x%x " , system , system , result ) ;
SDL_QuitSubSystem ( system ) ;
SDLTest_AssertPass ( " Call to SDL_QuitSubSystem(0x%x) x3 " , system ) ;
result = SDL_WasInit ( system ) ;
SDLTest_AssertCheck ( result = = 0 , " Check result from SDL_WasInit(0x%x), expected: 0, got: 0x%x " , system , result ) ;
return TEST_COMPLETED ;
}
/**
2023-11-06 08:26:06 -07:00
* Inits and Quits subsystems that have another as dependency ;
2023-10-13 10:43:18 -06:00
* check that the dependency is not removed before the last of its dependents .
*
* \ sa SDL_InitSubSystem
* \ sa SDL_QuitSubSystem
*
*/
static int subsystems_dependRefCountInitAllQuitByOne ( )
{
int result ;
/* Ensure that we start with reset subsystems. */
SDLTest_AssertCheck ( SDL_WasInit ( SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK | SDL_INIT_EVENTS ) = = 0 ,
" Check result from SDL_WasInit(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK | SDL_INIT_EVENTS) " ) ;
/* Following should init SDL_INIT_EVENTS and give it +3 ref counts. */
SDL_InitSubSystem ( SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK ) ;
SDLTest_AssertPass ( " Call to SDL_InitSubSystem(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK) " ) ;
result = SDL_WasInit ( SDL_INIT_EVENTS ) ;
SDLTest_AssertCheck ( result = = SDL_INIT_EVENTS , " Check result from SDL_WasInit(SDL_INIT_EVENTS), expected: 0x4000, got: 0x%x " , result ) ;
/* Quit systems one by one. */
SDL_QuitSubSystem ( SDL_INIT_VIDEO ) ;
SDLTest_AssertPass ( " Call to SDL_QuitSubSystem(SDL_INIT_VIDEO) " ) ;
result = SDL_WasInit ( SDL_INIT_EVENTS ) ;
SDLTest_AssertCheck ( result = = SDL_INIT_EVENTS , " Check result from SDL_WasInit(SDL_INIT_EVENTS), expected: 0x4000, got: 0x%x " , result ) ;
SDL_QuitSubSystem ( SDL_INIT_AUDIO ) ;
SDLTest_AssertPass ( " Call to SDL_QuitSubSystem(SDL_INIT_AUDIO) " ) ;
result = SDL_WasInit ( SDL_INIT_EVENTS ) ;
SDLTest_AssertCheck ( result = = SDL_INIT_EVENTS , " Check result from SDL_WasInit(SDL_INIT_EVENTS), expected: 0x4000, got: 0x%x " , result ) ;
SDL_QuitSubSystem ( SDL_INIT_JOYSTICK ) ;
SDLTest_AssertPass ( " Call to SDL_QuitSubSystem(SDL_INIT_JOYSTICK) " ) ;
result = SDL_WasInit ( SDL_INIT_EVENTS ) ;
SDLTest_AssertCheck ( result = = 0 , " Check result from SDL_WasInit(SDL_INIT_EVENTS), expected: 0, got: 0x%x " , result ) ;
return TEST_COMPLETED ;
}
/**
2023-11-06 08:26:06 -07:00
* Inits and Quits subsystems that have another as dependency ;
2023-10-13 10:43:18 -06:00
* check that the dependency is not removed before the last of its dependents .
*
* \ sa SDL_InitSubSystem
* \ sa SDL_QuitSubSystem
*
*/
static int subsystems_dependRefCountInitByOneQuitAll ( )
{
int result ;
/* Ensure that we start with reset subsystems. */
SDLTest_AssertCheck ( SDL_WasInit ( SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK | SDL_INIT_EVENTS ) = = 0 ,
" Check result from SDL_WasInit(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK | SDL_INIT_EVENTS) " ) ;
/* Following should init SDL_INIT_EVENTS and give it +3 ref counts. */
SDL_InitSubSystem ( SDL_INIT_VIDEO ) ;
SDLTest_AssertPass ( " Call to SDL_InitSubSystem(SDL_INIT_VIDEO) " ) ;
result = SDL_WasInit ( SDL_INIT_EVENTS ) ;
SDLTest_AssertCheck ( result = = SDL_INIT_EVENTS , " Check result from SDL_WasInit(SDL_INIT_EVENTS), expected: 0x4000, got: 0x%x " , result ) ;
SDL_InitSubSystem ( SDL_INIT_AUDIO ) ;
SDLTest_AssertPass ( " Call to SDL_InitSubSystem(SDL_INIT_AUDIO) " ) ;
SDL_InitSubSystem ( SDL_INIT_JOYSTICK ) ;
SDLTest_AssertPass ( " Call to SDL_InitSubSystem(SDL_INIT_JOYSTICK) " ) ;
/* Quit systems all at once. */
SDL_QuitSubSystem ( SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK ) ;
SDLTest_AssertPass ( " Call to SDL_QuitSubSystem(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK) " ) ;
result = SDL_WasInit ( SDL_INIT_EVENTS ) ;
SDLTest_AssertCheck ( result = = 0 , " Check result from SDL_WasInit(SDL_INIT_EVENTS), expected: 0, got: 0x%x " , result ) ;
return TEST_COMPLETED ;
}
/**
2023-11-06 08:26:06 -07:00
* Inits and Quits subsystems that have another as dependency ,
2023-10-13 10:43:18 -06:00
* but also inits that dependency explicitly , giving it extra ref count .
* Check that the dependency is not removed before the last reference is gone .
*
* \ sa SDL_InitSubSystem
* \ sa SDL_QuitSubSystem
*
*/
static int subsystems_dependRefCountWithExtraInit ( )
{
int result ;
/* Ensure that we start with reset subsystems. */
SDLTest_AssertCheck ( SDL_WasInit ( SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK | SDL_INIT_EVENTS ) = = 0 ,
" Check result from SDL_WasInit(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK | SDL_INIT_EVENTS) " ) ;
/* Init EVENTS explicitly, +1 ref count. */
SDL_InitSubSystem ( SDL_INIT_EVENTS ) ;
SDLTest_AssertPass ( " Call to SDL_InitSubSystem(SDL_INIT_EVENTS) " ) ;
result = SDL_WasInit ( SDL_INIT_EVENTS ) ;
SDLTest_AssertCheck ( result = = SDL_INIT_EVENTS , " Check result from SDL_WasInit(SDL_INIT_EVENTS), expected: 0x4000, got: 0x%x " , result ) ;
/* Following should init SDL_INIT_EVENTS and give it +3 ref counts. */
SDL_InitSubSystem ( SDL_INIT_VIDEO ) ;
SDLTest_AssertPass ( " Call to SDL_InitSubSystem(SDL_INIT_VIDEO) " ) ;
SDL_InitSubSystem ( SDL_INIT_AUDIO ) ;
SDLTest_AssertPass ( " Call to SDL_InitSubSystem(SDL_INIT_AUDIO) " ) ;
SDL_InitSubSystem ( SDL_INIT_JOYSTICK ) ;
SDLTest_AssertPass ( " Call to SDL_InitSubSystem(SDL_INIT_JOYSTICK) " ) ;
/* Quit EVENTS explicitly, -1 ref count. */
SDL_QuitSubSystem ( SDL_INIT_EVENTS ) ;
SDLTest_AssertPass ( " Call to SDL_QuitSubSystem(SDL_INIT_EVENTS) " ) ;
result = SDL_WasInit ( SDL_INIT_EVENTS ) ;
SDLTest_AssertCheck ( result = = SDL_INIT_EVENTS , " Check result from SDL_WasInit(SDL_INIT_EVENTS), expected: 0x4000, got: 0x%x " , result ) ;
/* Quit systems one by one. */
SDL_QuitSubSystem ( SDL_INIT_VIDEO ) ;
SDLTest_AssertPass ( " Call to SDL_QuitSubSystem(SDL_INIT_VIDEO) " ) ;
result = SDL_WasInit ( SDL_INIT_EVENTS ) ;
SDLTest_AssertCheck ( result = = SDL_INIT_EVENTS , " Check result from SDL_WasInit(SDL_INIT_EVENTS), expected: 0x4000, got: 0x%x " , result ) ;
SDL_QuitSubSystem ( SDL_INIT_AUDIO ) ;
SDLTest_AssertPass ( " Call to SDL_QuitSubSystem(SDL_INIT_AUDIO) " ) ;
result = SDL_WasInit ( SDL_INIT_EVENTS ) ;
SDLTest_AssertCheck ( result = = SDL_INIT_EVENTS , " Check result from SDL_WasInit(SDL_INIT_EVENTS), expected: 0x4000, got: 0x%x " , result ) ;
SDL_QuitSubSystem ( SDL_INIT_JOYSTICK ) ;
SDLTest_AssertPass ( " Call to SDL_QuitSubSystem(SDL_INIT_JOYSTICK) " ) ;
result = SDL_WasInit ( SDL_INIT_EVENTS ) ;
SDLTest_AssertCheck ( result = = 0 , " Check result from SDL_WasInit(SDL_INIT_EVENTS), expected: 0, got: 0x%x " , result ) ;
return TEST_COMPLETED ;
}
/* ================= Test References ================== */
/* Subsystems test cases */
static const SDLTest_TestCaseReference subsystemsTest1 = {
( SDLTest_TestCaseFp ) subsystems_referenceCount , " subsystems_referenceCount " , " Makes sure that subsystem stays until number of quits matches inits. " , TEST_ENABLED
} ;
static const SDLTest_TestCaseReference subsystemsTest2 = {
( SDLTest_TestCaseFp ) subsystems_dependRefCountInitAllQuitByOne , " subsystems_dependRefCountInitAllQuitByOne " , " Check reference count of subsystem dependencies. " , TEST_ENABLED
} ;
static const SDLTest_TestCaseReference subsystemsTest3 = {
( SDLTest_TestCaseFp ) subsystems_dependRefCountInitByOneQuitAll , " subsystems_dependRefCountInitByOneQuitAll " , " Check reference count of subsystem dependencies. " , TEST_ENABLED
} ;
static const SDLTest_TestCaseReference subsystemsTest4 = {
( SDLTest_TestCaseFp ) subsystems_dependRefCountWithExtraInit , " subsystems_dependRefCountWithExtraInit " , " Check reference count of subsystem dependencies. " , TEST_ENABLED
} ;
/* Sequence of Events test cases */
static const SDLTest_TestCaseReference * subsystemsTests [ ] = {
& subsystemsTest1 , & subsystemsTest2 , & subsystemsTest3 , & subsystemsTest4 , NULL
} ;
/* Events test suite (global) */
SDLTest_TestSuiteReference subsystemsTestSuite = {
" Subsystems " ,
subsystemsSetUp ,
subsystemsTests ,
subsystemsTearDown
} ;