Atlas - testautomation_subsystems.c

Home / ext / SDL / test Lines: 1 | Size: 11014 bytes [Download] [Show on GitHub] [Search similar files] [Raw] [Raw (proxy)]
[FILE BEGIN]
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}; 242
[FILE END]
(C) 2025 0x4248 (C) 2025 4248 Media and 4248 Systems, All part of 0x4248 See LICENCE files for more information. Not all files are by 0x4248 always check Licencing.