| 1 | // Test .v (V) parse style |
| 2 | import flag |
| 3 | |
| 4 | const 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'] |
| 6 | const 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 | |
| 9 | struct 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 | |
| 22 | fn 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 | |
| 38 | fn 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 | |
| 54 | fn 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 | |
| 73 | fn 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 | |