summaryrefslogtreecommitdiffstats
path: root/test/testutil/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/testutil/main.c')
-rw-r--r--test/testutil/main.c94
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;
+}
+