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