mirror of
https://github.com/vlang/v.git
synced 2025-08-03 17:57:59 -04:00
124 lines
4.0 KiB
V
124 lines
4.0 KiB
V
// Test .v_flag_parser (V flag.FlagParser) parse style
|
|
import flag
|
|
|
|
const exe_and_v_flag_parser_args = ['/path/to/exe', '--version', '-p', 'ident=val', '--o', '/path/to',
|
|
'--test', 'abc', '--done', '--pop', 'two', '--live']
|
|
const exe_and_v_flag_parser_args_with_tail = ['/path/to/exe', '--version', '-p', 'ident=val',
|
|
'--test', 'abc', '--done', '-p', 'two', '--live', 'run', '/path/to', 'platforms;android-21']
|
|
const error_wrong_assignment_flags = ['--o=error']
|
|
|
|
struct Prefs {
|
|
version bool @[short: v]
|
|
is_live bool @[long: live]
|
|
is_done bool @[long: done]
|
|
dump_usage bool @[long: 'help'; short: h]
|
|
test string
|
|
pop_flags []string @[long: pop; short: p]
|
|
tail []string @[tail]
|
|
out string @[only: o]
|
|
not_mapped string = 'not changed'
|
|
}
|
|
|
|
fn test_long_v_style() {
|
|
prefs, _ := flag.to_struct[Prefs](exe_and_v_flag_parser_args, skip: 1, style: .v_flag_parser)!
|
|
assert prefs.version
|
|
assert prefs.is_live
|
|
assert prefs.is_done
|
|
assert prefs.dump_usage == false
|
|
assert prefs.test == 'abc'
|
|
assert prefs.pop_flags.len == 2
|
|
assert prefs.pop_flags[0] == 'ident=val'
|
|
assert prefs.pop_flags[1] == 'two'
|
|
assert prefs.tail.len == 0
|
|
assert prefs.out == '/path/to'
|
|
assert prefs.not_mapped == 'not changed'
|
|
}
|
|
|
|
fn test_long_v_style_no_exe() {
|
|
prefs, _ := flag.to_struct[Prefs](exe_and_v_flag_parser_args[1..], style: .v_flag_parser)!
|
|
assert prefs.version
|
|
assert prefs.is_live
|
|
assert prefs.is_done
|
|
assert prefs.dump_usage == false
|
|
assert prefs.test == 'abc'
|
|
assert prefs.pop_flags.len == 2
|
|
assert prefs.pop_flags[0] == 'ident=val'
|
|
assert prefs.pop_flags[1] == 'two'
|
|
assert prefs.tail.len == 0
|
|
assert prefs.out == '/path/to'
|
|
assert prefs.not_mapped == 'not changed'
|
|
}
|
|
|
|
fn test_long_v_style_with_tail() {
|
|
prefs, _ := flag.to_struct[Prefs](exe_and_v_flag_parser_args_with_tail,
|
|
skip: 1
|
|
style: .v_flag_parser
|
|
)!
|
|
assert prefs.version
|
|
assert prefs.is_live
|
|
assert prefs.is_done
|
|
assert prefs.dump_usage == false
|
|
assert prefs.test == 'abc'
|
|
assert prefs.not_mapped == 'not changed'
|
|
assert prefs.pop_flags.len == 2
|
|
assert prefs.pop_flags[0] == 'ident=val'
|
|
assert prefs.pop_flags[1] == 'two'
|
|
assert prefs.out == ''
|
|
assert prefs.not_mapped == 'not changed'
|
|
assert prefs.tail.len == 3
|
|
assert prefs.tail[0] == 'run'
|
|
assert prefs.tail[1] == '/path/to'
|
|
assert prefs.tail[2] == 'platforms;android-21'
|
|
}
|
|
|
|
fn test_long_v_style_with_tail_no_exe() {
|
|
prefs, _ := flag.to_struct[Prefs](exe_and_v_flag_parser_args_with_tail[1..],
|
|
style: .v_flag_parser
|
|
)!
|
|
assert prefs.version
|
|
assert prefs.is_live
|
|
assert prefs.is_done
|
|
assert prefs.dump_usage == false
|
|
assert prefs.test == 'abc'
|
|
assert prefs.not_mapped == 'not changed'
|
|
assert prefs.pop_flags.len == 2
|
|
assert prefs.pop_flags[0] == 'ident=val'
|
|
assert prefs.pop_flags[1] == 'two'
|
|
assert prefs.out == ''
|
|
assert prefs.not_mapped == 'not changed'
|
|
assert prefs.tail.len == 3
|
|
assert prefs.tail[0] == 'run'
|
|
assert prefs.tail[1] == '/path/to'
|
|
assert prefs.tail[2] == 'platforms;android-21'
|
|
}
|
|
|
|
fn test_long_v_style_with_exe_and_short_alias() {
|
|
prefs, _ := flag.to_struct[Prefs](['/path/to/exe', '-h'],
|
|
skip: 1
|
|
style: .v_flag_parser
|
|
)!
|
|
assert prefs.version == false
|
|
assert prefs.is_live == false
|
|
assert prefs.is_done == false
|
|
assert prefs.dump_usage == true
|
|
assert prefs.test == ''
|
|
assert prefs.not_mapped == 'not changed'
|
|
assert prefs.pop_flags.len == 0
|
|
assert prefs.out == ''
|
|
assert prefs.not_mapped == 'not changed'
|
|
assert prefs.tail.len == 0
|
|
}
|
|
|
|
fn test_long_v_style_error_message() {
|
|
if _, _ := flag.to_struct[Prefs](exe_and_v_flag_parser_args[1..], style: .v) {
|
|
assert false, 'flags should not have reached this assert'
|
|
} else {
|
|
assert err.msg() == 'long delimiter `--` encountered in flag `--version` in v (V) style parsing mode. Maybe you meant `.v_flag_parser`?'
|
|
}
|
|
if _, _ := flag.to_struct[Prefs](error_wrong_assignment_flags, style: .v_flag_parser) {
|
|
assert false, 'flags should not have reached this assert'
|
|
} else {
|
|
assert err.msg() == '`=` in flag `--o=error` is not supported in V `flag.FlagParser` (long) style parsing mode. Use `--flag value` instead'
|
|
}
|
|
}
|