• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright © 2015 Samsung Electronics Co., Ltd
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining
5  * a copy of this software and associated documentation files (the
6  * "Software"), to deal in the Software without restriction, including
7  * without limitation the rights to use, copy, modify, merge, publish,
8  * distribute, sublicense, and/or sell copies of the Software, and to
9  * permit persons to whom the Software is furnished to do so, subject to
10  * the following conditions:
11  *
12  * The above copyright notice and this permission notice (including the
13  * next paragraph) shall be included in all copies or substantial
14  * portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19  * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
20  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
21  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
22  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23  * SOFTWARE.
24  */
25 
26 #include "config.h"
27 
28 /*
29  * A simple file to show tests being setup and run.
30  */
31 
32 #include <stddef.h>
33 #include <stdlib.h>
34 #include <string.h>
35 #include <unistd.h>
36 
37 #include "zunitc/zunitc.h"
38 
39 /*
40  * The SKIP and FAIL sets of tests are those that will cause 'make check'
41  * to fail so are disabled by default. They can be re-enabled when working
42  * on the test framework itself.
43  */
44 
45 /* #define ENABLE_FAIL_TESTS */
46 /* #define ENABLE_SKIP_TESTS */
47 
ZUC_TEST(base_test,math_is_sane)48 ZUC_TEST(base_test, math_is_sane)
49 {
50 	ZUC_ASSERT_EQ(4, 2 + 2);
51 }
52 
ZUC_TEST(base_test,math_is_hard)53 ZUC_TEST(base_test, math_is_hard)
54 {
55 	ZUC_TRACEPOINT("Tracepoint here.");
56 
57 	ZUC_TRACEPOINT("Checking %d", 4);
58 
59 #ifdef ENABLE_FAIL_TESTS
60 
61 	ZUC_ASSERT_EQ(5, 2 + 2);
62 	ZUC_TRACEPOINT("flip %1.3f", 3.1415927); /* not seen */
63 #endif
64 }
65 
66 #ifdef ENABLE_FAIL_TESTS
ZUC_TEST(base_test,tracepoint_after_assert)67 ZUC_TEST(base_test, tracepoint_after_assert)
68 {
69 	ZUC_TRACEPOINT("Should be seen in output");
70 
71 	ZUC_ASSERT_EQ(5, 2 + 2);
72 
73 	ZUC_TRACEPOINT("Should NOT be seen in output");
74 }
75 #endif
76 
77 #ifdef ENABLE_FAIL_TESTS
ZUC_TEST(base_test,math_is_more_hard)78 ZUC_TEST(base_test, math_is_more_hard)
79 {
80 	ZUC_ASSERT_EQ(5, 2 + 2);
81 }
82 
ZUC_TEST(base_test,math_is_more_hard2)83 ZUC_TEST(base_test, math_is_more_hard2)
84 {
85 	ZUC_ASSERT_EQ(7, 9);
86 }
87 #endif
88 
ZUC_TEST(base_test,time_counted)89 ZUC_TEST(base_test, time_counted)
90 {
91 	ZUC_TRACEPOINT("Never seen");
92 
93 	ZUC_TRACEPOINT("Sleepy Time %d", 10000 * 5);
94 	ZUC_ASSERT_EQ(0, usleep(10000 * 5)); /* 50ms to show up in reporting */
95 }
96 
ZUC_TEST(other_test,math_monkey)97 ZUC_TEST(other_test, math_monkey)
98 {
99 	ZUC_ASSERT_TRUE(1);
100 	ZUC_ASSERT_TRUE(3);
101 	ZUC_ASSERT_FALSE(0);
102 
103 	ZUC_ASSERT_TRUE(1);
104 	ZUC_ASSERT_TRUE(3);
105 	ZUC_ASSERT_FALSE(0);
106 
107 	ZUC_ASSERT_EQ(5, 2 + 3);
108 	ZUC_ASSERT_EQ(5, 2 + 3);
109 
110 	int b = 9;
111 	ZUC_ASSERT_NE(1, 2);
112 	ZUC_ASSERT_NE(b, b + 2);
113 
114 	ZUC_ASSERT_NE(1, 2);
115 	ZUC_ASSERT_NE(b, b + 1);
116 
117 	ZUC_ASSERT_LT(1, 2);
118 	ZUC_ASSERT_LT(1, 3);
119 
120 	ZUC_ASSERT_LE(1, 2);
121 	ZUC_ASSERT_LE(1, 3);
122 
123 	ZUC_ASSERT_LE(1, 1);
124 	ZUC_ASSERT_LE(1, 1);
125 
126 	ZUC_ASSERT_GT(2, 1);
127 	ZUC_ASSERT_GT(3, 1);
128 
129 	ZUC_ASSERT_GE(1, 1);
130 	ZUC_ASSERT_GE(1, 1);
131 
132 	ZUC_ASSERT_GE(2, 1);
133 	ZUC_ASSERT_GE(3, 1);
134 }
135 
136 static void
force_fatal_failure(void)137 force_fatal_failure(void)
138 {
139 #ifdef ENABLE_FAIL_TESTS
140 	bool expected_to_fail_here = true;
141 	ZUC_ASSERT_FALSE(expected_to_fail_here);
142 
143 	ZUC_FATAL("Should never reach here");
144 	ZUC_ASSERT_NE(1, 1);
145 #endif
146 }
147 
148 #ifdef ENABLE_FAIL_TESTS
ZUC_TEST(infrastructure,fail_keeps_testing)149 ZUC_TEST(infrastructure, fail_keeps_testing)
150 {
151 	ZUC_FATAL("Should always reach here");
152 	ZUC_ASSERT_NE(1, 1); /* in case ZUC_FATAL doesn't work. */
153 }
154 #endif
155 
156 #ifdef ENABLE_FAIL_TESTS
ZUC_TEST(infrastructure,fatal_stops_test)157 ZUC_TEST(infrastructure, fatal_stops_test)
158 {
159 	ZUC_FATAL("Time to kill testing");
160 
161 	ZUC_FATAL("Should never reach here");
162 	ZUC_ASSERT_NE(1, 1); /* in case ZUC_FATAL doesn't work. */
163 }
164 #endif
165 
166 #ifdef ENABLE_SKIP_TESTS
ZUC_TEST(infrastructure,skip_stops_test)167 ZUC_TEST(infrastructure, skip_stops_test)
168 {
169 	ZUC_SKIP("Time to skip testing");
170 
171 	ZUC_FATAL("Should never reach here");
172 	ZUC_ASSERT_NE(1, 1); /* in case ZUC_FATAL doesn't work. */
173 }
174 #endif
175 
176 struct fixture_data {
177 	int case_counter;
178 	int test_counter;
179 };
180 
181 static struct fixture_data fixture_info = {0, 0};
182 
183 static void *
complex_test_set_up_case(const void * data)184 complex_test_set_up_case(const void *data)
185 {
186 	fixture_info.case_counter++;
187 	return &fixture_info;
188 }
189 
190 static void
complex_test_tear_down_case(void * data)191 complex_test_tear_down_case(void *data)
192 {
193 	ZUC_ASSERT_TRUE(&fixture_info == data);
194 	fixture_info.case_counter--;
195 }
196 
197 static void *
complex_test_set_up(void * data)198 complex_test_set_up(void *data)
199 {
200 	fixture_info.test_counter = fixture_info.case_counter;
201 	return &fixture_info;
202 }
203 
204 static void
complex_test_tear_down(void * data)205 complex_test_tear_down(void *data)
206 {
207 	ZUC_ASSERT_EQ(1, fixture_info.case_counter);
208 }
209 
210 struct zuc_fixture complex_test = {
211 	.set_up = complex_test_set_up,
212 	.tear_down = complex_test_tear_down,
213 	.set_up_test_case = complex_test_set_up_case,
214 	.tear_down_test_case = complex_test_tear_down_case
215 };
216 
217 /*
218  * Note that these next cases all try to modify the test_counter member,
219  * but the fixture should reset that.
220 */
221 
ZUC_TEST_F(complex_test,bases_cenario,data)222 ZUC_TEST_F(complex_test, bases_cenario, data)
223 {
224 	struct fixture_data *fdata = data;
225 	ZUC_ASSERT_NOT_NULL(fdata);
226 
227 	ZUC_ASSERT_EQ(4, 3 + 1);
228 	ZUC_ASSERT_EQ(1, fdata->case_counter);
229 	ZUC_ASSERT_EQ(1, fdata->test_counter);
230 	fdata->test_counter++;
231 	ZUC_ASSERT_EQ(2, fdata->test_counter);
232 }
233 
ZUC_TEST_F(complex_test,something,data)234 ZUC_TEST_F(complex_test, something, data)
235 {
236 	struct fixture_data *fdata = data;
237 	ZUC_ASSERT_NOT_NULL(fdata);
238 
239 	ZUC_ASSERT_EQ(4, 3 + 1);
240 	ZUC_ASSERT_EQ(1, fdata->case_counter);
241 	ZUC_ASSERT_EQ(1, fdata->test_counter);
242 	fdata->test_counter++;
243 	ZUC_ASSERT_EQ(2, fdata->test_counter);
244 }
245 
ZUC_TEST_F(complex_test,else_here,data)246 ZUC_TEST_F(complex_test, else_here, data)
247 {
248 	struct fixture_data *fdata = data;
249 	ZUC_ASSERT_NOT_NULL(fdata);
250 
251 	ZUC_ASSERT_EQ(4, 3 + 1);
252 	ZUC_ASSERT_EQ(1, fdata->case_counter);
253 	ZUC_ASSERT_EQ(1, fdata->test_counter);
254 	fdata->test_counter++;
255 	ZUC_ASSERT_EQ(2, fdata->test_counter);
256 }
257 
ZUC_TEST(more,DISABLED_not_run)258 ZUC_TEST(more, DISABLED_not_run)
259 {
260 	ZUC_ASSERT_EQ(1, 2);
261 }
262 
ZUC_TEST(more,failure_states)263 ZUC_TEST(more, failure_states)
264 {
265 #ifdef ENABLE_FAIL_TESTS
266 	bool expected_to_fail_here = true;
267 #endif
268 
269 	ZUC_ASSERT_FALSE(zuc_has_failure());
270 
271 #ifdef ENABLE_FAIL_TESTS
272 	ZUC_ASSERT_FALSE(expected_to_fail_here); /* should fail */
273 
274 	ZUC_ASSERT_TRUE(zuc_has_failure());
275 #endif
276 }
277 
ZUC_TEST(more,failure_sub_fatal)278 ZUC_TEST(more, failure_sub_fatal)
279 {
280 	ZUC_ASSERT_FALSE(zuc_has_failure());
281 
282 	force_fatal_failure();
283 
284 #ifdef ENABLE_FAIL_TESTS
285 	ZUC_ASSERT_TRUE(zuc_has_failure());
286 #endif
287 }
288 
ZUC_TEST(pointers,null)289 ZUC_TEST(pointers, null)
290 {
291 	const char *a = NULL;
292 
293 	ZUC_ASSERT_NULL(NULL);
294 	ZUC_ASSERT_NULL(0);
295 	ZUC_ASSERT_NULL(a);
296 }
297 
298 #ifdef ENABLE_FAIL_TESTS
ZUC_TEST(pointers,null_fail)299 ZUC_TEST(pointers, null_fail)
300 {
301 	const char *a = "a";
302 
303 	ZUC_ASSERT_NULL(!NULL);
304 	ZUC_ASSERT_NULL(!0);
305 	ZUC_ASSERT_NULL(a);
306 }
307 #endif
308 
ZUC_TEST(pointers,not_null)309 ZUC_TEST(pointers, not_null)
310 {
311 	const char *a = "a";
312 
313 	ZUC_ASSERT_NOT_NULL(!NULL);
314 	ZUC_ASSERT_NOT_NULL(!0);
315 	ZUC_ASSERT_NOT_NULL(a);
316 }
317 
318 #ifdef ENABLE_FAIL_TESTS
ZUC_TEST(pointers,not_null_fail)319 ZUC_TEST(pointers, not_null_fail)
320 {
321 	const char *a = NULL;
322 
323 	ZUC_ASSERT_NOT_NULL(NULL);
324 	ZUC_ASSERT_NOT_NULL(0);
325 	ZUC_ASSERT_NOT_NULL(a);
326 }
327 #endif
328 
ZUC_TEST(strings,eq)329 ZUC_TEST(strings, eq)
330 {
331 	/* Note that we use strdup() to ensure different addresses. */
332 	char *str_a = strdup("a");
333 	const char *str_nil = NULL;
334 
335 	ZUC_ASSERT_STREQ(str_a, str_a);
336 	ZUC_ASSERT_STREQ("a", str_a);
337 	ZUC_ASSERT_STREQ(str_a, "a");
338 
339 	ZUC_ASSERT_STREQ(str_nil, str_nil);
340 	ZUC_ASSERT_STREQ(NULL, str_nil);
341 	ZUC_ASSERT_STREQ(str_nil, NULL);
342 
343 	free(str_a);
344 }
345 
346 #ifdef ENABLE_FAIL_TESTS
ZUC_TEST(strings,eq_fail)347 ZUC_TEST(strings, eq_fail)
348 {
349 	/* Note that we use strdup() to ensure different addresses. */
350 	char *str_a = strdup("a");
351 	char *str_b = strdup("b");
352 	const char *str_nil = NULL;
353 
354 	ZUC_ASSERT_STREQ(str_a, str_b);
355 	ZUC_ASSERT_STREQ("b", str_a);
356 	ZUC_ASSERT_STREQ(str_a, "b");
357 
358 	ZUC_ASSERT_STREQ(str_nil, str_a);
359 	ZUC_ASSERT_STREQ(str_nil, str_b);
360 	ZUC_ASSERT_STREQ(str_a, str_nil);
361 	ZUC_ASSERT_STREQ(str_b, str_nil);
362 
363 	ZUC_ASSERT_STREQ(NULL, str_a);
364 	ZUC_ASSERT_STREQ(NULL, str_b);
365 	ZUC_ASSERT_STREQ(str_a, NULL);
366 	ZUC_ASSERT_STREQ(str_b, NULL);
367 
368 	free(str_a);
369 	free(str_b);
370 }
371 #endif
372 
ZUC_TEST(strings,ne)373 ZUC_TEST(strings, ne)
374 {
375 	/* Note that we use strdup() to ensure different addresses. */
376 	char *str_a = strdup("a");
377 	char *str_b = strdup("b");
378 	const char *str_nil = NULL;
379 
380 	ZUC_ASSERT_STRNE(str_a, str_b);
381 	ZUC_ASSERT_STRNE("b", str_a);
382 	ZUC_ASSERT_STRNE(str_a, "b");
383 
384 	ZUC_ASSERT_STRNE(str_nil, str_a);
385 	ZUC_ASSERT_STRNE(str_nil, str_b);
386 	ZUC_ASSERT_STRNE(str_a, str_nil);
387 	ZUC_ASSERT_STRNE(str_b, str_nil);
388 
389 	ZUC_ASSERT_STRNE(NULL, str_a);
390 	ZUC_ASSERT_STRNE(NULL, str_b);
391 	ZUC_ASSERT_STRNE(str_a, NULL);
392 	ZUC_ASSERT_STRNE(str_b, NULL);
393 
394 	free(str_a);
395 	free(str_b);
396 }
397 
398 #ifdef ENABLE_FAIL_TESTS
ZUC_TEST(strings,ne_fail01)399 ZUC_TEST(strings, ne_fail01)
400 {
401 	/* Note that we use strdup() to ensure different addresses. */
402 	char *str_a = strdup("a");
403 
404 	ZUC_ASSERTG_STRNE(str_a, str_a, err);
405 
406 err:
407 	free(str_a);
408 }
409 
ZUC_TEST(strings,ne_fail02)410 ZUC_TEST(strings, ne_fail02)
411 {
412 	/* Note that we use strdup() to ensure different addresses. */
413 	char *str_a = strdup("a");
414 
415 	ZUC_ASSERTG_STRNE("a", str_a, err);
416 
417 err:
418 	free(str_a);
419 }
420 
ZUC_TEST(strings,ne_fail03)421 ZUC_TEST(strings, ne_fail03)
422 {
423 	/* Note that we use strdup() to ensure different addresses. */
424 	char *str_a = strdup("a");
425 
426 	ZUC_ASSERTG_STRNE(str_a, "a", err);
427 
428 err:
429 	free(str_a);
430 }
431 
ZUC_TEST(strings,ne_fail04)432 ZUC_TEST(strings, ne_fail04)
433 {
434 	const char *str_nil = NULL;
435 
436 	ZUC_ASSERT_STRNE(str_nil, str_nil);
437 }
438 
ZUC_TEST(strings,ne_fail05)439 ZUC_TEST(strings, ne_fail05)
440 {
441 	const char *str_nil = NULL;
442 
443 	ZUC_ASSERT_STRNE(NULL, str_nil);
444 }
445 
ZUC_TEST(strings,ne_fail06)446 ZUC_TEST(strings, ne_fail06)
447 {
448 	const char *str_nil = NULL;
449 
450 	ZUC_ASSERT_STRNE(str_nil, NULL);
451 }
452 #endif
453 
ZUC_TEST(base_test,later)454 ZUC_TEST(base_test, later)
455 {
456 	/* an additional test for the same case but later in source */
457 	ZUC_ASSERT_EQ(3, 5 - 2);
458 }
459 
ZUC_TEST(base_test,zed)460 ZUC_TEST(base_test, zed)
461 {
462 	/* an additional test for the same case but later in source */
463 	ZUC_ASSERT_EQ(3, 5 - 2);
464 }
465