diff options
Diffstat (limited to 'test/testutil/main.c')
-rw-r--r-- | test/testutil/main.c | 94 |
1 files changed, 90 insertions, 4 deletions
diff --git a/test/testutil/main.c b/test/testutil/main.c index 435a3585ce..34abcb2ce7 100644 --- a/test/testutil/main.c +++ b/test/testutil/main.c @@ -8,13 +8,99 @@ */ #include "../testutil.h" +#include "../../e_os.h" +#include "output.h" +#include "tu_local.h" + +#include <string.h> + +static size_t arg_count; +static char **args; +static unsigned char arg_used[1000]; + +static void check_arg_usage(void) +{ + size_t i, n = arg_count < OSSL_NELEM(arg_used) ? arg_count + : OSSL_NELEM(arg_used); + + for (i = 0; i < n; i++) + if (!arg_used[i+1]) + test_printf_stderr("Warning ignored command-line argument %d: %s\n", + i, args[i+1]); + if (i < arg_count) + test_printf_stderr("Warning arguments %zu and later unchecked\n", i); +} int main(int argc, char *argv[]) { - int ret; - setup_test(); + int ret = EXIT_FAILURE; + + test_open_streams(); + + if (!global_init()) { + test_printf_stderr("Global init failed - aborting\n"); + return ret; + } + + arg_count = argc - 1; + args = argv; + + setup_test_framework(); + + if (setup_tests()) + ret = run_tests(argv[0]); + cleanup_tests(); + check_arg_usage(); + + ret = pulldown_test_framework(ret); + test_close_streams(); + return ret; +} + +const char *test_get_program_name(void) +{ + return args[0]; +} + +char *test_get_argument(size_t n) +{ + if (n > arg_count) + return NULL; + if (n + 1 < OSSL_NELEM(arg_used)) + arg_used[n + 1] = 1; + return args[n + 1]; +} + +size_t test_get_argument_count(void) +{ + return arg_count; +} - ret = test_main(argc, argv); +int test_has_option(const char *option) +{ + size_t i; - return finish_test(ret); + for (i = 1; i <= arg_count; i++) + if (strcmp(args[i], option) == 0) { + arg_used[i] = 1; + return 1; + } + return 0; } + +const char *test_get_option_argument(const char *option) +{ + size_t i, n = strlen(option); + + for (i = 1; i <= arg_count; i++) + if (strncmp(args[i], option, n) == 0) { + arg_used[i] = 1; + if (args[i][n] == '\0' && i + 1 < arg_count) { + arg_used[++i] = 1; + return args[i]; + } + return args[i] + n; + } + return NULL; +} + |