annotate SDL3/SDL_test_harness.h @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1 /*
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2 Simple DirectMedia Layer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3 Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5 This software is provided 'as-is', without any express or implied
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6 warranty. In no event will the authors be held liable for any damages
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7 arising from the use of this software.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9 Permission is granted to anyone to use this software for any purpose,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 including commercial applications, and to alter it and redistribute it
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11 freely, subject to the following restrictions:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13 1. The origin of this software must not be misrepresented; you must not
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14 claim that you wrote the original software. If you use this software
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15 in a product, an acknowledgment in the product documentation would be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16 appreciated but is not required.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17 2. Altered source versions must be plainly marked as such, and must not be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18 misrepresented as being the original software.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19 3. This notice may not be removed or altered from any source distribution.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23 * Test suite related functions of SDL test framework.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25 * This code is a part of the SDL test library, not the main SDL library.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28 /*
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29 Defines types for test case definitions and the test execution harness API.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
31 Based on original GSOC code by Markus Kauppila <markus.kauppila@gmail.com>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
34 #ifndef SDL_test_h_arness_h
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35 #define SDL_test_h_arness_h
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 #include <SDL3/SDL_stdinc.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 #include <SDL3/SDL_test_common.h> /* SDLTest_CommonState */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
40 #include <SDL3/SDL_begin_code.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41 /* Set up for C function definitions, even when using C++ */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42 #ifdef __cplusplus
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43 extern "C" {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46 /* ! Definitions for test case structures */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
47 #define TEST_ENABLED 1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
48 #define TEST_DISABLED 0
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
49
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
50 /* ! Definition of all the possible test return values of the test case method */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
51 #define TEST_ABORTED -1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
52 #define TEST_STARTED 0
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
53 #define TEST_COMPLETED 1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
54 #define TEST_SKIPPED 2
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
55
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
56 /* ! Definition of all the possible test results for the harness */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
57 #define TEST_RESULT_PASSED 0
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
58 #define TEST_RESULT_FAILED 1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
59 #define TEST_RESULT_NO_ASSERT 2
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
60 #define TEST_RESULT_SKIPPED 3
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
61 #define TEST_RESULT_SETUP_FAILURE 4
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
62
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
63 /* !< Function pointer to a test case setup function (run before every test) */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
64 typedef void (SDLCALL *SDLTest_TestCaseSetUpFp)(void **arg);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
65
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
66 /* !< Function pointer to a test case function */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
67 typedef int (SDLCALL *SDLTest_TestCaseFp)(void *arg);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
68
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
69 /* !< Function pointer to a test case teardown function (run after every test) */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
70 typedef void (SDLCALL *SDLTest_TestCaseTearDownFp)(void *arg);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
71
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
72 /*
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
73 * Holds information about a single test case.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
74 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
75 typedef struct SDLTest_TestCaseReference {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
76 /* !< Func2Stress */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
77 SDLTest_TestCaseFp testCase;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
78 /* !< Short name (or function name) "Func2Stress" */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
79 const char *name;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
80 /* !< Long name or full description "This test pushes func2() to the limit." */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
81 const char *description;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
82 /* !< Set to TEST_ENABLED or TEST_DISABLED (test won't be run) */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
83 int enabled;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
84 } SDLTest_TestCaseReference;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
85
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
86 /*
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
87 * Holds information about a test suite (multiple test cases).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
88 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
89 typedef struct SDLTest_TestSuiteReference {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
90 /* !< "PlatformSuite" */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
91 const char *name;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
92 /* !< The function that is run before each test. NULL skips. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
93 SDLTest_TestCaseSetUpFp testSetUp;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
94 /* !< The test cases that are run as part of the suite. Last item should be NULL. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
95 const SDLTest_TestCaseReference **testCases;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
96 /* !< The function that is run after each test. NULL skips. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
97 SDLTest_TestCaseTearDownFp testTearDown;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
98 } SDLTest_TestSuiteReference;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
99
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
100
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
101 /*
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
102 * Generates a random run seed string for the harness. The generated seed
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
103 * will contain alphanumeric characters (0-9A-Z).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
104 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
105 * \param buffer Buffer in which to generate the random seed. Must have a capacity of at least length + 1 characters.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
106 * \param length Number of alphanumeric characters to write to buffer, must be >0
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
107 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
108 * \returns A null-terminated seed string and equal to the in put buffer on success, NULL on failure
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
109 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
110 char * SDLCALL SDLTest_GenerateRunSeed(char *buffer, int length);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
111
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
112 /*
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
113 * Holds information about the execution of test suites.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
114 * */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
115 typedef struct SDLTest_TestSuiteRunner SDLTest_TestSuiteRunner;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
116
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
117 /*
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
118 * Create a new test suite runner, that will execute the given test suites.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
119 * It will register the harness cli arguments to the common SDL state.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
120 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
121 * \param state Common SDL state on which to register CLI arguments.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
122 * \param testSuites NULL-terminated test suites containing test cases.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
123 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
124 * \returns the test run result: 0 when all tests passed, 1 if any tests failed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
125 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
126 SDLTest_TestSuiteRunner * SDLCALL SDLTest_CreateTestSuiteRunner(SDLTest_CommonState *state, SDLTest_TestSuiteReference *testSuites[]);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
127
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
128 /*
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
129 * Destroy a test suite runner.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
130 * It will unregister the harness cli arguments to the common SDL state.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
131 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
132 * \param runner The runner that should be destroyed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
133 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
134 void SDLCALL SDLTest_DestroyTestSuiteRunner(SDLTest_TestSuiteRunner *runner);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
135
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
136 /*
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
137 * Execute a test suite, using the configured run seed, execution key, filter, etc.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
138 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
139 * \param runner The runner that should be executed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
140 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
141 * \returns the test run result: 0 when all tests passed, 1 if any tests failed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
142 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
143 int SDLCALL SDLTest_ExecuteTestSuiteRunner(SDLTest_TestSuiteRunner *runner);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
144
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
145 /* Ends C function definitions when using C++ */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
146 #ifdef __cplusplus
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
147 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
148 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
149 #include <SDL3/SDL_close_code.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
150
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
151 #endif /* SDL_test_h_arness_h */