v / vlib / flag / go_flag_style_flags_test.v
90 lines · 84 sloc · 2.75 KB · ddb6685d8a0cb498b5031c644f16d05ac3121ced
Raw
1// Test .v (V) parse style
2import flag
3
4const exe_and_go_flag_args = ['/path/to/exe', '-version', '-d', 'ident=val', '-o', '/path/to',
5 '-test', 'abc', '-done', '-define', 'two', '-live', '--flag', '--flag-value=ok']
6const exe_and_go_flag_args_with_tail = ['/path/to/exe', '-version', '--flag', '--flag-value=ok',
7 '-d', 'ident=val', '-test', 'abc', '-done', '-d', 'two', '-live', 'run', '/path/to']
8
9struct Prefs {
10 flag bool
11 flag_value string
12 version bool @[short: v]
13 is_live bool @[long: live]
14 is_done bool @[long: done]
15 test string
16 defines []string @[long: define; short: d]
17 tail []string @[tail]
18 out string @[only: o]
19 not_mapped string = 'not changed'
20}
21
22fn test_go_flag_style() {
23 prefs, _ := flag.to_struct[Prefs](exe_and_go_flag_args, skip: 1, style: .go_flag)!
24 assert prefs.flag
25 assert prefs.flag_value == 'ok'
26 assert prefs.version
27 assert prefs.is_live
28 assert prefs.is_done
29 assert prefs.test == 'abc'
30 assert prefs.defines.len == 2
31 assert prefs.defines[0] == 'ident=val'
32 assert prefs.defines[1] == 'two'
33 assert prefs.tail.len == 0
34 assert prefs.out == '/path/to'
35 assert prefs.not_mapped == 'not changed'
36}
37
38fn test_go_flag_style_no_exe() {
39 prefs, _ := flag.to_struct[Prefs](exe_and_go_flag_args[1..], style: .go_flag)!
40 assert prefs.flag
41 assert prefs.flag_value == 'ok'
42 assert prefs.version
43 assert prefs.is_live
44 assert prefs.is_done
45 assert prefs.test == 'abc'
46 assert prefs.defines.len == 2
47 assert prefs.defines[0] == 'ident=val'
48 assert prefs.defines[1] == 'two'
49 assert prefs.tail.len == 0
50 assert prefs.out == '/path/to'
51 assert prefs.not_mapped == 'not changed'
52}
53
54fn test_go_flag_style_with_tail() {
55 prefs, _ := flag.to_struct[Prefs](exe_and_go_flag_args_with_tail, skip: 1, style: .go_flag)!
56 assert prefs.flag
57 assert prefs.flag_value == 'ok'
58 assert prefs.version
59 assert prefs.is_live
60 assert prefs.is_done
61 assert prefs.test == 'abc'
62 assert prefs.not_mapped == 'not changed'
63 assert prefs.defines.len == 2
64 assert prefs.defines[0] == 'ident=val'
65 assert prefs.defines[1] == 'two'
66 assert prefs.out == ''
67 assert prefs.not_mapped == 'not changed'
68 assert prefs.tail.len == 2
69 assert prefs.tail[0] == 'run'
70 assert prefs.tail[1] == '/path/to'
71}
72
73fn test_go_flag_style_with_tail_no_exe() {
74 prefs, _ := flag.to_struct[Prefs](exe_and_go_flag_args_with_tail[1..], style: .go_flag)!
75 assert prefs.flag
76 assert prefs.flag_value == 'ok'
77 assert prefs.version
78 assert prefs.is_live
79 assert prefs.is_done
80 assert prefs.test == 'abc'
81 assert prefs.not_mapped == 'not changed'
82 assert prefs.defines.len == 2
83 assert prefs.defines[0] == 'ident=val'
84 assert prefs.defines[1] == 'two'
85 assert prefs.out == ''
86 assert prefs.not_mapped == 'not changed'
87 assert prefs.tail.len == 2
88 assert prefs.tail[0] == 'run'
89 assert prefs.tail[1] == '/path/to'
90}
91