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