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