iscsi, nfs, opt, tap: use config.h instead of defining _GNU_SOURCE.
[ccan] / ccan / opt / test / run-usage.c
1 #include <ccan/tap/tap.h>
2 #include <stdarg.h>
3 #include <setjmp.h>
4 #include <stdlib.h>
5 #include <stdarg.h>
6 #include "utils.h"
7 #include <ccan/opt/opt.c>
8 #include <ccan/opt/usage.c>
9 #include <ccan/opt/helpers.c>
10 #include <ccan/opt/parse.c>
11
12 static char *my_cb(void *p)
13 {
14         return NULL;
15 }
16
17 static void reset_options(void)
18 {
19         free(opt_table);
20         opt_table = NULL;
21         opt_count = opt_num_short = opt_num_short_arg = opt_num_long = 0;
22 }
23
24 /* Test helpers. */
25 int main(int argc, char *argv[])
26 {
27         char *output;
28         char *longname = strdup("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
29         char *shortname = strdup("shortname");
30
31         plan_tests(48);
32         opt_register_table(subtables, NULL);
33         opt_register_noarg("--kkk|-k", my_cb, NULL, "magic kkk option");
34         opt_register_noarg("-?", opt_usage_and_exit, "<MyArgs>...",
35                            "This message");
36         opt_register_arg("--longname", opt_set_charp, opt_show_charp,
37                          &longname, "a really long option default");
38         opt_register_arg("--shortname", opt_set_charp, opt_show_charp,
39                          &shortname, "a short option default");
40         output = opt_usage("my name", "ExTrA Args");
41         diag("%s", output);
42         ok1(strstr(output, "Usage: my name"));
43         ok1(strstr(output, "--jjj|-j|--lll|-l <arg>"));
44         ok1(strstr(output, "ExTrA Args"));
45         ok1(strstr(output, "-a "));
46         ok1(strstr(output, " Description of a\n"));
47         ok1(strstr(output, "-b <arg>"));
48         ok1(strstr(output, " Description of b (default: b)\n"));
49         ok1(strstr(output, "--ddd "));
50         ok1(strstr(output, " Description of ddd\n"));
51         ok1(strstr(output, "--eee <filename> "));
52         ok1(strstr(output, " (default: eee)\n"));
53         ok1(strstr(output, "long table options:\n"));
54         ok1(strstr(output, "--ggg|-g "));
55         ok1(strstr(output, " Description of ggg\n"));
56         ok1(strstr(output, "-h|--hhh <arg>"));
57         ok1(strstr(output, " Description of hhh\n"));
58         ok1(strstr(output, "--kkk|-k"));
59         ok1(strstr(output, "magic kkk option"));
60         /* This entry is hidden. */
61         ok1(!strstr(output, "--mmm|-m"));
62         free(output);
63
64         /* NULL should use string from registered options. */
65         output = opt_usage("my name", NULL);
66         diag("%s", output);
67         ok1(strstr(output, "Usage: my name"));
68         ok1(strstr(output, "--jjj|-j|--lll|-l <arg>"));
69         ok1(strstr(output, "<MyArgs>..."));
70         ok1(strstr(output, "-a "));
71         ok1(strstr(output, " Description of a\n"));
72         ok1(strstr(output, "-b <arg>"));
73         ok1(strstr(output, " Description of b (default: b)\n"));
74         ok1(strstr(output, "--ddd "));
75         ok1(strstr(output, " Description of ddd\n"));
76         ok1(strstr(output, "--eee <filename> "));
77         ok1(strstr(output, " (default: eee)\n"));
78         ok1(strstr(output, "long table options:\n"));
79         ok1(strstr(output, "--ggg|-g "));
80         ok1(strstr(output, " Description of ggg\n"));
81         ok1(strstr(output, "-h|--hhh <arg>"));
82         ok1(strstr(output, " Description of hhh\n"));
83         ok1(strstr(output, "--kkk|-k"));
84         ok1(strstr(output, "magic kkk option"));
85         ok1(strstr(output, "--longname"));
86         ok1(strstr(output, "a really long option default"));
87         ok1(strstr(output, "(default: \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"...)"));
88         ok1(strstr(output, "--shortname"));
89         ok1(strstr(output, "a short option default"));
90         ok1(strstr(output, "(default: \"shortname\")"));
91         /* This entry is hidden. */
92         ok1(!strstr(output, "--mmm|-m"));
93         free(output);
94
95         reset_options();
96         /* Empty table test. */
97         output = opt_usage("nothing", NULL);
98         ok1(strstr(output, "Usage: nothing \n"));
99         free(output);
100
101         /* No short args. */
102         opt_register_noarg("--aaa", test_noarg, NULL, "AAAAll");
103         output = opt_usage("onearg", NULL);
104         ok1(strstr(output, "Usage: onearg \n"));
105         ok1(strstr(output, "--aaa"));
106         ok1(strstr(output, "AAAAll"));
107         free(output);
108
109         return exit_status();
110 }