SDL  2.0
testautomation_stdlib.c
Go to the documentation of this file.
1 /**
2  * Standard C library routine test suite
3  */
4 
5 #include <stdio.h>
6 
7 #include "SDL.h"
8 #include "SDL_test.h"
9 
10 
11 /* Test case functions */
12 
13 /**
14  * @brief Call to SDL_strlcpy
15  */
16 #undef SDL_strlcpy
17 int
18 stdlib_strlcpy(void *arg)
19 {
20  size_t result;
21  char text[1024];
22  const char *expected;
23 
24  result = SDL_strlcpy(text, "foo", sizeof(text));
25  expected = "foo";
26  SDLTest_AssertPass("Call to SDL_strlcpy(\"foo\")");
27  SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text);
28  SDLTest_AssertCheck(result == SDL_strlen(text), "Check result value, expected: %d, got: %d", (int) SDL_strlen(text), (int) result);
29 
30  result = SDL_strlcpy(text, "foo", 2);
31  expected = "f";
32  SDLTest_AssertPass("Call to SDL_strlcpy(\"foo\") with buffer size 2");
33  SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text);
34  SDLTest_AssertCheck(result == 3, "Check result value, expected: 3, got: %d", (int) result);
35 
36  return TEST_COMPLETED;
37 }
38 
39 /**
40  * @brief Call to SDL_snprintf
41  */
42 #undef SDL_snprintf
43 int
44 stdlib_snprintf(void *arg)
45 {
46  int result;
47  char text[1024];
48  const char *expected;
49 
50  result = SDL_snprintf(text, sizeof(text), "%s", "foo");
51  expected = "foo";
52  SDLTest_AssertPass("Call to SDL_snprintf(\"%%s\", \"foo\")");
53  SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text);
54  SDLTest_AssertCheck(result == SDL_strlen(text), "Check result value, expected: %d, got: %d", (int) SDL_strlen(text), result);
55 
56  result = SDL_snprintf(text, 2, "%s", "foo");
57  expected = "f";
58  SDLTest_AssertPass("Call to SDL_snprintf(\"%%s\", \"foo\") with buffer size 2");
59  SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text);
60  SDLTest_AssertCheck(result == 3, "Check result value, expected: 3, got: %d", result);
61 
62  result = SDL_snprintf(NULL, 0, "%s", "foo");
63  SDLTest_AssertCheck(result == 3, "Check result value, expected: 3, got: %d", result);
64 
65  result = SDL_snprintf(text, sizeof(text), "%f", 1.0);
66  expected = "1.000000";
67  SDLTest_AssertPass("Call to SDL_snprintf(\"%%f\", 1.0)");
68  SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text);
69  SDLTest_AssertCheck(result == SDL_strlen(text), "Check result value, expected: %d, got: %d", (int) SDL_strlen(text), result);
70 
71  result = SDL_snprintf(text, sizeof(text), "%.f", 1.0);
72  expected = "1";
73  SDLTest_AssertPass("Call to SDL_snprintf(\"%%.f\", 1.0)");
74  SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text);
75  SDLTest_AssertCheck(result == SDL_strlen(text), "Check result value, expected: %d, got: %d", (int) SDL_strlen(text), result);
76 
77  result = SDL_snprintf(text, sizeof(text), "%#.f", 1.0);
78  expected = "1.";
79  SDLTest_AssertPass("Call to SDL_snprintf(\"%%#.f\", 1.0)");
80  SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text);
81  SDLTest_AssertCheck(result == SDL_strlen(text), "Check result value, expected: %d, got: %d", (int) SDL_strlen(text), result);
82 
83  result = SDL_snprintf(text, sizeof(text), "%f", 1.0 + 1.0 / 3.0);
84  expected = "1.333333";
85  SDLTest_AssertPass("Call to SDL_snprintf(\"%%f\", 1.0 + 1.0 / 3.0)");
86  SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text);
87  SDLTest_AssertCheck(result == SDL_strlen(text), "Check result value, expected: %d, got: %d", (int) SDL_strlen(text), result);
88 
89  result = SDL_snprintf(text, sizeof(text), "%+f", 1.0 + 1.0 / 3.0);
90  expected = "+1.333333";
91  SDLTest_AssertPass("Call to SDL_snprintf(\"%%+f\", 1.0 + 1.0 / 3.0)");
92  SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text);
93  SDLTest_AssertCheck(result == SDL_strlen(text), "Check result value, expected: %d, got: %d", (int) SDL_strlen(text), result);
94 
95  result = SDL_snprintf(text, sizeof(text), "%.2f", 1.0 + 1.0 / 3.0);
96  expected = "1.33";
97  SDLTest_AssertPass("Call to SDL_snprintf(\"%%.2f\", 1.0 + 1.0 / 3.0)");
98  SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text);
99  SDLTest_AssertCheck(result == SDL_strlen(text), "Check result value, expected: %d, got: %d", (int) SDL_strlen(text), result);
100 
101  result = SDL_snprintf(text, sizeof(text), "%6.2f", 1.0 + 1.0 / 3.0);
102  expected = " 1.33";
103  SDLTest_AssertPass("Call to SDL_snprintf(\"%%6.2f\", 1.0 + 1.0 / 3.0)");
104  SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: '%s', got: '%s'", expected, text);
105  SDLTest_AssertCheck(result == SDL_strlen(text), "Check result value, expected: %d, got: %d", (int) SDL_strlen(text), result);
106 
107  result = SDL_snprintf(text, sizeof(text), "%06.2f", 1.0 + 1.0 / 3.0);
108  expected = "001.33";
109  SDLTest_AssertPass("Call to SDL_snprintf(\"%%06.2f\", 1.0 + 1.0 / 3.0)");
110  SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: '%s', got: '%s'", expected, text);
111  SDLTest_AssertCheck(result == SDL_strlen(text), "Check result value, expected: %d, got: %d", (int) SDL_strlen(text), result);
112 
113  result = SDL_snprintf(text, 5, "%06.2f", 1.0 + 1.0 / 3.0);
114  expected = "001.";
115  SDLTest_AssertPass("Call to SDL_snprintf(\"%%06.2f\", 1.0 + 1.0 / 3.0) with buffer size 5");
116  SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: '%s', got: '%s'", expected, text);
117  SDLTest_AssertCheck(result == 6, "Check result value, expected: 6, got: %d", result);
118 
119  return TEST_COMPLETED;
120 }
121 
122 /**
123  * @brief Call to SDL_getenv and SDL_setenv
124  */
125 int
127 {
128  const int nameLen = 16;
129  char name[17];
130  int counter;
131  int result;
132  char * value1;
133  char * value2;
134  char * expected;
135  int overwrite;
136  char * text;
137 
138  /* Create a random name. This tests SDL_getenv, since we need to */
139  /* make sure the variable is not set yet (it shouldn't). */
140  do {
141  for(counter = 0; counter < nameLen; counter++) {
142  name[counter] = (char)SDLTest_RandomIntegerInRange(65, 90);
143  }
144  name[nameLen] = '\0';
145 
146  text = SDL_getenv(name);
147  SDLTest_AssertPass("Call to SDL_getenv('%s')", name);
148  if (text != NULL) {
149  SDLTest_Log("Expected: NULL, Got: '%s' (%i)", text, (int) SDL_strlen(text));
150  }
151  } while (text != NULL);
152 
153  /* Create random values to set */
154  value1 = SDLTest_RandomAsciiStringOfSize(10);
155  value2 = SDLTest_RandomAsciiStringOfSize(10);
156 
157  /* Set value 1 without overwrite */
158  overwrite = 0;
159  expected = value1;
160  result = SDL_setenv(name, value1, overwrite);
161  SDLTest_AssertPass("Call to SDL_setenv('%s','%s', %i)", name, value1, overwrite);
162  SDLTest_AssertCheck(result == 0, "Check result, expected: 0, got: %i", result);
163 
164  /* Check value */
165  text = SDL_getenv(name);
166  SDLTest_AssertPass("Call to SDL_getenv('%s')", name);
167  SDLTest_AssertCheck(text != NULL, "Verify returned text is not NULL");
168  if (text != NULL) {
170  SDL_strcmp(text, expected) == 0,
171  "Verify returned text, expected: %s, got: %s",
172  expected,
173  text);
174  }
175 
176  /* Set value 2 with overwrite */
177  overwrite = 1;
178  expected = value2;
179  result = SDL_setenv(name, value2, overwrite);
180  SDLTest_AssertPass("Call to SDL_setenv('%s','%s', %i)", name, value2, overwrite);
181  SDLTest_AssertCheck(result == 0, "Check result, expected: 0, got: %i", result);
182 
183  /* Check value */
184  text = SDL_getenv(name);
185  SDLTest_AssertPass("Call to SDL_getenv('%s')", name);
186  SDLTest_AssertCheck(text != NULL, "Verify returned text is not NULL");
187  if (text != NULL) {
189  SDL_strcmp(text, expected) == 0,
190  "Verify returned text, expected: %s, got: %s",
191  expected,
192  text);
193  }
194 
195  /* Set value 1 without overwrite */
196  overwrite = 0;
197  expected = value2;
198  result = SDL_setenv(name, value1, overwrite);
199  SDLTest_AssertPass("Call to SDL_setenv('%s','%s', %i)", name, value1, overwrite);
200  SDLTest_AssertCheck(result == 0, "Check result, expected: 0, got: %i", result);
201 
202  /* Check value */
203  text = SDL_getenv(name);
204  SDLTest_AssertPass("Call to SDL_getenv('%s')", name);
205  SDLTest_AssertCheck(text != NULL, "Verify returned text is not NULL");
206  if (text != NULL) {
208  SDL_strcmp(text, expected) == 0,
209  "Verify returned text, expected: %s, got: %s",
210  expected,
211  text);
212  }
213 
214  /* Set value 1 without overwrite */
215  overwrite = 1;
216  expected = value1;
217  result = SDL_setenv(name, value1, overwrite);
218  SDLTest_AssertPass("Call to SDL_setenv('%s','%s', %i)", name, value1, overwrite);
219  SDLTest_AssertCheck(result == 0, "Check result, expected: 0, got: %i", result);
220 
221  /* Check value */
222  text = SDL_getenv(name);
223  SDLTest_AssertPass("Call to SDL_getenv('%s')", name);
224  SDLTest_AssertCheck(text != NULL, "Verify returned text is not NULL");
225  if (text != NULL) {
227  SDL_strcmp(text, expected) == 0,
228  "Verify returned text, expected: %s, got: %s",
229  expected,
230  text);
231  }
232 
233  /* Negative cases */
234  for (overwrite=0; overwrite <= 1; overwrite++) {
235  result = SDL_setenv(NULL, value1, overwrite);
236  SDLTest_AssertPass("Call to SDL_setenv(NULL,'%s', %i)", value1, overwrite);
237  SDLTest_AssertCheck(result == -1, "Check result, expected: -1, got: %i", result);
238  result = SDL_setenv("", value1, overwrite);
239  SDLTest_AssertPass("Call to SDL_setenv('','%s', %i)", value1, overwrite);
240  SDLTest_AssertCheck(result == -1, "Check result, expected: -1, got: %i", result);
241  result = SDL_setenv("=", value1, overwrite);
242  SDLTest_AssertPass("Call to SDL_setenv('=','%s', %i)", value1, overwrite);
243  SDLTest_AssertCheck(result == -1, "Check result, expected: -1, got: %i", result);
244  result = SDL_setenv(name, NULL, overwrite);
245  SDLTest_AssertPass("Call to SDL_setenv('%s', NULL, %i)", name, overwrite);
246  SDLTest_AssertCheck(result == -1, "Check result, expected: -1, got: %i", result);
247  }
248 
249  /* Clean up */
250  SDL_free(value1);
251  SDL_free(value2);
252 
253  return TEST_COMPLETED;
254 }
255 
256 /**
257  * @brief Call to SDL_sscanf
258  */
259 #undef SDL_sscanf
260 int
261 stdlib_sscanf(void *arg)
262 {
263  int output;
264  int result;
265  int expected_output;
266  int expected_result;
267 
268  expected_output = output = 123;
269  expected_result = -1;
270  result = SDL_sscanf("", "%i", &output);
271  SDLTest_AssertPass("Call to SDL_sscanf(\"\", \"%%i\", &output)");
272  SDLTest_AssertCheck(expected_output == output, "Check output, expected: %i, got: %i", expected_output, output);
273  SDLTest_AssertCheck(expected_result == result, "Check return value, expected: %i, got: %i", expected_result, result);
274 
275  expected_output = output = 123;
276  expected_result = 0;
277  result = SDL_sscanf("a", "%i", &output);
278  SDLTest_AssertPass("Call to SDL_sscanf(\"a\", \"%%i\", &output)");
279  SDLTest_AssertCheck(expected_output == output, "Check output, expected: %i, got: %i", expected_output, output);
280  SDLTest_AssertCheck(expected_result == result, "Check return value, expected: %i, got: %i", expected_result, result);
281 
282  output = 123;
283  expected_output = 2;
284  expected_result = 1;
285  result = SDL_sscanf("2", "%i", &output);
286  SDLTest_AssertPass("Call to SDL_sscanf(\"2\", \"%%i\", &output)");
287  SDLTest_AssertCheck(expected_output == output, "Check output, expected: %i, got: %i", expected_output, output);
288  SDLTest_AssertCheck(expected_result == result, "Check return value, expected: %i, got: %i", expected_result, result);
289 
290  return TEST_COMPLETED;
291 }
292 
293 /* ================= Test References ================== */
294 
295 /* Standard C routine test cases */
297  { (SDLTest_TestCaseFp)stdlib_strlcpy, "stdlib_strlcpy", "Call to SDL_strlcpy", TEST_ENABLED };
298 
300  { (SDLTest_TestCaseFp)stdlib_snprintf, "stdlib_snprintf", "Call to SDL_snprintf", TEST_ENABLED };
301 
303  { (SDLTest_TestCaseFp)stdlib_getsetenv, "stdlib_getsetenv", "Call to SDL_getenv and SDL_setenv", TEST_ENABLED };
304 
306  { (SDLTest_TestCaseFp)stdlib_sscanf, "stdlib_sscanf", "Call to SDL_sscanf", TEST_ENABLED };
307 
308 /* Sequence of Standard C routine test cases */
311 };
312 
313 /* Standard C routine test suite (global) */
315  "Stdlib",
316  NULL,
317  stdlibTests,
318  NULL
319 };
static const SDLTest_TestCaseReference stdlibTest3
#define SDL_strlcpy
GLuint64EXT * result
static const SDLTest_TestCaseReference * stdlibTests[]
Sint32 SDLTest_RandomIntegerInRange(Sint32 min, Sint32 max)
static const SDLTest_TestCaseReference stdlibTest2
void SDLTest_AssertPass(SDL_PRINTF_FORMAT_STRING const char *assertDescription,...) SDL_PRINTF_VARARG_FUNC(1)
Explicitly pass without checking an assertion condition. Updates assertion counter.
SDLTest_TestSuiteReference stdlibTestSuite
int stdlib_strlcpy(void *arg)
Call to SDL_strlcpy.
static const SDLTest_TestCaseReference stdlibTest1
GLuint const GLchar * name
#define SDL_setenv
int(* SDLTest_TestCaseFp)(void *arg)
char * SDLTest_RandomAsciiStringOfSize(int size)
int SDLTest_AssertCheck(int assertCondition, SDL_PRINTF_FORMAT_STRING const char *assertDescription,...) SDL_PRINTF_VARARG_FUNC(2)
Assert for test cases that logs but does not break execution flow on failures. Updates assertion coun...
#define SDL_free
int stdlib_getsetenv(void *arg)
Call to SDL_getenv and SDL_setenv.
int stdlib_snprintf(void *arg)
Call to SDL_snprintf.
static const SDLTest_TestCaseReference stdlibTest4
#define SDL_sscanf
#define TEST_COMPLETED
#define SDL_getenv
#define TEST_ENABLED
#define NULL
Definition: begin_code.h:164
static char text[MAX_TEXT_LENGTH]
Definition: testime.c:47
int stdlib_sscanf(void *arg)
Call to SDL_sscanf.
#define SDL_strlen
GLuint counter
void SDLTest_Log(SDL_PRINTF_FORMAT_STRING const char *fmt,...) SDL_PRINTF_VARARG_FUNC(1)
Prints given message with a timestamp in the TEST category and INFO priority.
Definition: SDL_test_log.c:85
#define SDL_snprintf
#define SDL_strcmp