diff options
author | Jeroen Ooms <jeroenooms@gmail.com> | 2020-08-28 00:20:47 +0200 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2020-08-28 23:36:55 +0200 |
commit | 70984ce1be4cab6c9e66d196189e9420ff54ac5b (patch) | |
tree | 7892e7b54313b6ee408d16dd570c5b8e64627d52 /tests/libtest/lib1912.c | |
parent | 6e18568ba386ec82e422d238b4976673a8df2524 (diff) | |
download | curl-70984ce1be4cab6c9e66d196189e9420ff54ac5b.tar.gz |
tests: add test1912 with typechecks
Validates that gcc-typecheck macros match the new option type API.
Closes #5873
Diffstat (limited to 'tests/libtest/lib1912.c')
-rw-r--r-- | tests/libtest/lib1912.c | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/tests/libtest/lib1912.c b/tests/libtest/lib1912.c new file mode 100644 index 000000000..44d09baa3 --- /dev/null +++ b/tests/libtest/lib1912.c @@ -0,0 +1,80 @@ +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.haxx.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ***************************************************************************/ +#include "test.h" + +#include "testutil.h" +#include "warnless.h" +#include "memdebug.h" + +#define print_err(name, exp) \ + fprintf(stderr, "Type mismatch for CURLOPT_%s (expected %s)\n", name, exp); + +int test(char *URL) +{ +/* Only test if GCC typechecking is available */ + int error = 0; +#ifdef CURLINC_TYPECHECK_GCC_H + const struct curl_easyoption *o; + for(o = curl_easy_option_next(NULL); + o; + o = curl_easy_option_next(o)) { + /* Test for mismatch OR missing typecheck macros */ + if(curlcheck_long_option(o->id) != + (o->type == CURLOT_LONG || o->type == CURLOT_VALUES)) { + print_err(o->name, "CURLOT_LONG or CURLOT_VALUES"); + error++; + } + if(curlcheck_off_t_option(o->id) != (o->type == CURLOT_OFF_T)) { + print_err(o->name, "CURLOT_OFF_T"); + error++; + } + if(curlcheck_string_option(o->id) != (o->type == CURLOT_STRING)) { + print_err(o->name, "CURLOT_STRING"); + error++; + } + if(curlcheck_slist_option(o->id) != (o->type == CURLOT_SLIST)) { + print_err(o->name, "CURLOT_SLIST"); + error++; + } + if(curlcheck_cb_data_option(o->id) != (o->type == CURLOT_CBPTR)) { + print_err(o->name, "CURLOT_CBPTR"); + error++; + } + /* From here: only test that the type matches if macro is known */ + if(curlcheck_write_cb_option(o->id) && (o->type != CURLOT_FUNCTION)) { + print_err(o->name, "CURLOT_FUNCTION"); + error++; + } + if(curlcheck_conv_cb_option(o->id) && (o->type != CURLOT_FUNCTION)) { + print_err(o->name, "CURLOT_FUNCTION"); + error++; + } + if(curlcheck_postfields_option(o->id) && (o->type != CURLOT_OBJECT)) { + print_err(o->name, "CURLOT_OBJECT"); + error++; + } + /* Todo: no gcc typecheck for CURLOPTTYPE_BLOB types? */ + } +#endif + (void)URL; + return error; +} |