use crate::*; #[test] fn option_help() { let names: Vec = SCRIPT_OPTIONS .lines() .filter(|v| v.contains("() {") && !v.starts_with('_')) .map(|v| v.split_once('(').unwrap().0.to_string()) .collect(); let matrix: Vec> = names .iter() .map(|v| vec!["prog", v.as_str(), "-h"]) .collect(); snapshot_multi!(SCRIPT_OPTIONS, &matrix); } #[test] fn option_eval() { snapshot_multi!( SCRIPT_OPTIONS, [ vec!["prog", "test1"], vec!["prog", "test1", "-a"], vec!["prog", "test1", "-f", "-f"], vec!["prog", "test1", "-e", "e"], vec!["prog", "test1", "--oa", "oa"], vec!["prog", "test1", "--ob", "ob1", "--ob", "ob2"], vec!["prog", "test1", "--oe", "ob1,ob2", "--oe", "ob3"], vec!["prog", "test1", "-o", "ob1", "ob2"], vec!["prog", "test1", "--cc", "abc"], vec!["prog", "test1", "-soa", "soa"], vec!["prog", "test3"], vec!["prog", "test3", "--oe", "oe"], vec!["prog", "test3", "--of", "of"], vec!["prog", "test3", "--cb", "y"], ] ); } #[test] fn option_shorts() { snapshot_multi!( SCRIPT_OPTIONS, [ vec!["prog", "test1", "-af"], vec!["prog", "test1", "-ae", "e"], vec!["prog", "test1", "-afe", "e"], vec!["prog", "test1", "-ao", "v1", "v2"], ] ); } #[test] fn arg_eval() { snapshot_multi!( SCRIPT_ARGS, [ vec!["prog", "cmd_arg", "v1"], vec!["prog", "cmd_multi_arg", "v1", "v2"], vec!["prog", "cmd_arg_with_default"], vec!["prog", "cmd_arg_with_default", "v1"], vec!["prog", "cmd_arg_with_default_fn"], vec!["prog", "cmd_arg_with_choices", "x"], vec!["prog", "cmd_arg_with_choice_fn", "abc"], vec!["prog", "cmd_two_multi_args", "v1", "v2"], vec!["prog", "cmd_two_multi_args", "v1", "v2", "v3"], vec!["prog", "cmd_three_required_args", "v1", "v2", "v3"], ] ); } #[test] fn arg_subcmd_help() { let names: Vec = SCRIPT_ARGS .lines() .filter(|v| v.starts_with("cmd") && v.contains("() {")) .map(|v| v.split_once('(').unwrap().0.to_string()) .collect(); let matrix: Vec> = names .iter() .map(|v| vec!["prog", v.as_str(), "-h"]) .collect(); snapshot_multi!(SCRIPT_ARGS, &matrix); } #[test] fn arg_no_param() { snapshot_multi!( SCRIPT_ARGS, [ vec!["prog", "cmd", "v1", "v2"], vec!["prog", "cmd", "--o1", "-o2", "-3"] ] ); } #[test] fn arg_no_option() { snapshot!(SCRIPT_ARGS, &["prog", "cmd_multi_arg", "--o1", "-o2", "-3"]); } #[test] fn arg_two_multi() { snapshot_multi!( SCRIPT_ARGS, [ vec!["prog", "cmd_two_multi_args", "a", "b", "c"], vec!["prog", "cmd_two_multi_args", "--", "a", "b", "c"], vec!["prog", "cmd_two_multi_args", "a", "--", "b", "c"], vec!["prog", "cmd_two_multi_args", "a", "b", "--", "c"], vec!["prog", "cmd_two_multi_args", "a", "b", "c", "--"], ] ); } #[test] fn dash_split() { let script = r###" # @flag -f # @option --oa # @arg v1 # @arg v2* "###; snapshot_multi!( script, [ vec!["prog", "v1", "-f", "--oa", "a"], vec!["prog", "v1", "-f", "--", "--oa", "a"], ] ); } #[test] fn undefine_positionals() { let script = r###" # @option --oa "###; snapshot!(script, &["prog", "--oa", "v1", "v2"]); } #[test] fn same_option_positional() { let script = r###" # @option --url # @arg url "###; snapshot!(script, &["prog", "-h"]); } #[test] fn option_multiple() { let script = r###" # @flag -f --fc* # @option -a --oa* # @option -b --ob # @option -c --oc # @option -d --od # @option -e --oe* "###; snapshot_multi!( script, [ vec!["prog", "-h"], vec!["prog", "-f", "-f"], vec!["prog", "-a", "dir1", "dir2"], vec!["prog", "-a", "dir1", "-a", "dir2"], vec!["prog", "-b", "vim", "dir1", "dir2"], vec!["prog", "-c", "dir1", "dir2"], vec!["prog", "-d", "dir1", "file1", "file2"], vec!["prog", "-e", "dir1", "-e", "dir2", "dir3"], ] ); } #[test] fn option_to_variable() { let script = r###" # @flag --flag-foo # @option --option-foo* # @option --option-bar # @arg arg-foo # @arg arg-bar* "###; snapshot!( script, &[ "prog", "--flag-foo", "--option-foo", "foo1", "--option-foo", "foo2", "--option-bar", "bar", "v1", "x1", "x2" ] ); } #[test] fn option_terminated() { let script = r###" # @option --oa~