opt: wean off getopt_long, beef up tests.
[ccan] / ccan / opt / test / run-correct-reporting.c
1 /* Make sure when multiple equivalent options, correct one is used for errors */
2
3 #include <ccan/tap/tap.h>
4 #include <stdlib.h>
5 #include <ccan/opt/opt.c>
6 #include <ccan/opt/usage.c>
7 #include <ccan/opt/helpers.c>
8 #include <ccan/opt/parse.c>
9 #include "utils.h"
10
11 int main(int argc, char *argv[])
12 {
13         plan_tests(12);
14
15         /* --aaa without args. */
16         opt_register_arg("-a|--aaa", test_arg, NULL, "aaa", "");
17         ok1(!parse_args(&argc, &argv, "--aaa", NULL));
18         ok1(strstr(err_output, ": --aaa: requires an argument"));
19         free(err_output);
20         err_output = NULL;
21         ok1(!parse_args(&argc, &argv, "-a", NULL));
22         ok1(strstr(err_output, ": -a: requires an argument"));
23         free(err_output);
24         err_output = NULL;
25
26         /* Multiple */
27         opt_register_arg("--bbb|-b|-c|--ccc", test_arg, NULL, "aaa", "");
28         ok1(!parse_args(&argc, &argv, "--bbb", NULL));
29         ok1(strstr(err_output, ": --bbb: requires an argument"));
30         free(err_output);
31         err_output = NULL;
32         ok1(!parse_args(&argc, &argv, "-b", NULL));
33         ok1(strstr(err_output, ": -b: requires an argument"));
34         free(err_output);
35         err_output = NULL;
36         ok1(!parse_args(&argc, &argv, "-c", NULL));
37         ok1(strstr(err_output, ": -c: requires an argument"));
38         free(err_output);
39         err_output = NULL;
40         ok1(!parse_args(&argc, &argv, "--ccc", NULL));
41         ok1(strstr(err_output, ": --ccc: requires an argument"));
42         free(err_output);
43         err_output = NULL;
44
45         return exit_status();
46 }
47