v/vlib/cli/command_test.v

174 lines
3.4 KiB
V
Raw Normal View History

2019-11-21 13:03:12 +01:00
import cli
fn test_if_command_parses_empty_args() {
mut cmd := cli.Command{
name: 'command'
execute: empty_func
2019-11-21 13:03:12 +01:00
}
cmd.parse(['command'])
assert cmd.name == 'command' && compare_arrays(cmd.args, [])
2019-11-21 13:03:12 +01:00
}
fn test_if_command_parses_args() {
mut cmd := cli.Command{
name: 'command'
execute: empty_func
2019-11-21 13:03:12 +01:00
}
cmd.parse(['command', 'arg0', 'arg1'])
assert cmd.name == 'command' && compare_arrays(cmd.args, ['arg0', 'arg1'])
2019-11-21 13:03:12 +01:00
}
fn test_if_subcommands_parse_args() {
mut cmd := cli.Command{
name: 'command'
2019-11-21 13:03:12 +01:00
}
subcmd := cli.Command{
name: 'subcommand'
execute: empty_func
2019-11-21 13:03:12 +01:00
}
cmd.add_command(subcmd)
cmd.parse(['command', 'subcommand', 'arg0', 'arg1'])
}
fn if_subcommands_parse_args_func(cmd cli.Command) {
assert cmd.name == 'subcommand' && compare_arrays(cmd.args, ['arg0', 'arg1'])
2019-11-21 13:03:12 +01:00
}
fn test_if_command_has_default_help_subcommand() {
mut cmd := cli.Command{
name: 'command'
2019-11-21 13:03:12 +01:00
}
cmd.parse(['command'])
assert has_command(cmd, 'help')
}
fn test_if_command_has_default_version_subcommand_if_version_is_set() {
mut cmd := cli.Command{
name: 'command'
version: '1.0.0'
2019-11-21 13:03:12 +01:00
}
cmd.parse(['command'])
assert has_command(cmd, 'version')
}
2020-07-18 14:01:54 +02:00
fn flag_should_be_set(cmd cli.Command) ? {
flag := cmd.flags.get_string('flag')?
assert flag == 'value'
}
2019-11-21 13:03:12 +01:00
fn test_if_flag_gets_set() {
mut cmd := cli.Command{
name: 'command'
2020-07-18 14:01:54 +02:00
execute: flag_should_be_set
2019-11-21 13:03:12 +01:00
}
cmd.add_flag(cli.Flag{
flag: .string
name: 'flag'
})
cmd.parse(['command', '-flag', 'value'])
2019-11-21 13:03:12 +01:00
}
fn test_if_flag_gets_set_with_abbrev() {
mut cmd := cli.Command{
name: 'command'
2020-07-18 14:01:54 +02:00
execute: flag_should_be_set
2019-11-21 13:03:12 +01:00
}
cmd.add_flag(cli.Flag{
flag: .string
name: 'flag'
abbrev: 'f'
2019-11-21 13:03:12 +01:00
})
cmd.parse(['command', '-f', 'value'])
cmd.parse(['command', '--flag', 'value'])
2019-11-21 13:03:12 +01:00
}
2020-07-18 14:01:54 +02:00
fn flag_should_have_value_of_42(cmd cli.Command) ? {
flag := cmd.flags.get_string('flag')?
assert flag == 'value'
value := cmd.flags.get_int('value')?
assert value == 42
}
2019-11-21 13:03:12 +01:00
fn test_if_multiple_flags_get_set() {
mut cmd := cli.Command{
name: 'command'
2020-07-18 14:01:54 +02:00
execute: flag_should_have_value_of_42
2019-11-21 13:03:12 +01:00
}
cmd.add_flag(cli.Flag{
flag: .string
name: 'flag'
})
cmd.add_flag(cli.Flag{
flag: .int
name: 'value'
})
cmd.parse(['command', '-flag', 'value', '-value', '42'])
2019-11-21 13:03:12 +01:00
}
2020-07-18 14:01:54 +02:00
fn flag_is_set_in_subcommand(cmd cli.Command) ? {
flag := cmd.flags.get_string('flag') or {
panic(err)
}
assert flag == 'value'
}
2019-11-21 13:03:12 +01:00
fn test_if_flag_gets_set_in_subcommand() {
mut cmd := cli.Command{
name: 'command'
execute: empty_func
2019-11-21 13:03:12 +01:00
}
mut subcmd := cli.Command{
name: 'subcommand'
2020-07-18 14:01:54 +02:00
execute: flag_is_set_in_subcommand
2019-11-21 13:03:12 +01:00
}
subcmd.add_flag(cli.Flag{
flag: .string
name: 'flag'
})
cmd.add_command(subcmd)
cmd.parse(['command', 'subcommand', '-flag', 'value'])
2019-11-21 13:03:12 +01:00
}
fn test_if_global_flag_gets_set_in_subcommand() {
mut cmd := cli.Command{
name: 'command'
execute: empty_func
2019-11-21 13:03:12 +01:00
}
cmd.add_flag(cli.Flag{
flag: .string
name: 'flag'
global: true
2019-11-21 13:03:12 +01:00
})
subcmd := cli.Command{
name: 'subcommand'
2020-07-18 14:01:54 +02:00
execute: flag_is_set_in_subcommand
2019-11-21 13:03:12 +01:00
}
cmd.add_command(subcmd)
cmd.parse(['command', '-flag', 'value', 'subcommand'])
2019-11-21 13:03:12 +01:00
}
// helper functions
fn empty_func(cmd cli.Command) ? {
}
2019-11-21 13:03:12 +01:00
fn has_command(cmd cli.Command, name string) bool {
for subcmd in cmd.commands {
if subcmd.name == name {
return true
}
}
return false
}
fn compare_arrays(array0, array1 []string) bool {
2019-11-21 13:03:12 +01:00
if array0.len != array1.len {
return false
}
for i in 0 .. array0.len {
2019-11-21 13:03:12 +01:00
if array0[i] != array1[i] {
return false
}
}
return true
}