summaryrefslogtreecommitdiff
path: root/test.zig
diff options
context:
space:
mode:
Diffstat (limited to 'test.zig')
-rw-r--r--test.zig198
1 files changed, 198 insertions, 0 deletions
diff --git a/test.zig b/test.zig
new file mode 100644
index 0000000..1708353
--- /dev/null
+++ b/test.zig
@@ -0,0 +1,198 @@
1const std = @import("std");
2const clap = @import("clap.zig");
3
4const debug = std.debug;
5const mem = std.mem;
6
7const assert = debug.assert;
8
9const ArgSliceIterator = clap.ArgSliceIterator;
10const Names = clap.Names;
11const Param = clap.Param(u8);
12const Clap = clap.Clap(u8, ArgSliceIterator.Error);
13const Arg = clap.Arg(u8);
14
15fn testNoErr(params: []const Param, args: []const []const u8, results: []const Arg) void {
16 var arg_iter = ArgSliceIterator.init(args);
17 var c = Clap.init(params, &arg_iter.iter);
18
19 for (results) |res| {
20 const arg = (c.next() catch unreachable) orelse unreachable;
21 debug.assert(res.param == arg.param);
22 const expected_value = res.value orelse {
23 debug.assert(arg.value == null);
24 continue;
25 };
26 const actual_value = arg.value orelse unreachable;
27 debug.assert(mem.eql(u8, expected_value, actual_value));
28 }
29
30 if (c.next() catch unreachable) |_| {
31 unreachable;
32 }
33}
34
35test "clap: short" {
36 const params = []Param{
37 Param.init(0, false, Names.short('a')),
38 Param.init(1, false, Names.short('b')),
39 Param.init(2, true, Names.short('c')),
40 };
41
42 const a = &params[0];
43 const b = &params[1];
44 const c = &params[2];
45
46 testNoErr(
47 params,
48 [][]const u8{
49 "-a", "-b", "-ab", "-ba",
50 "-c", "0", "-c=0",
51 "-ac", "0", "-ac=0",
52 },
53 []const Arg{
54 Arg.init(a, null),
55 Arg.init(b, null),
56 Arg.init(a, null),
57 Arg.init(b, null),
58 Arg.init(b, null),
59 Arg.init(a, null),
60 Arg.init(c, "0"),
61 Arg.init(c, "0"),
62 Arg.init(a, null),
63 Arg.init(c, "0"),
64 Arg.init(a, null),
65 Arg.init(c, "0"),
66 },
67 );
68}
69
70test "clap: long" {
71 const params = []Param{
72 Param.init(0, false, Names.long("aa")),
73 Param.init(1, false, Names.long("bb")),
74 Param.init(2, true, Names.long("cc")),
75 };
76
77 const aa = &params[0];
78 const bb = &params[1];
79 const cc = &params[2];
80
81 testNoErr(
82 params,
83 [][]const u8{
84 "--aa", "--bb",
85 "--cc", "0", "--cc=0",
86 },
87 []const Arg{
88 Arg.init(aa, null),
89 Arg.init(bb, null),
90 Arg.init(cc, "0"),
91 Arg.init(cc, "0"),
92 },
93 );
94}
95
96test "clap: bare" {
97 const params = []Param{
98 Param.init(0, false, Names.bare("aa")),
99 Param.init(1, false, Names.bare("bb")),
100 Param.init(2, true, Names.bare("cc")),
101 };
102
103 const aa = &params[0];
104 const bb = &params[1];
105 const cc = &params[2];
106
107 testNoErr(
108 params,
109 [][]const u8{
110 "aa", "bb",
111 "cc", "0", "cc=0",
112 },
113 []const Arg{
114 Arg.init(aa, null),
115 Arg.init(bb, null),
116 Arg.init(cc, "0"),
117 Arg.init(cc, "0"),
118 },
119 );
120}
121
122test "clap: none" {
123 const params = []Param{
124 Param.init(0, true, Names.none()),
125 };
126
127 testNoErr(
128 params,
129 [][]const u8{"aa", "bb"},
130 []const Arg{
131 Arg.init(&params[0], "aa"),
132 Arg.init(&params[0], "bb"),
133 },
134 );
135}
136
137test "clap: all" {
138 const params = []Param{
139 Param.init(0, false, Names{
140 .bare = "aa",
141 .short = 'a',
142 .long = "aa",
143 }),
144 Param.init(1, false, Names{
145 .bare = "bb",
146 .short = 'b',
147 .long = "bb",
148 }),
149 Param.init(2, true, Names{
150 .bare = "cc",
151 .short = 'c',
152 .long = "cc",
153 }),
154 Param.init(3, true, Names.none()),
155 };
156
157 const aa = &params[0];
158 const bb = &params[1];
159 const cc = &params[2];
160 const bare = &params[3];
161
162 testNoErr(
163 params,
164 [][]const u8{
165 "-a", "-b", "-ab", "-ba",
166 "-c", "0", "-c=0",
167 "-ac", "0", "-ac=0",
168 "--aa", "--bb",
169 "--cc", "0", "--cc=0",
170 "aa", "bb",
171 "cc", "0", "cc=0",
172 "something",
173 },
174 []const Arg{
175 Arg.init(aa, null),
176 Arg.init(bb, null),
177 Arg.init(aa, null),
178 Arg.init(bb, null),
179 Arg.init(bb, null),
180 Arg.init(aa, null),
181 Arg.init(cc, "0"),
182 Arg.init(cc, "0"),
183 Arg.init(aa, null),
184 Arg.init(cc, "0"),
185 Arg.init(aa, null),
186 Arg.init(cc, "0"),
187 Arg.init(aa, null),
188 Arg.init(bb, null),
189 Arg.init(cc, "0"),
190 Arg.init(cc, "0"),
191 Arg.init(aa, null),
192 Arg.init(bb, null),
193 Arg.init(cc, "0"),
194 Arg.init(cc, "0"),
195 Arg.init(bare, "something"),
196 },
197 );
198}