1 | /** |
2 | * Automated SDL subsystems management test. |
3 | * |
4 | * Written by J�rgen Tjern� "jorgenpt" |
5 | * |
6 | * Released under Public Domain. |
7 | */ |
8 | |
9 | #include "SDL.h" |
10 | #include "SDL_test.h" |
11 | |
12 | |
13 | /* ! |
14 | * \brief Tests SDL_Init() and SDL_Quit() of Joystick and Haptic subsystems |
15 | * \sa |
16 | * http://wiki.libsdl.org/SDL_Init |
17 | * http://wiki.libsdl.org/SDL_Quit |
18 | */ |
19 | static int main_testInitQuitJoystickHaptic (void *arg) |
20 | { |
21 | #if defined SDL_JOYSTICK_DISABLED || defined SDL_HAPTIC_DISABLED |
22 | return TEST_SKIPPED; |
23 | #else |
24 | int enabled_subsystems; |
25 | int initialized_subsystems = SDL_INIT_JOYSTICK | SDL_INIT_HAPTIC; |
26 | |
27 | SDLTest_AssertCheck( SDL_Init(initialized_subsystems) == 0, "SDL_Init multiple systems." ); |
28 | |
29 | enabled_subsystems = SDL_WasInit(initialized_subsystems); |
30 | SDLTest_AssertCheck( enabled_subsystems == initialized_subsystems, "SDL_WasInit(SDL_INIT_EVERYTHING) contains all systems (%i)" , enabled_subsystems ); |
31 | |
32 | SDL_Quit(); |
33 | |
34 | enabled_subsystems = SDL_WasInit(initialized_subsystems); |
35 | SDLTest_AssertCheck( enabled_subsystems == 0, "SDL_Quit should shut down everything (%i)" , enabled_subsystems ); |
36 | |
37 | return TEST_COMPLETED; |
38 | #endif |
39 | } |
40 | |
41 | /* ! |
42 | * \brief Tests SDL_InitSubSystem() and SDL_QuitSubSystem() |
43 | * \sa |
44 | * http://wiki.libsdl.org/SDL_Init |
45 | * http://wiki.libsdl.org/SDL_Quit |
46 | */ |
47 | static int main_testInitQuitSubSystem (void *arg) |
48 | { |
49 | #if defined SDL_JOYSTICK_DISABLED || defined SDL_HAPTIC_DISABLED || defined SDL_GAMECONTROLLER_DISABLED |
50 | return TEST_SKIPPED; |
51 | #else |
52 | int i; |
53 | int subsystems[] = { SDL_INIT_JOYSTICK, SDL_INIT_HAPTIC, SDL_INIT_GAMECONTROLLER }; |
54 | |
55 | for (i = 0; i < SDL_arraysize(subsystems); ++i) { |
56 | int initialized_system; |
57 | int subsystem = subsystems[i]; |
58 | |
59 | SDLTest_AssertCheck( (SDL_WasInit(subsystem) & subsystem) == 0, "SDL_WasInit(%x) before init should be false" , subsystem ); |
60 | SDLTest_AssertCheck( SDL_InitSubSystem(subsystem) == 0, "SDL_InitSubSystem(%x)" , subsystem ); |
61 | |
62 | initialized_system = SDL_WasInit(subsystem); |
63 | SDLTest_AssertCheck( (initialized_system & subsystem) != 0, "SDL_WasInit(%x) should be true (%x)" , subsystem, initialized_system ); |
64 | |
65 | SDL_QuitSubSystem(subsystem); |
66 | |
67 | SDLTest_AssertCheck( (SDL_WasInit(subsystem) & subsystem) == 0, "SDL_WasInit(%x) after shutdown should be false" , subsystem ); |
68 | } |
69 | |
70 | return TEST_COMPLETED; |
71 | #endif |
72 | } |
73 | |
74 | const int joy_and_controller = SDL_INIT_JOYSTICK | SDL_INIT_GAMECONTROLLER; |
75 | static int main_testImpliedJoystickInit (void *arg) |
76 | { |
77 | #if defined SDL_JOYSTICK_DISABLED || defined SDL_GAMECONTROLLER_DISABLED |
78 | return TEST_SKIPPED; |
79 | #else |
80 | int initialized_system; |
81 | |
82 | /* First initialize the controller */ |
83 | SDLTest_AssertCheck( (SDL_WasInit(joy_and_controller) & joy_and_controller) == 0, "SDL_WasInit() before init should be false for joystick & controller" ); |
84 | SDLTest_AssertCheck( SDL_InitSubSystem(SDL_INIT_GAMECONTROLLER) == 0, "SDL_InitSubSystem(SDL_INIT_GAMECONTROLLER)" ); |
85 | |
86 | /* Then make sure this implicitly initialized the joystick subsystem */ |
87 | initialized_system = SDL_WasInit(joy_and_controller); |
88 | SDLTest_AssertCheck( (initialized_system & joy_and_controller) == joy_and_controller, "SDL_WasInit() should be true for joystick & controller (%x)" , initialized_system ); |
89 | |
90 | /* Then quit the controller, and make sure that implicitly also quits the */ |
91 | /* joystick subsystem */ |
92 | SDL_QuitSubSystem(SDL_INIT_GAMECONTROLLER); |
93 | initialized_system = SDL_WasInit(joy_and_controller); |
94 | SDLTest_AssertCheck( (initialized_system & joy_and_controller) == 0, "SDL_WasInit() should be false for joystick & controller (%x)" , initialized_system ); |
95 | |
96 | return TEST_COMPLETED; |
97 | #endif |
98 | } |
99 | |
100 | static int main_testImpliedJoystickQuit (void *arg) |
101 | { |
102 | #if defined SDL_JOYSTICK_DISABLED || defined SDL_GAMECONTROLLER_DISABLED |
103 | return TEST_SKIPPED; |
104 | #else |
105 | int initialized_system; |
106 | |
107 | /* First initialize the controller and the joystick (explicitly) */ |
108 | SDLTest_AssertCheck( (SDL_WasInit(joy_and_controller) & joy_and_controller) == 0, "SDL_WasInit() before init should be false for joystick & controller" ); |
109 | SDLTest_AssertCheck( SDL_InitSubSystem(SDL_INIT_JOYSTICK) == 0, "SDL_InitSubSystem(SDL_INIT_JOYSTICK)" ); |
110 | SDLTest_AssertCheck( SDL_InitSubSystem(SDL_INIT_GAMECONTROLLER) == 0, "SDL_InitSubSystem(SDL_INIT_GAMECONTROLLER)" ); |
111 | |
112 | /* Then make sure they're both initialized properly */ |
113 | initialized_system = SDL_WasInit(joy_and_controller); |
114 | SDLTest_AssertCheck( (initialized_system & joy_and_controller) == joy_and_controller, "SDL_WasInit() should be true for joystick & controller (%x)" , initialized_system ); |
115 | |
116 | /* Then quit the controller, and make sure that it does NOT quit the */ |
117 | /* explicitly initialized joystick subsystem. */ |
118 | SDL_QuitSubSystem(SDL_INIT_GAMECONTROLLER); |
119 | initialized_system = SDL_WasInit(joy_and_controller); |
120 | SDLTest_AssertCheck( (initialized_system & joy_and_controller) == SDL_INIT_JOYSTICK, "SDL_WasInit() should be false for joystick & controller (%x)" , initialized_system ); |
121 | |
122 | SDL_QuitSubSystem(SDL_INIT_JOYSTICK); |
123 | |
124 | return TEST_COMPLETED; |
125 | #endif |
126 | } |
127 | |
128 | static const SDLTest_TestCaseReference mainTest1 = |
129 | { (SDLTest_TestCaseFp)main_testInitQuitJoystickHaptic, "main_testInitQuitJoystickHaptic" , "Tests SDL_Init/Quit of Joystick and Haptic subsystem" , TEST_ENABLED}; |
130 | |
131 | static const SDLTest_TestCaseReference mainTest2 = |
132 | { (SDLTest_TestCaseFp)main_testInitQuitSubSystem, "main_testInitQuitSubSystem" , "Tests SDL_InitSubSystem/QuitSubSystem" , TEST_ENABLED}; |
133 | |
134 | static const SDLTest_TestCaseReference mainTest3 = |
135 | { (SDLTest_TestCaseFp)main_testImpliedJoystickInit, "main_testImpliedJoystickInit" , "Tests that init for gamecontroller properly implies joystick" , TEST_ENABLED}; |
136 | |
137 | static const SDLTest_TestCaseReference mainTest4 = |
138 | { (SDLTest_TestCaseFp)main_testImpliedJoystickQuit, "main_testImpliedJoystickQuit" , "Tests that quit for gamecontroller doesn't quit joystick if you inited it explicitly" , TEST_ENABLED}; |
139 | |
140 | /* Sequence of Main test cases */ |
141 | static const SDLTest_TestCaseReference *mainTests[] = { |
142 | &mainTest1, |
143 | &mainTest2, |
144 | &mainTest3, |
145 | &mainTest4, |
146 | NULL |
147 | }; |
148 | |
149 | /* Main test suite (global) */ |
150 | SDLTest_TestSuiteReference mainTestSuite = { |
151 | "Main" , |
152 | NULL, |
153 | mainTests, |
154 | NULL |
155 | }; |
156 | |
157 | /* vi: set ts=4 sw=4 expandtab: */ |
158 | |