1 | import cli |
2 | |
3 | fn test_if_command_parses_empty_args() { |
4 | mut cmd := cli.Command{ |
5 | name: 'command' |
6 | execute: empty_func |
7 | } |
8 | cmd.parse(['command']) |
9 | assert cmd.name == 'command' && compare_arrays(cmd.args, []) |
10 | } |
11 | |
12 | fn test_if_command_parses_args() { |
13 | mut cmd := cli.Command{ |
14 | name: 'command' |
15 | execute: empty_func |
16 | } |
17 | cmd.parse(['command', 'arg0', 'arg1']) |
18 | assert cmd.name == 'command' && compare_arrays(cmd.args, ['arg0', 'arg1']) |
19 | } |
20 | |
21 | fn test_if_subcommands_parse_args() { |
22 | mut cmd := cli.Command{ |
23 | name: 'command' |
24 | } |
25 | subcmd := cli.Command{ |
26 | name: 'subcommand' |
27 | execute: if_subcommands_parse_args_func |
28 | } |
29 | cmd.add_command(subcmd) |
30 | cmd.parse(['command', 'subcommand', 'arg0', 'arg1']) |
31 | } |
32 | |
33 | fn if_subcommands_parse_args_func(cmd cli.Command) ! { |
34 | assert cmd.name == 'subcommand' && compare_arrays(cmd.args, ['arg0', 'arg1']) |
35 | } |
36 | |
37 | fn test_if_command_has_default_help_subcommand() { |
38 | mut cmd := cli.Command{ |
39 | name: 'command' |
40 | } |
41 | cmd.parse(['command']) |
42 | assert has_command(cmd, 'help') |
43 | } |
44 | |
45 | fn test_if_command_has_default_version_subcommand_if_version_is_set() { |
46 | mut cmd := cli.Command{ |
47 | name: 'command' |
48 | version: '1.0.0' |
49 | } |
50 | cmd.parse(['command']) |
51 | assert has_command(cmd, 'version') |
52 | } |
53 | |
54 | fn flag_should_be_set(cmd cli.Command) ! { |
55 | flag := cmd.flags.get_string('flag')! |
56 | assert flag == 'value' |
57 | } |
58 | |
59 | fn test_if_flag_gets_set() { |
60 | mut cmd := cli.Command{ |
61 | name: 'command' |
62 | execute: flag_should_be_set |
63 | } |
64 | cmd.add_flag(cli.Flag{ |
65 | flag: .string |
66 | name: 'flag' |
67 | }) |
68 | cmd.parse(['command', '-flag', 'value']) |
69 | } |
70 | |
71 | fn test_if_flag_gets_set_with_abbrev() { |
72 | mut cmd := cli.Command{ |
73 | name: 'command' |
74 | execute: flag_should_be_set |
75 | } |
76 | cmd.add_flag(cli.Flag{ |
77 | flag: .string |
78 | name: 'flag' |
79 | abbrev: 'f' |
80 | }) |
81 | cmd.parse(['command', '-f', 'value']) |
82 | } |
83 | |
84 | fn test_if_flag_gets_set_with_long_arg() { |
85 | mut cmd := cli.Command{ |
86 | name: 'command' |
87 | execute: flag_should_be_set |
88 | posix_mode: true |
89 | } |
90 | cmd.add_flag(cli.Flag{ |
91 | flag: .string |
92 | name: 'flag' |
93 | abbrev: 'f' |
94 | }) |
95 | cmd.parse(['command', '--flag', 'value']) |
96 | } |
97 | |
98 | fn flag_should_have_value_of_42(cmd cli.Command) ! { |
99 | flag := cmd.flags.get_string('flag')! |
100 | assert flag == 'value' |
101 | value := cmd.flags.get_int('value')! |
102 | assert value == 42 |
103 | } |
104 | |
105 | fn test_if_multiple_flags_get_set() { |
106 | mut cmd := cli.Command{ |
107 | name: 'command' |
108 | execute: flag_should_have_value_of_42 |
109 | } |
110 | cmd.add_flag(cli.Flag{ |
111 | flag: .string |
112 | name: 'flag' |
113 | }) |
114 | cmd.add_flag(cli.Flag{ |
115 | flag: .int |
116 | name: 'value' |
117 | }) |
118 | cmd.parse(['command', '-flag', 'value', '-value', '42']) |
119 | } |
120 | |
121 | fn test_if_required_flags_get_set() { |
122 | mut cmd := cli.Command{ |
123 | name: 'command' |
124 | execute: flag_should_have_value_of_42 |
125 | } |
126 | cmd.add_flag(cli.Flag{ |
127 | flag: .string |
128 | name: 'flag' |
129 | }) |
130 | cmd.add_flag(cli.Flag{ |
131 | flag: .int |
132 | name: 'value' |
133 | required: true |
134 | }) |
135 | cmd.parse(['command', '-flag', 'value', '-value', '42']) |
136 | } |
137 | |
138 | fn flag_is_set_in_subcommand(cmd cli.Command) ! { |
139 | flag := cmd.flags.get_string('flag') or { panic(err) } |
140 | assert flag == 'value' |
141 | } |
142 | |
143 | fn test_if_flag_gets_set_in_subcommand() { |
144 | mut cmd := cli.Command{ |
145 | name: 'command' |
146 | execute: empty_func |
147 | } |
148 | mut subcmd := cli.Command{ |
149 | name: 'subcommand' |
150 | execute: flag_is_set_in_subcommand |
151 | } |
152 | subcmd.add_flag(cli.Flag{ |
153 | flag: .string |
154 | name: 'flag' |
155 | }) |
156 | cmd.add_command(subcmd) |
157 | cmd.parse(['command', 'subcommand', '-flag', 'value']) |
158 | } |
159 | |
160 | fn test_if_global_flag_gets_set_in_subcommand() { |
161 | mut cmd := cli.Command{ |
162 | name: 'command' |
163 | execute: empty_func |
164 | } |
165 | cmd.add_flag(cli.Flag{ |
166 | flag: .string |
167 | name: 'flag' |
168 | global: true |
169 | }) |
170 | subcmd := cli.Command{ |
171 | name: 'subcommand' |
172 | execute: flag_is_set_in_subcommand |
173 | } |
174 | cmd.add_command(subcmd) |
175 | cmd.parse(['command', '-flag', 'value', 'subcommand']) |
176 | } |
177 | |
178 | fn test_command_setup() { |
179 | mut cmd := cli.Command{ |
180 | name: 'root' |
181 | commands: [ |
182 | cli.Command{ |
183 | name: 'child' |
184 | commands: [ |
185 | cli.Command{ |
186 | name: 'child-child' |
187 | }, |
188 | ] |
189 | }, |
190 | ] |
191 | } |
192 | assert isnil(cmd.commands[0].parent) |
193 | assert isnil(cmd.commands[0].commands[0].parent) |
194 | cmd.setup() |
195 | assert cmd.commands[0].parent.name == 'root' |
196 | assert cmd.commands[0].commands[0].parent.name == 'child' |
197 | } |
198 | |
199 | // helper functions |
200 | fn empty_func(cmd cli.Command) ! { |
201 | } |
202 | |
203 | fn has_command(cmd cli.Command, name string) bool { |
204 | for subcmd in cmd.commands { |
205 | if subcmd.name == name { |
206 | return true |
207 | } |
208 | } |
209 | return false |
210 | } |
211 | |
212 | fn compare_arrays(array0 []string, array1 []string) bool { |
213 | if array0.len != array1.len { |
214 | return false |
215 | } |
216 | for i in 0 .. array0.len { |
217 | if array0[i] != array1[i] { |
218 | return false |
219 | } |
220 | } |
221 | return true |
222 | } |