]> git.ozlabs.org Git - ccan/blob - ccan/opt/test/run-userbits.c
ccan: allow user to set some bits in opt_table.type.
[ccan] / ccan / opt / test / run-userbits.c
1 #include <ccan/tap/tap.h>
2 #include <stdlib.h>
3 #include <ccan/opt/opt.c>
4 #include <ccan/opt/usage.c>
5 #include <ccan/opt/helpers.c>
6 #include <ccan/opt/parse.c>
7 #include "utils.h"
8
9 int main(int argc, char *argv[])
10 {
11         const char *myname = argv[0];
12
13         plan_tests(28);
14
15         opt_register_noarg("-a", test_noarg, NULL, "All");
16         opt_register_noarg("--aaa", test_noarg, NULL, "AAAAll");
17         opt_register_arg("-b|--bbb", test_arg, NULL, "bbb", "AAAAAAll");
18
19         ok1(strcmp(opt_table[0].names, "-a") == 0);
20         ok1(opt_table[0].type == OPT_NOARG);
21         ok1(strcmp(opt_table[1].names, "--aaa") == 0);
22         ok1(opt_table[1].type == OPT_NOARG);
23         ok1(strcmp(opt_table[2].names, "-b|--bbb") == 0);
24         ok1(opt_table[2].type == OPT_HASARG);
25
26         opt_table[0].type |= (1 << OPT_USER_START);
27         opt_table[1].type |= ((1 << OPT_USER_END)-1) - ((1 << OPT_USER_START)-1);
28         opt_table[2].type |= (1 << OPT_USER_END);
29
30         /* Should all work fine! */
31         ok1(parse_args(&argc, &argv, "-a", NULL));
32         ok1(argc == 1);
33         ok1(argv[0] == myname);
34         ok1(test_cb_called == 1);
35
36         ok1(parse_args(&argc, &argv, "--aaa", NULL));
37         ok1(argc == 1);
38         ok1(argv[0] == myname);
39         ok1(test_cb_called == 2);
40
41         /* This one needs an arg. */
42         ok1(parse_args(&argc, &argv, "-b", NULL) == false);
43         ok1(test_cb_called == 2);
44         ok1(parse_args(&argc, &argv, "-b", "bbb", NULL));
45         ok1(argc == 1);
46         ok1(argv[0] == myname);
47         ok1(argv[1] == NULL);
48         ok1(test_cb_called == 3);
49
50         ok1(parse_args(&argc, &argv, "--bbb", "bbb", NULL));
51         ok1(argc == 1);
52         ok1(argv[0] == myname);
53         ok1(argv[1] == NULL);
54         ok1(test_cb_called == 4);
55
56         /* parse_args allocates argv */
57         free(argv);
58         return exit_status();
59 }