xref: /aosp_15_r20/external/curl/tests/unit/curlcheck.h (revision 6236dae45794135f37c4eb022389c904c8b0090d)
1*6236dae4SAndroid Build Coastguard Worker /***************************************************************************
2*6236dae4SAndroid Build Coastguard Worker  *                                  _   _ ____  _
3*6236dae4SAndroid Build Coastguard Worker  *  Project                     ___| | | |  _ \| |
4*6236dae4SAndroid Build Coastguard Worker  *                             / __| | | | |_) | |
5*6236dae4SAndroid Build Coastguard Worker  *                            | (__| |_| |  _ <| |___
6*6236dae4SAndroid Build Coastguard Worker  *                             \___|\___/|_| \_\_____|
7*6236dae4SAndroid Build Coastguard Worker  *
8*6236dae4SAndroid Build Coastguard Worker  * Copyright (C) Daniel Stenberg, <[email protected]>, et al.
9*6236dae4SAndroid Build Coastguard Worker  *
10*6236dae4SAndroid Build Coastguard Worker  * This software is licensed as described in the file COPYING, which
11*6236dae4SAndroid Build Coastguard Worker  * you should have received as part of this distribution. The terms
12*6236dae4SAndroid Build Coastguard Worker  * are also available at https://curl.se/docs/copyright.html.
13*6236dae4SAndroid Build Coastguard Worker  *
14*6236dae4SAndroid Build Coastguard Worker  * You may opt to use, copy, modify, merge, publish, distribute and/or sell
15*6236dae4SAndroid Build Coastguard Worker  * copies of the Software, and permit persons to whom the Software is
16*6236dae4SAndroid Build Coastguard Worker  * furnished to do so, under the terms of the COPYING file.
17*6236dae4SAndroid Build Coastguard Worker  *
18*6236dae4SAndroid Build Coastguard Worker  * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
19*6236dae4SAndroid Build Coastguard Worker  * KIND, either express or implied.
20*6236dae4SAndroid Build Coastguard Worker  *
21*6236dae4SAndroid Build Coastguard Worker  * SPDX-License-Identifier: curl
22*6236dae4SAndroid Build Coastguard Worker  *
23*6236dae4SAndroid Build Coastguard Worker  ***************************************************************************/
24*6236dae4SAndroid Build Coastguard Worker #include "test.h"
25*6236dae4SAndroid Build Coastguard Worker 
26*6236dae4SAndroid Build Coastguard Worker /* The fail macros mark the current test step as failed, and continue */
27*6236dae4SAndroid Build Coastguard Worker #define fail_if(expr, msg)                                       \
28*6236dae4SAndroid Build Coastguard Worker   do {                                                           \
29*6236dae4SAndroid Build Coastguard Worker     if(expr) {                                                   \
30*6236dae4SAndroid Build Coastguard Worker       fprintf(stderr, "%s:%d FAILED Assertion '%s' met: %s\n",   \
31*6236dae4SAndroid Build Coastguard Worker               __FILE__, __LINE__, #expr, msg);                   \
32*6236dae4SAndroid Build Coastguard Worker       unitfail++;                                                \
33*6236dae4SAndroid Build Coastguard Worker     }                                                            \
34*6236dae4SAndroid Build Coastguard Worker   } while(0)
35*6236dae4SAndroid Build Coastguard Worker 
36*6236dae4SAndroid Build Coastguard Worker #define fail_unless(expr, msg)                             \
37*6236dae4SAndroid Build Coastguard Worker   do {                                                     \
38*6236dae4SAndroid Build Coastguard Worker     if(!(expr)) {                                          \
39*6236dae4SAndroid Build Coastguard Worker       fprintf(stderr, "%s:%d Assertion '%s' FAILED: %s\n", \
40*6236dae4SAndroid Build Coastguard Worker               __FILE__, __LINE__, #expr, msg);             \
41*6236dae4SAndroid Build Coastguard Worker       unitfail++;                                          \
42*6236dae4SAndroid Build Coastguard Worker     }                                                      \
43*6236dae4SAndroid Build Coastguard Worker   } while(0)
44*6236dae4SAndroid Build Coastguard Worker 
45*6236dae4SAndroid Build Coastguard Worker #define verify_memory(dynamic, check, len)                              \
46*6236dae4SAndroid Build Coastguard Worker   do {                                                                  \
47*6236dae4SAndroid Build Coastguard Worker     if(dynamic && memcmp(dynamic, check, len)) {                        \
48*6236dae4SAndroid Build Coastguard Worker       fprintf(stderr, "%s:%d Memory buffer FAILED match size %d. "      \
49*6236dae4SAndroid Build Coastguard Worker               "'%s' is not\n", __FILE__, __LINE__, len,                 \
50*6236dae4SAndroid Build Coastguard Worker               hexdump((const unsigned char *)check, len));              \
51*6236dae4SAndroid Build Coastguard Worker       fprintf(stderr, "%s:%d the same as '%s'\n", __FILE__, __LINE__,   \
52*6236dae4SAndroid Build Coastguard Worker               hexdump((const unsigned char *)dynamic, len));            \
53*6236dae4SAndroid Build Coastguard Worker       unitfail++;                                                       \
54*6236dae4SAndroid Build Coastguard Worker     }                                                                   \
55*6236dae4SAndroid Build Coastguard Worker   } while(0)
56*6236dae4SAndroid Build Coastguard Worker 
57*6236dae4SAndroid Build Coastguard Worker /* fail() is for when the test case figured out by itself that a check
58*6236dae4SAndroid Build Coastguard Worker    proved a failure */
59*6236dae4SAndroid Build Coastguard Worker #define fail(msg) do {                                                 \
60*6236dae4SAndroid Build Coastguard Worker     fprintf(stderr, "%s:%d test FAILED: '%s'\n",                       \
61*6236dae4SAndroid Build Coastguard Worker             __FILE__, __LINE__, msg);                                  \
62*6236dae4SAndroid Build Coastguard Worker     unitfail++;                                                        \
63*6236dae4SAndroid Build Coastguard Worker   } while(0)
64*6236dae4SAndroid Build Coastguard Worker 
65*6236dae4SAndroid Build Coastguard Worker 
66*6236dae4SAndroid Build Coastguard Worker /* The abort macros mark the current test step as failed, and exit the test */
67*6236dae4SAndroid Build Coastguard Worker #define abort_if(expr, msg)                                     \
68*6236dae4SAndroid Build Coastguard Worker   do {                                                          \
69*6236dae4SAndroid Build Coastguard Worker     if(expr) {                                                  \
70*6236dae4SAndroid Build Coastguard Worker       fprintf(stderr, "%s:%d ABORT assertion '%s' met: %s\n",   \
71*6236dae4SAndroid Build Coastguard Worker               __FILE__, __LINE__, #expr, msg);                  \
72*6236dae4SAndroid Build Coastguard Worker       unitfail++;                                               \
73*6236dae4SAndroid Build Coastguard Worker       goto unit_test_abort;                                     \
74*6236dae4SAndroid Build Coastguard Worker     }                                                           \
75*6236dae4SAndroid Build Coastguard Worker   } while(0)
76*6236dae4SAndroid Build Coastguard Worker 
77*6236dae4SAndroid Build Coastguard Worker #define abort_unless(expr, msg)                                         \
78*6236dae4SAndroid Build Coastguard Worker   do {                                                                  \
79*6236dae4SAndroid Build Coastguard Worker     if(!(expr)) {                                                       \
80*6236dae4SAndroid Build Coastguard Worker       fprintf(stderr, "%s:%d ABORT assertion '%s' failed: %s\n",        \
81*6236dae4SAndroid Build Coastguard Worker               __FILE__, __LINE__, #expr, msg);                          \
82*6236dae4SAndroid Build Coastguard Worker       unitfail++;                                                       \
83*6236dae4SAndroid Build Coastguard Worker       goto unit_test_abort;                                             \
84*6236dae4SAndroid Build Coastguard Worker     }                                                                   \
85*6236dae4SAndroid Build Coastguard Worker   } while(0)
86*6236dae4SAndroid Build Coastguard Worker 
87*6236dae4SAndroid Build Coastguard Worker #define abort_test(msg)                                       \
88*6236dae4SAndroid Build Coastguard Worker   do {                                                        \
89*6236dae4SAndroid Build Coastguard Worker     fprintf(stderr, "%s:%d test ABORTED: '%s'\n",             \
90*6236dae4SAndroid Build Coastguard Worker             __FILE__, __LINE__, msg);                         \
91*6236dae4SAndroid Build Coastguard Worker     unitfail++;                                               \
92*6236dae4SAndroid Build Coastguard Worker     goto unit_test_abort;                                     \
93*6236dae4SAndroid Build Coastguard Worker   } while(0)
94*6236dae4SAndroid Build Coastguard Worker 
95*6236dae4SAndroid Build Coastguard Worker 
96*6236dae4SAndroid Build Coastguard Worker #define UNITTEST_START                          \
97*6236dae4SAndroid Build Coastguard Worker   CURLcode test(char *arg)                      \
98*6236dae4SAndroid Build Coastguard Worker   {                                             \
99*6236dae4SAndroid Build Coastguard Worker     (void)arg;                                  \
100*6236dae4SAndroid Build Coastguard Worker     if(unit_setup()) {                          \
101*6236dae4SAndroid Build Coastguard Worker       fail("unit_setup() FAILURE");             \
102*6236dae4SAndroid Build Coastguard Worker     }                                           \
103*6236dae4SAndroid Build Coastguard Worker     else {
104*6236dae4SAndroid Build Coastguard Worker 
105*6236dae4SAndroid Build Coastguard Worker #define UNITTEST_STOP                           \
106*6236dae4SAndroid Build Coastguard Worker     goto unit_test_abort; /* avoid warning */   \
107*6236dae4SAndroid Build Coastguard Worker unit_test_abort:                                \
108*6236dae4SAndroid Build Coastguard Worker     unit_stop();                                \
109*6236dae4SAndroid Build Coastguard Worker   }                                             \
110*6236dae4SAndroid Build Coastguard Worker   return (CURLcode)unitfail;                    \
111*6236dae4SAndroid Build Coastguard Worker   }
112