1 /* With errlog == NULL, we never get a "failure". */
2 #include <ccan/tap/tap.h>
4 #include <ccan/opt/opt.c>
5 #include <ccan/opt/usage.c>
6 #include <ccan/opt/helpers.c>
7 #include <ccan/opt/parse.c>
10 struct opt_table some_early_table[] = {
11 OPT_EARLY_WITHOUT_ARG("--verbose|-v", test_noarg,
12 "vvv", "Description of verbose"),
13 OPT_EARLY_WITH_ARG("--debug|-d", test_arg, show_arg,
14 "ddd", "Description of debug"),
15 OPT_WITHOUT_ARG("-h|--hhh", test_noarg, "hhh", "Description of hhh"),
19 int main(int argc, char *argv[])
21 const char *myname = argv[0];
25 /* Simple short arg.*/
26 opt_register_noarg("-a", test_noarg, NULL, "All");
27 opt_register_early_noarg("-b", test_noarg, NULL, "All");
29 /* Early parsing doesn't mangle. */
30 ok1(parse_early_args(&argc, &argv, "-a", NULL));
32 ok1(argv[0] == myname);
33 ok1(strcmp(argv[1], "-a") == 0);
35 ok1(test_cb_called == 0);
37 /* ... even if it processes arg. */
38 ok1(parse_early_args(&argc, &argv, "-b", NULL));
40 ok1(argv[0] == myname);
41 ok1(strcmp(argv[1], "-b") == 0);
43 ok1(test_cb_called == 1);
45 ok1(parse_early_args(&argc, &argv, "-ab", NULL));
47 ok1(argv[0] == myname);
48 ok1(strcmp(argv[1], "-ab") == 0);
50 ok1(test_cb_called == 2);
52 ok1(parse_args(&argc, &argv, "-ab", NULL));
54 ok1(argv[0] == myname);
56 ok1(test_cb_called == 3);
58 opt_register_table(some_early_table, "Some early args");
59 ok1(parse_early_args(&argc, &argv, "--verbose", "-dddd", "-h", NULL));
61 ok1(argv[0] == myname);
62 ok1(strcmp(argv[1], "--verbose") == 0);
63 ok1(strcmp(argv[2], "-dddd") == 0);
64 ok1(strcmp(argv[3], "-h") == 0);
66 ok1(test_cb_called == 5);
68 ok1(parse_args(&argc, &argv, "--verbose", "-d", "ddd", "-h", NULL));
70 ok1(argv[0] == myname);
72 ok1(test_cb_called == 6);
74 /* parse_args allocates argv */