summaryrefslogtreecommitdiff
path: root/src/contrib/SDL-3.2.20/test/testautomation_subsystems.c
diff options
context:
space:
mode:
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.c241
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
12static 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
26static 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 */
43static 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 */
93static 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 */
133static 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 */
168static 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 */
214static const SDLTest_TestCaseReference subsystemsTest1 = {
215 subsystems_referenceCount, "subsystems_referenceCount", "Makes sure that subsystem stays until number of quits matches inits.", TEST_ENABLED
216};
217
218static const SDLTest_TestCaseReference subsystemsTest2 = {
219 subsystems_dependRefCountInitAllQuitByOne, "subsystems_dependRefCountInitAllQuitByOne", "Check reference count of subsystem dependencies.", TEST_ENABLED
220};
221
222static const SDLTest_TestCaseReference subsystemsTest3 = {
223 subsystems_dependRefCountInitByOneQuitAll, "subsystems_dependRefCountInitByOneQuitAll", "Check reference count of subsystem dependencies.", TEST_ENABLED
224};
225
226static 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 */
231static const SDLTest_TestCaseReference *subsystemsTests[] = {
232 &subsystemsTest1, &subsystemsTest2, &subsystemsTest3, &subsystemsTest4, NULL
233};
234
235/* Events test suite (global) */
236SDLTest_TestSuiteReference subsystemsTestSuite = {
237 "Subsystems",
238 subsystemsSetUp,
239 subsystemsTests,
240 subsystemsTearDown
241};