2016-05-18 05:53:35 +00:00
/**
* Automated SDL subsystems management test .
*
* Written by J <EFBFBD> rgen Tjern <EFBFBD> " jorgenpt "
*
* Released under Public Domain .
*/
# include "SDL.h"
# include "SDL_test.h"
/* !
* \ brief Tests SDL_InitSubSystem ( ) and SDL_QuitSubSystem ( )
* \ sa
2022-11-14 02:25:58 +00:00
* http : //wiki.libsdl.org/SDL_Init
* http : //wiki.libsdl.org/SDL_Quit
2016-05-18 05:53:35 +00:00
*/
2024-02-12 03:10:54 +00:00
static int main_testInitQuitSubSystem ( void * arg )
2016-05-18 05:53:35 +00:00
{
# if defined SDL_JOYSTICK_DISABLED || defined SDL_HAPTIC_DISABLED || defined SDL_GAMECONTROLLER_DISABLED
return TEST_SKIPPED ;
# else
int i ;
int subsystems [ ] = { SDL_INIT_JOYSTICK , SDL_INIT_HAPTIC , SDL_INIT_GAMECONTROLLER } ;
for ( i = 0 ; i < SDL_arraysize ( subsystems ) ; + + i ) {
int initialized_system ;
int subsystem = subsystems [ i ] ;
2024-02-12 03:10:54 +00:00
SDLTest_AssertCheck ( ( SDL_WasInit ( subsystem ) & subsystem ) = = 0 , " SDL_WasInit(%x) before init should be false " , subsystem ) ;
SDLTest_AssertCheck ( SDL_InitSubSystem ( subsystem ) = = 0 , " SDL_InitSubSystem(%x) " , subsystem ) ;
2016-05-18 05:53:35 +00:00
initialized_system = SDL_WasInit ( subsystem ) ;
2024-02-12 03:10:54 +00:00
SDLTest_AssertCheck ( ( initialized_system & subsystem ) ! = 0 , " SDL_WasInit(%x) should be true (%x) " , subsystem , initialized_system ) ;
2016-05-18 05:53:35 +00:00
SDL_QuitSubSystem ( subsystem ) ;
2024-02-12 03:10:54 +00:00
SDLTest_AssertCheck ( ( SDL_WasInit ( subsystem ) & subsystem ) = = 0 , " SDL_WasInit(%x) after shutdown should be false " , subsystem ) ;
2016-05-18 05:53:35 +00:00
}
return TEST_COMPLETED ;
# endif
}
const int joy_and_controller = SDL_INIT_JOYSTICK | SDL_INIT_GAMECONTROLLER ;
2024-02-12 03:10:54 +00:00
static int main_testImpliedJoystickInit ( void * arg )
2016-05-18 05:53:35 +00:00
{
# if defined SDL_JOYSTICK_DISABLED || defined SDL_GAMECONTROLLER_DISABLED
return TEST_SKIPPED ;
# else
int initialized_system ;
/* First initialize the controller */
2024-02-12 03:10:54 +00:00
SDLTest_AssertCheck ( ( SDL_WasInit ( joy_and_controller ) & joy_and_controller ) = = 0 , " SDL_WasInit() before init should be false for joystick & controller " ) ;
SDLTest_AssertCheck ( SDL_InitSubSystem ( SDL_INIT_GAMECONTROLLER ) = = 0 , " SDL_InitSubSystem(SDL_INIT_GAMECONTROLLER) " ) ;
2016-05-18 05:53:35 +00:00
/* Then make sure this implicitly initialized the joystick subsystem */
initialized_system = SDL_WasInit ( joy_and_controller ) ;
2024-02-12 03:10:54 +00:00
SDLTest_AssertCheck ( ( initialized_system & joy_and_controller ) = = joy_and_controller , " SDL_WasInit() should be true for joystick & controller (%x) " , initialized_system ) ;
2016-05-18 05:53:35 +00:00
/* Then quit the controller, and make sure that implicitly also quits the */
/* joystick subsystem */
SDL_QuitSubSystem ( SDL_INIT_GAMECONTROLLER ) ;
initialized_system = SDL_WasInit ( joy_and_controller ) ;
2024-02-12 03:10:54 +00:00
SDLTest_AssertCheck ( ( initialized_system & joy_and_controller ) = = 0 , " SDL_WasInit() should be false for joystick & controller (%x) " , initialized_system ) ;
2016-05-18 05:53:35 +00:00
return TEST_COMPLETED ;
# endif
}
2024-02-12 03:10:54 +00:00
static int main_testImpliedJoystickQuit ( void * arg )
2016-05-18 05:53:35 +00:00
{
# if defined SDL_JOYSTICK_DISABLED || defined SDL_GAMECONTROLLER_DISABLED
return TEST_SKIPPED ;
# else
int initialized_system ;
/* First initialize the controller and the joystick (explicitly) */
2024-02-12 03:10:54 +00:00
SDLTest_AssertCheck ( ( SDL_WasInit ( joy_and_controller ) & joy_and_controller ) = = 0 , " SDL_WasInit() before init should be false for joystick & controller " ) ;
SDLTest_AssertCheck ( SDL_InitSubSystem ( SDL_INIT_JOYSTICK ) = = 0 , " SDL_InitSubSystem(SDL_INIT_JOYSTICK) " ) ;
SDLTest_AssertCheck ( SDL_InitSubSystem ( SDL_INIT_GAMECONTROLLER ) = = 0 , " SDL_InitSubSystem(SDL_INIT_GAMECONTROLLER) " ) ;
2016-05-18 05:53:35 +00:00
/* Then make sure they're both initialized properly */
initialized_system = SDL_WasInit ( joy_and_controller ) ;
2024-02-12 03:10:54 +00:00
SDLTest_AssertCheck ( ( initialized_system & joy_and_controller ) = = joy_and_controller , " SDL_WasInit() should be true for joystick & controller (%x) " , initialized_system ) ;
2016-05-18 05:53:35 +00:00
/* Then quit the controller, and make sure that it does NOT quit the */
/* explicitly initialized joystick subsystem. */
SDL_QuitSubSystem ( SDL_INIT_GAMECONTROLLER ) ;
initialized_system = SDL_WasInit ( joy_and_controller ) ;
2024-02-12 03:10:54 +00:00
SDLTest_AssertCheck ( ( initialized_system & joy_and_controller ) = = SDL_INIT_JOYSTICK , " SDL_WasInit() should be false for joystick & controller (%x) " , initialized_system ) ;
2016-05-18 05:53:35 +00:00
SDL_QuitSubSystem ( SDL_INIT_JOYSTICK ) ;
return TEST_COMPLETED ;
# endif
}
2024-02-12 03:10:54 +00:00
# if defined(__GNUC__) || defined(__clang__)
# pragma GCC diagnostic push
# pragma GCC diagnostic ignored "-Wformat-zero-length"
# endif
2016-05-18 05:53:35 +00:00
2024-02-12 03:10:54 +00:00
static int
main_testSetError ( void * arg )
{
size_t i ;
char error [ 1024 ] ;
2016-05-18 05:53:35 +00:00
2024-02-12 03:10:54 +00:00
error [ 0 ] = ' \0 ' ;
SDL_SetError ( " " ) ;
SDLTest_AssertCheck ( SDL_strcmp ( error , SDL_GetError ( ) ) = = 0 , " SDL_SetError( \" \" ) " ) ;
2016-05-18 05:53:35 +00:00
2024-02-12 03:10:54 +00:00
for ( i = 0 ; i < ( sizeof ( error ) - 1 ) ; + + i ) {
error [ i ] = ' a ' + ( i % 26 ) ;
}
error [ i ] = ' \0 ' ;
SDL_SetError ( " %s " , error ) ;
SDLTest_AssertCheck ( SDL_strcmp ( error , SDL_GetError ( ) ) = = 0 , " SDL_SetError( \" abc...1023 \" ) " ) ;
return TEST_COMPLETED ;
}
# if defined(__GNUC__) || defined(__clang__)
# pragma GCC diagnostic pop
# endif
static const SDLTest_TestCaseReference mainTest1 = {
( SDLTest_TestCaseFp ) main_testInitQuitSubSystem , " main_testInitQuitSubSystem " , " Tests SDL_InitSubSystem/QuitSubSystem " , TEST_ENABLED
} ;
static const SDLTest_TestCaseReference mainTest2 = {
( SDLTest_TestCaseFp ) main_testImpliedJoystickInit , " main_testImpliedJoystickInit " , " Tests that init for gamecontroller properly implies joystick " , TEST_ENABLED
} ;
static const SDLTest_TestCaseReference mainTest3 = {
( SDLTest_TestCaseFp ) main_testImpliedJoystickQuit , " main_testImpliedJoystickQuit " , " Tests that quit for gamecontroller doesn't quit joystick if you inited it explicitly " , TEST_ENABLED
} ;
static const SDLTest_TestCaseReference mainTest4 = {
( SDLTest_TestCaseFp ) main_testSetError , " main_testSetError " , " Tests that SDL_SetError() handles arbitrarily large strings " , TEST_ENABLED
} ;
2016-05-18 05:53:35 +00:00
2017-10-28 21:50:36 +00:00
/* Sequence of Main test cases */
2024-02-12 03:10:54 +00:00
static const SDLTest_TestCaseReference * mainTests [ ] = {
2016-05-18 05:53:35 +00:00
& mainTest1 ,
& mainTest2 ,
& mainTest3 ,
& mainTest4 ,
NULL
} ;
2017-10-28 21:50:36 +00:00
/* Main test suite (global) */
2016-05-18 05:53:35 +00:00
SDLTest_TestSuiteReference mainTestSuite = {
" Main " ,
NULL ,
mainTests ,
NULL
} ;