2015-06-21 09:33:46 -06:00
/**
* Automated SDL subsystems management test .
*
* Written by J <EFBFBD> rgen Tjern <EFBFBD> " jorgenpt "
*
* Released under Public Domain .
*/
2022-11-26 21:43:38 -07:00
# include <SDL3/SDL.h>
# include <SDL3/SDL_test.h>
2015-06-21 09:33:46 -06:00
/* !
* \ brief Tests SDL_Init ( ) and SDL_Quit ( ) of Joystick and Haptic subsystems
* \ sa
2021-04-01 10:20:04 -06:00
* http : //wiki.libsdl.org/SDL_Init
* http : //wiki.libsdl.org/SDL_Quit
2015-06-21 09:33:46 -06:00
*/
2022-11-30 13:51:59 -07:00
static int main_testInitQuitJoystickHaptic ( void * arg )
2015-06-21 09:33:46 -06:00
{
int enabled_subsystems ;
int initialized_subsystems = SDL_INIT_JOYSTICK | SDL_INIT_HAPTIC ;
2022-11-30 13:51:59 -07:00
SDLTest_AssertCheck ( SDL_Init ( initialized_subsystems ) = = 0 , " SDL_Init multiple systems. " ) ;
2015-06-21 09:33:46 -06:00
enabled_subsystems = SDL_WasInit ( initialized_subsystems ) ;
2022-11-30 13:51:59 -07:00
SDLTest_AssertCheck ( enabled_subsystems = = initialized_subsystems , " SDL_WasInit(SDL_INIT_EVERYTHING) contains all systems (%i) " , enabled_subsystems ) ;
2015-06-21 09:33:46 -06:00
SDL_Quit ( ) ;
enabled_subsystems = SDL_WasInit ( initialized_subsystems ) ;
2022-11-30 13:51:59 -07:00
SDLTest_AssertCheck ( enabled_subsystems = = 0 , " SDL_Quit should shut down everything (%i) " , enabled_subsystems ) ;
2015-06-21 09:33:46 -06:00
return TEST_COMPLETED ;
}
/* !
* \ brief Tests SDL_InitSubSystem ( ) and SDL_QuitSubSystem ( )
* \ sa
2021-04-01 10:20:04 -06:00
* http : //wiki.libsdl.org/SDL_Init
* http : //wiki.libsdl.org/SDL_Quit
2015-06-21 09:33:46 -06:00
*/
2022-11-30 13:51:59 -07:00
static int main_testInitQuitSubSystem ( void * arg )
2015-06-21 09:33:46 -06:00
{
int i ;
2022-12-27 10:46:24 -07:00
int subsystems [ ] = { SDL_INIT_JOYSTICK , SDL_INIT_HAPTIC , SDL_INIT_GAMEPAD } ;
2015-06-21 09:33:46 -06:00
for ( i = 0 ; i < SDL_arraysize ( subsystems ) ; + + i ) {
int initialized_system ;
int subsystem = subsystems [ i ] ;
2022-11-30 13:51:59 -07: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 ) ;
2015-06-21 09:33:46 -06:00
initialized_system = SDL_WasInit ( subsystem ) ;
2022-11-30 13:51:59 -07:00
SDLTest_AssertCheck ( ( initialized_system & subsystem ) ! = 0 , " SDL_WasInit(%x) should be true (%x) " , subsystem , initialized_system ) ;
2015-06-21 09:33:46 -06:00
SDL_QuitSubSystem ( subsystem ) ;
2022-11-30 13:51:59 -07:00
SDLTest_AssertCheck ( ( SDL_WasInit ( subsystem ) & subsystem ) = = 0 , " SDL_WasInit(%x) after shutdown should be false " , subsystem ) ;
2015-06-21 09:33:46 -06:00
}
return TEST_COMPLETED ;
}
2022-12-27 10:46:24 -07:00
const int joy_and_controller = SDL_INIT_JOYSTICK | SDL_INIT_GAMEPAD ;
2022-11-30 13:51:59 -07:00
static int main_testImpliedJoystickInit ( void * arg )
2015-06-21 09:33:46 -06:00
{
int initialized_system ;
/* First initialize the controller */
2022-11-30 13:51:59 -07:00
SDLTest_AssertCheck ( ( SDL_WasInit ( joy_and_controller ) & joy_and_controller ) = = 0 , " SDL_WasInit() before init should be false for joystick & controller " ) ;
2022-12-27 10:46:24 -07:00
SDLTest_AssertCheck ( SDL_InitSubSystem ( SDL_INIT_GAMEPAD ) = = 0 , " SDL_InitSubSystem(SDL_INIT_GAMEPAD) " ) ;
2015-06-21 09:33:46 -06:00
/* Then make sure this implicitly initialized the joystick subsystem */
initialized_system = SDL_WasInit ( joy_and_controller ) ;
2022-11-30 13:51:59 -07:00
SDLTest_AssertCheck ( ( initialized_system & joy_and_controller ) = = joy_and_controller , " SDL_WasInit() should be true for joystick & controller (%x) " , initialized_system ) ;
2015-06-21 09:33:46 -06:00
/* Then quit the controller, and make sure that implicitly also quits the */
/* joystick subsystem */
2022-12-27 10:46:24 -07:00
SDL_QuitSubSystem ( SDL_INIT_GAMEPAD ) ;
2015-06-21 09:33:46 -06:00
initialized_system = SDL_WasInit ( joy_and_controller ) ;
2022-11-30 13:51:59 -07:00
SDLTest_AssertCheck ( ( initialized_system & joy_and_controller ) = = 0 , " SDL_WasInit() should be false for joystick & controller (%x) " , initialized_system ) ;
2015-06-21 09:33:46 -06:00
return TEST_COMPLETED ;
}
2022-11-30 13:51:59 -07:00
static int main_testImpliedJoystickQuit ( void * arg )
2015-06-21 09:33:46 -06:00
{
int initialized_system ;
/* First initialize the controller and the joystick (explicitly) */
2022-11-30 13:51:59 -07: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) " ) ;
2022-12-27 10:46:24 -07:00
SDLTest_AssertCheck ( SDL_InitSubSystem ( SDL_INIT_GAMEPAD ) = = 0 , " SDL_InitSubSystem(SDL_INIT_GAMEPAD) " ) ;
2015-06-21 09:33:46 -06:00
/* Then make sure they're both initialized properly */
initialized_system = SDL_WasInit ( joy_and_controller ) ;
2022-11-30 13:51:59 -07:00
SDLTest_AssertCheck ( ( initialized_system & joy_and_controller ) = = joy_and_controller , " SDL_WasInit() should be true for joystick & controller (%x) " , initialized_system ) ;
2015-06-21 09:33:46 -06:00
/* Then quit the controller, and make sure that it does NOT quit the */
/* explicitly initialized joystick subsystem. */
2022-12-27 10:46:24 -07:00
SDL_QuitSubSystem ( SDL_INIT_GAMEPAD ) ;
2015-06-21 09:33:46 -06:00
initialized_system = SDL_WasInit ( joy_and_controller ) ;
2022-11-30 13:51:59 -07:00
SDLTest_AssertCheck ( ( initialized_system & joy_and_controller ) = = SDL_INIT_JOYSTICK , " SDL_WasInit() should be false for joystick & controller (%x) " , initialized_system ) ;
2015-06-21 09:33:46 -06:00
SDL_QuitSubSystem ( SDL_INIT_JOYSTICK ) ;
return TEST_COMPLETED ;
}
2022-10-05 15:55:59 -06:00
# if defined(__GNUC__) || defined(__clang__)
# pragma GCC diagnostic push
# pragma GCC diagnostic ignored "-Wformat-zero-length"
# endif
2022-06-27 17:59:50 -06:00
static int
main_testSetError ( void * arg )
{
size_t i ;
char error [ 1024 ] ;
error [ 0 ] = ' \0 ' ;
SDL_SetError ( " " ) ;
SDLTest_AssertCheck ( SDL_strcmp ( error , SDL_GetError ( ) ) = = 0 , " SDL_SetError( \" \" ) " ) ;
2022-11-30 13:51:59 -07:00
for ( i = 0 ; i < ( sizeof ( error ) - 1 ) ; + + i ) {
2022-06-27 17:59:50 -06:00
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 ;
}
2022-10-05 15:55:59 -06:00
# if defined(__GNUC__) || defined(__clang__)
# pragma GCC diagnostic pop
# endif
2022-11-30 13:51:59 -07:00
static const SDLTest_TestCaseReference mainTest1 = {
( SDLTest_TestCaseFp ) main_testInitQuitJoystickHaptic , " main_testInitQuitJoystickHaptic " , " Tests SDL_Init/Quit of Joystick and Haptic subsystem " , TEST_ENABLED
} ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
static const SDLTest_TestCaseReference mainTest2 = {
( SDLTest_TestCaseFp ) main_testInitQuitSubSystem , " main_testInitQuitSubSystem " , " Tests SDL_InitSubSystem/QuitSubSystem " , TEST_ENABLED
} ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
static const SDLTest_TestCaseReference mainTest3 = {
( SDLTest_TestCaseFp ) main_testImpliedJoystickInit , " main_testImpliedJoystickInit " , " Tests that init for gamecontroller properly implies joystick " , TEST_ENABLED
} ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
static const SDLTest_TestCaseReference mainTest4 = {
( SDLTest_TestCaseFp ) main_testImpliedJoystickQuit , " main_testImpliedJoystickQuit " , " Tests that quit for gamecontroller doesn't quit joystick if you inited it explicitly " , TEST_ENABLED
} ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
static const SDLTest_TestCaseReference mainTest5 = {
( SDLTest_TestCaseFp ) main_testSetError , " main_testSetError " , " Tests that SDL_SetError() handles arbitrarily large strings " , TEST_ENABLED
} ;
2022-06-27 17:59:50 -06:00
2016-06-28 13:15:16 -06:00
/* Sequence of Main test cases */
2022-11-30 13:51:59 -07:00
static const SDLTest_TestCaseReference * mainTests [ ] = {
2015-06-21 09:33:46 -06:00
& mainTest1 ,
& mainTest2 ,
& mainTest3 ,
& mainTest4 ,
2022-06-27 17:59:50 -06:00
& mainTest5 ,
2015-06-21 09:33:46 -06:00
NULL
} ;
2016-06-28 13:15:16 -06:00
/* Main test suite (global) */
2015-06-21 09:33:46 -06:00
SDLTest_TestSuiteReference mainTestSuite = {
" Main " ,
NULL ,
mainTests ,
NULL
} ;