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