diff options
author | 3gg <3gg@shellblade.net> | 2025-08-30 16:53:58 -0700 |
---|---|---|
committer | 3gg <3gg@shellblade.net> | 2025-08-30 16:53:58 -0700 |
commit | 6aaedb813fa11ba0679c3051bc2eb28646b9506c (patch) | |
tree | 34acbfc9840e02cb4753e6306ea7ce978bf8b58e /src/contrib/SDL-3.2.20/test/testautomation_subsystems.c | |
parent | 8f228ade99dd3d4c8da9b78ade1815c9adf85c8f (diff) |
Update to SDL3
Diffstat (limited to 'src/contrib/SDL-3.2.20/test/testautomation_subsystems.c')
-rw-r--r-- | src/contrib/SDL-3.2.20/test/testautomation_subsystems.c | 241 |
1 files changed, 241 insertions, 0 deletions
diff --git a/src/contrib/SDL-3.2.20/test/testautomation_subsystems.c b/src/contrib/SDL-3.2.20/test/testautomation_subsystems.c new file mode 100644 index 0000000..1904ae0 --- /dev/null +++ b/src/contrib/SDL-3.2.20/test/testautomation_subsystems.c | |||
@@ -0,0 +1,241 @@ | |||
1 | /** | ||
2 | * Events test suite | ||
3 | */ | ||
4 | #include "testautomation_suites.h" | ||
5 | #include <SDL3/SDL.h> | ||
6 | #include <SDL3/SDL_test.h> | ||
7 | |||
8 | /* ================= Test Case Implementation ================== */ | ||
9 | |||
10 | /* Fixture */ | ||
11 | |||
12 | static void SDLCALL subsystemsSetUp(void **arg) | ||
13 | { | ||
14 | /* Reset each one of the SDL subsystems */ | ||
15 | /* CHECKME: can we use SDL_Quit here, or this will break the flow of tests? */ | ||
16 | SDL_Quit(); | ||
17 | /* Alternate variant without SDL_Quit: | ||
18 | while (SDL_WasInit(0) != 0) { | ||
19 | SDL_QuitSubSystem(~0U); | ||
20 | } | ||
21 | */ | ||
22 | SDLTest_AssertPass("Reset all subsystems before subsystems test"); | ||
23 | SDLTest_AssertCheck(SDL_WasInit(0) == 0, "Check result from SDL_WasInit(0)"); | ||
24 | } | ||
25 | |||
26 | static void SDLCALL subsystemsTearDown(void *arg) | ||
27 | { | ||
28 | /* Reset each one of the SDL subsystems */ | ||
29 | SDL_Quit(); | ||
30 | |||
31 | SDLTest_AssertPass("Cleanup of subsystems test completed"); | ||
32 | } | ||
33 | |||
34 | /* Test case functions */ | ||
35 | |||
36 | /** | ||
37 | * Inits and Quits particular subsystem, checking its Init status. | ||
38 | * | ||
39 | * \sa SDL_InitSubSystem | ||
40 | * \sa SDL_QuitSubSystem | ||
41 | * | ||
42 | */ | ||
43 | static int SDLCALL subsystems_referenceCount(void *arg) | ||
44 | { | ||
45 | const int system = SDL_INIT_VIDEO; | ||
46 | int result; | ||
47 | /* Ensure that we start with a non-initialized subsystem. */ | ||
48 | SDLTest_AssertCheck(SDL_WasInit(system) == 0, "Check result from SDL_WasInit(0x%x)", system); | ||
49 | |||
50 | /* Init subsystem once, and quit once */ | ||
51 | SDL_InitSubSystem(system); | ||
52 | SDLTest_AssertPass("Call to SDL_InitSubSystem(0x%x)", system); | ||
53 | result = SDL_WasInit(system); | ||
54 | SDLTest_AssertCheck(result == system, "Check result from SDL_WasInit(0x%x), expected: 0x%x, got: 0x%x", system, system, result); | ||
55 | |||
56 | SDL_QuitSubSystem(system); | ||
57 | SDLTest_AssertPass("Call to SDL_QuitSubSystem(0x%x)", system); | ||
58 | result = SDL_WasInit(system); | ||
59 | SDLTest_AssertCheck(result == 0, "Check result from SDL_WasInit(0x%x), expected: 0, got: 0x%x", system, result); | ||
60 | |||
61 | /* Init subsystem number of times, then decrement reference count until it's disposed of. */ | ||
62 | SDL_InitSubSystem(system); | ||
63 | SDL_InitSubSystem(system); | ||
64 | SDL_InitSubSystem(system); | ||
65 | SDLTest_AssertPass("Call to SDL_InitSubSystem(0x%x) x3 times", system); | ||
66 | result = SDL_WasInit(system); | ||
67 | SDLTest_AssertCheck(result == system, "Check result from SDL_WasInit(0x%x), expected: 0x%x, got: 0x%x", system, system, result); | ||
68 | |||
69 | SDL_QuitSubSystem(system); | ||
70 | SDLTest_AssertPass("Call to SDL_QuitSubSystem(0x%x) x1", system); | ||
71 | result = SDL_WasInit(system); | ||
72 | SDLTest_AssertCheck(result == system, "Check result from SDL_WasInit(0x%x), expected: 0x%x, got: 0x%x", system, system, result); | ||
73 | SDL_QuitSubSystem(system); | ||
74 | SDLTest_AssertPass("Call to SDL_QuitSubSystem(0x%x) x2", system); | ||
75 | result = SDL_WasInit(system); | ||
76 | SDLTest_AssertCheck(result == system, "Check result from SDL_WasInit(0x%x), expected: 0x%x, got: 0x%x", system, system, result); | ||
77 | SDL_QuitSubSystem(system); | ||
78 | SDLTest_AssertPass("Call to SDL_QuitSubSystem(0x%x) x3", system); | ||
79 | result = SDL_WasInit(system); | ||
80 | SDLTest_AssertCheck(result == 0, "Check result from SDL_WasInit(0x%x), expected: 0, got: 0x%x", system, result); | ||
81 | |||
82 | return TEST_COMPLETED; | ||
83 | } | ||
84 | |||
85 | /** | ||
86 | * Inits and Quits subsystems that have another as dependency; | ||
87 | * check that the dependency is not removed before the last of its dependents. | ||
88 | * | ||
89 | * \sa SDL_InitSubSystem | ||
90 | * \sa SDL_QuitSubSystem | ||
91 | * | ||
92 | */ | ||
93 | static int SDLCALL subsystems_dependRefCountInitAllQuitByOne(void *arg) | ||
94 | { | ||
95 | int result; | ||
96 | /* Ensure that we start with reset subsystems. */ | ||
97 | SDLTest_AssertCheck(SDL_WasInit(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK | SDL_INIT_EVENTS) == 0, | ||
98 | "Check result from SDL_WasInit(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK | SDL_INIT_EVENTS)"); | ||
99 | |||
100 | /* Following should init SDL_INIT_EVENTS and give it +3 ref counts. */ | ||
101 | SDL_InitSubSystem(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK); | ||
102 | SDLTest_AssertPass("Call to SDL_InitSubSystem(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK)"); | ||
103 | result = SDL_WasInit(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK); | ||
104 | SDLTest_AssertCheck(result == (SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK), "Check result from SDL_WasInit(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK), expected: 0x%x, got: 0x%x", (SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK), result); | ||
105 | result = SDL_WasInit(SDL_INIT_EVENTS); | ||
106 | SDLTest_AssertCheck(result == SDL_INIT_EVENTS, "Check result from SDL_WasInit(SDL_INIT_EVENTS), expected: 0x4000, got: 0x%x", result); | ||
107 | |||
108 | /* Quit systems one by one. */ | ||
109 | SDL_QuitSubSystem(SDL_INIT_VIDEO); | ||
110 | SDLTest_AssertPass("Call to SDL_QuitSubSystem(SDL_INIT_VIDEO)"); | ||
111 | result = SDL_WasInit(SDL_INIT_EVENTS); | ||
112 | SDLTest_AssertCheck(result == SDL_INIT_EVENTS, "Check result from SDL_WasInit(SDL_INIT_EVENTS), expected: 0x4000, got: 0x%x", result); | ||
113 | SDL_QuitSubSystem(SDL_INIT_AUDIO); | ||
114 | SDLTest_AssertPass("Call to SDL_QuitSubSystem(SDL_INIT_AUDIO)"); | ||
115 | result = SDL_WasInit(SDL_INIT_EVENTS); | ||
116 | SDLTest_AssertCheck(result == SDL_INIT_EVENTS, "Check result from SDL_WasInit(SDL_INIT_EVENTS), expected: 0x4000, got: 0x%x", result); | ||
117 | SDL_QuitSubSystem(SDL_INIT_JOYSTICK); | ||
118 | SDLTest_AssertPass("Call to SDL_QuitSubSystem(SDL_INIT_JOYSTICK)"); | ||
119 | result = SDL_WasInit(SDL_INIT_EVENTS); | ||
120 | SDLTest_AssertCheck(result == 0, "Check result from SDL_WasInit(SDL_INIT_EVENTS), expected: 0, got: 0x%x", result); | ||
121 | |||
122 | return TEST_COMPLETED; | ||
123 | } | ||
124 | |||
125 | /** | ||
126 | * Inits and Quits subsystems that have another as dependency; | ||
127 | * check that the dependency is not removed before the last of its dependents. | ||
128 | * | ||
129 | * \sa SDL_InitSubSystem | ||
130 | * \sa SDL_QuitSubSystem | ||
131 | * | ||
132 | */ | ||
133 | static int SDLCALL subsystems_dependRefCountInitByOneQuitAll(void *arg) | ||
134 | { | ||
135 | int result; | ||
136 | /* Ensure that we start with reset subsystems. */ | ||
137 | SDLTest_AssertCheck(SDL_WasInit(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK | SDL_INIT_EVENTS) == 0, | ||
138 | "Check result from SDL_WasInit(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK | SDL_INIT_EVENTS)"); | ||
139 | |||
140 | /* Following should init SDL_INIT_EVENTS and give it +3 ref counts. */ | ||
141 | SDL_InitSubSystem(SDL_INIT_VIDEO); | ||
142 | SDLTest_AssertPass("Call to SDL_InitSubSystem(SDL_INIT_VIDEO)"); | ||
143 | result = SDL_WasInit(SDL_INIT_EVENTS); | ||
144 | SDLTest_AssertCheck(result == SDL_INIT_EVENTS, "Check result from SDL_WasInit(SDL_INIT_EVENTS), expected: 0x4000, got: 0x%x", result); | ||
145 | SDL_InitSubSystem(SDL_INIT_AUDIO); | ||
146 | SDLTest_AssertPass("Call to SDL_InitSubSystem(SDL_INIT_AUDIO)"); | ||
147 | SDL_InitSubSystem(SDL_INIT_JOYSTICK); | ||
148 | SDLTest_AssertPass("Call to SDL_InitSubSystem(SDL_INIT_JOYSTICK)"); | ||
149 | |||
150 | /* Quit systems all at once. */ | ||
151 | SDL_QuitSubSystem(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK); | ||
152 | SDLTest_AssertPass("Call to SDL_QuitSubSystem(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK)"); | ||
153 | result = SDL_WasInit(SDL_INIT_EVENTS); | ||
154 | SDLTest_AssertCheck(result == 0, "Check result from SDL_WasInit(SDL_INIT_EVENTS), expected: 0, got: 0x%x", result); | ||
155 | |||
156 | return TEST_COMPLETED; | ||
157 | } | ||
158 | |||
159 | /** | ||
160 | * Inits and Quits subsystems that have another as dependency, | ||
161 | * but also inits that dependency explicitly, giving it extra ref count. | ||
162 | * Check that the dependency is not removed before the last reference is gone. | ||
163 | * | ||
164 | * \sa SDL_InitSubSystem | ||
165 | * \sa SDL_QuitSubSystem | ||
166 | * | ||
167 | */ | ||
168 | static int SDLCALL subsystems_dependRefCountWithExtraInit(void *arg) | ||
169 | { | ||
170 | int result; | ||
171 | /* Ensure that we start with reset subsystems. */ | ||
172 | SDLTest_AssertCheck(SDL_WasInit(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK | SDL_INIT_EVENTS) == 0, | ||
173 | "Check result from SDL_WasInit(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK | SDL_INIT_EVENTS)"); | ||
174 | |||
175 | /* Init EVENTS explicitly, +1 ref count. */ | ||
176 | SDL_InitSubSystem(SDL_INIT_EVENTS); | ||
177 | SDLTest_AssertPass("Call to SDL_InitSubSystem(SDL_INIT_EVENTS)"); | ||
178 | result = SDL_WasInit(SDL_INIT_EVENTS); | ||
179 | SDLTest_AssertCheck(result == SDL_INIT_EVENTS, "Check result from SDL_WasInit(SDL_INIT_EVENTS), expected: 0x4000, got: 0x%x", result); | ||
180 | /* Following should init SDL_INIT_EVENTS and give it +3 ref counts. */ | ||
181 | SDL_InitSubSystem(SDL_INIT_VIDEO); | ||
182 | SDLTest_AssertPass("Call to SDL_InitSubSystem(SDL_INIT_VIDEO)"); | ||
183 | SDL_InitSubSystem(SDL_INIT_AUDIO); | ||
184 | SDLTest_AssertPass("Call to SDL_InitSubSystem(SDL_INIT_AUDIO)"); | ||
185 | SDL_InitSubSystem(SDL_INIT_JOYSTICK); | ||
186 | SDLTest_AssertPass("Call to SDL_InitSubSystem(SDL_INIT_JOYSTICK)"); | ||
187 | |||
188 | /* Quit EVENTS explicitly, -1 ref count. */ | ||
189 | SDL_QuitSubSystem(SDL_INIT_EVENTS); | ||
190 | SDLTest_AssertPass("Call to SDL_QuitSubSystem(SDL_INIT_EVENTS)"); | ||
191 | result = SDL_WasInit(SDL_INIT_EVENTS); | ||
192 | SDLTest_AssertCheck(result == SDL_INIT_EVENTS, "Check result from SDL_WasInit(SDL_INIT_EVENTS), expected: 0x4000, got: 0x%x", result); | ||
193 | |||
194 | /* Quit systems one by one. */ | ||
195 | SDL_QuitSubSystem(SDL_INIT_VIDEO); | ||
196 | SDLTest_AssertPass("Call to SDL_QuitSubSystem(SDL_INIT_VIDEO)"); | ||
197 | result = SDL_WasInit(SDL_INIT_EVENTS); | ||
198 | SDLTest_AssertCheck(result == SDL_INIT_EVENTS, "Check result from SDL_WasInit(SDL_INIT_EVENTS), expected: 0x4000, got: 0x%x", result); | ||
199 | SDL_QuitSubSystem(SDL_INIT_AUDIO); | ||
200 | SDLTest_AssertPass("Call to SDL_QuitSubSystem(SDL_INIT_AUDIO)"); | ||
201 | result = SDL_WasInit(SDL_INIT_EVENTS); | ||
202 | SDLTest_AssertCheck(result == SDL_INIT_EVENTS, "Check result from SDL_WasInit(SDL_INIT_EVENTS), expected: 0x4000, got: 0x%x", result); | ||
203 | SDL_QuitSubSystem(SDL_INIT_JOYSTICK); | ||
204 | SDLTest_AssertPass("Call to SDL_QuitSubSystem(SDL_INIT_JOYSTICK)"); | ||
205 | result = SDL_WasInit(SDL_INIT_EVENTS); | ||
206 | SDLTest_AssertCheck(result == 0, "Check result from SDL_WasInit(SDL_INIT_EVENTS), expected: 0, got: 0x%x", result); | ||
207 | |||
208 | return TEST_COMPLETED; | ||
209 | } | ||
210 | |||
211 | /* ================= Test References ================== */ | ||
212 | |||
213 | /* Subsystems test cases */ | ||
214 | static const SDLTest_TestCaseReference subsystemsTest1 = { | ||
215 | subsystems_referenceCount, "subsystems_referenceCount", "Makes sure that subsystem stays until number of quits matches inits.", TEST_ENABLED | ||
216 | }; | ||
217 | |||
218 | static const SDLTest_TestCaseReference subsystemsTest2 = { | ||
219 | subsystems_dependRefCountInitAllQuitByOne, "subsystems_dependRefCountInitAllQuitByOne", "Check reference count of subsystem dependencies.", TEST_ENABLED | ||
220 | }; | ||
221 | |||
222 | static const SDLTest_TestCaseReference subsystemsTest3 = { | ||
223 | subsystems_dependRefCountInitByOneQuitAll, "subsystems_dependRefCountInitByOneQuitAll", "Check reference count of subsystem dependencies.", TEST_ENABLED | ||
224 | }; | ||
225 | |||
226 | static const SDLTest_TestCaseReference subsystemsTest4 = { | ||
227 | subsystems_dependRefCountWithExtraInit, "subsystems_dependRefCountWithExtraInit", "Check reference count of subsystem dependencies.", TEST_ENABLED | ||
228 | }; | ||
229 | |||
230 | /* Sequence of Events test cases */ | ||
231 | static const SDLTest_TestCaseReference *subsystemsTests[] = { | ||
232 | &subsystemsTest1, &subsystemsTest2, &subsystemsTest3, &subsystemsTest4, NULL | ||
233 | }; | ||
234 | |||
235 | /* Events test suite (global) */ | ||
236 | SDLTest_TestSuiteReference subsystemsTestSuite = { | ||
237 | "Subsystems", | ||
238 | subsystemsSetUp, | ||
239 | subsystemsTests, | ||
240 | subsystemsTearDown | ||
241 | }; | ||