v / vlib / cli
Raw file | 222 loc (202 sloc) | 4.34 KB | Latest commit hash 51f4d9939
1import cli
2
3fn 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
12fn 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
21fn 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
33fn if_subcommands_parse_args_func(cmd cli.Command) ! {
34 assert cmd.name == 'subcommand' && compare_arrays(cmd.args, ['arg0', 'arg1'])
35}
36
37fn 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
45fn 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
54fn flag_should_be_set(cmd cli.Command) ! {
55 flag := cmd.flags.get_string('flag')!
56 assert flag == 'value'
57}
58
59fn 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
71fn 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
84fn 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
98fn 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
105fn 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
121fn 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
138fn flag_is_set_in_subcommand(cmd cli.Command) ! {
139 flag := cmd.flags.get_string('flag') or { panic(err) }
140 assert flag == 'value'
141}
142
143fn 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
160fn 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
178fn 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
200fn empty_func(cmd cli.Command) ! {
201}
202
203fn 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
212fn 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}