119625d8cSopenharmony_ciuse clap::{arg, error::ErrorKind, Arg, ArgAction, ArgGroup, Command, Id}; 219625d8cSopenharmony_ci 319625d8cSopenharmony_ciuse super::utils; 419625d8cSopenharmony_ci 519625d8cSopenharmony_ci#[test] 619625d8cSopenharmony_cifn required_group_missing_arg() { 719625d8cSopenharmony_ci let result = Command::new("group") 819625d8cSopenharmony_ci .arg(arg!(-f --flag "some flag")) 919625d8cSopenharmony_ci .arg(arg!( -c --color "some other flag")) 1019625d8cSopenharmony_ci .group(ArgGroup::new("req").args(["flag", "color"]).required(true)) 1119625d8cSopenharmony_ci .try_get_matches_from(vec![""]); 1219625d8cSopenharmony_ci assert!(result.is_err()); 1319625d8cSopenharmony_ci let err = result.err().unwrap(); 1419625d8cSopenharmony_ci assert_eq!(err.kind(), ErrorKind::MissingRequiredArgument); 1519625d8cSopenharmony_ci} 1619625d8cSopenharmony_ci 1719625d8cSopenharmony_ci#[cfg(debug_assertions)] 1819625d8cSopenharmony_ci#[test] 1919625d8cSopenharmony_ci#[should_panic = "Command group: Argument group 'req' contains non-existent argument"] 2019625d8cSopenharmony_cifn non_existing_arg() { 2119625d8cSopenharmony_ci let _ = Command::new("group") 2219625d8cSopenharmony_ci .arg(arg!(-f --flag "some flag")) 2319625d8cSopenharmony_ci .arg(arg!(-c --color "some other flag")) 2419625d8cSopenharmony_ci .group(ArgGroup::new("req").args(["flg", "color"]).required(true)) 2519625d8cSopenharmony_ci .try_get_matches_from(vec![""]); 2619625d8cSopenharmony_ci} 2719625d8cSopenharmony_ci 2819625d8cSopenharmony_ci#[cfg(debug_assertions)] 2919625d8cSopenharmony_ci#[test] 3019625d8cSopenharmony_ci#[should_panic = "Command group: Argument group name must be unique\n\n\t'req' is already in use"] 3119625d8cSopenharmony_cifn unique_group_name() { 3219625d8cSopenharmony_ci let _ = Command::new("group") 3319625d8cSopenharmony_ci .arg(arg!(-f --flag "some flag")) 3419625d8cSopenharmony_ci .arg(arg!(-c --color "some other flag")) 3519625d8cSopenharmony_ci .group(ArgGroup::new("req").args(["flag"]).required(true)) 3619625d8cSopenharmony_ci .group(ArgGroup::new("req").args(["color"]).required(true)) 3719625d8cSopenharmony_ci .try_get_matches_from(vec![""]); 3819625d8cSopenharmony_ci} 3919625d8cSopenharmony_ci 4019625d8cSopenharmony_ci#[cfg(debug_assertions)] 4119625d8cSopenharmony_ci#[test] 4219625d8cSopenharmony_ci#[should_panic = "Command group: Argument group name 'a' must not conflict with argument name"] 4319625d8cSopenharmony_cifn groups_new_of_arg_name() { 4419625d8cSopenharmony_ci let _ = Command::new("group") 4519625d8cSopenharmony_ci .arg(Arg::new("a").long("a").group("a")) 4619625d8cSopenharmony_ci .try_get_matches_from(vec!["", "--a"]); 4719625d8cSopenharmony_ci} 4819625d8cSopenharmony_ci 4919625d8cSopenharmony_ci#[cfg(debug_assertions)] 5019625d8cSopenharmony_ci#[test] 5119625d8cSopenharmony_ci#[should_panic = "Command group: Argument group name 'a' must not conflict with argument name"] 5219625d8cSopenharmony_cifn arg_group_new_of_arg_name() { 5319625d8cSopenharmony_ci let _ = Command::new("group") 5419625d8cSopenharmony_ci .arg(Arg::new("a").long("a").group("a")) 5519625d8cSopenharmony_ci .group(ArgGroup::new("a")) 5619625d8cSopenharmony_ci .try_get_matches_from(vec!["", "--a"]); 5719625d8cSopenharmony_ci} 5819625d8cSopenharmony_ci 5919625d8cSopenharmony_ci#[test] 6019625d8cSopenharmony_cifn group_single_value() { 6119625d8cSopenharmony_ci let res = Command::new("group") 6219625d8cSopenharmony_ci .arg(arg!(-c --color [color] "some option")) 6319625d8cSopenharmony_ci .arg(arg!(-n --hostname <name> "another option")) 6419625d8cSopenharmony_ci .group(ArgGroup::new("grp").args(["hostname", "color"])) 6519625d8cSopenharmony_ci .try_get_matches_from(vec!["", "-c", "blue"]); 6619625d8cSopenharmony_ci assert!(res.is_ok(), "{}", res.unwrap_err()); 6719625d8cSopenharmony_ci 6819625d8cSopenharmony_ci let m = res.unwrap(); 6919625d8cSopenharmony_ci assert!(m.contains_id("grp")); 7019625d8cSopenharmony_ci assert_eq!(m.get_one::<Id>("grp").map(|v| v.as_str()).unwrap(), "color"); 7119625d8cSopenharmony_ci} 7219625d8cSopenharmony_ci 7319625d8cSopenharmony_ci#[test] 7419625d8cSopenharmony_cifn group_empty() { 7519625d8cSopenharmony_ci let res = Command::new("group") 7619625d8cSopenharmony_ci .arg(arg!(-f --flag "some flag")) 7719625d8cSopenharmony_ci .arg(arg!(-c --color [color] "some option")) 7819625d8cSopenharmony_ci .arg(arg!(-n --hostname <name> "another option")) 7919625d8cSopenharmony_ci .group(ArgGroup::new("grp").args(["hostname", "color", "flag"])) 8019625d8cSopenharmony_ci .try_get_matches_from(vec![""]); 8119625d8cSopenharmony_ci assert!(res.is_ok(), "{}", res.unwrap_err()); 8219625d8cSopenharmony_ci 8319625d8cSopenharmony_ci let m = res.unwrap(); 8419625d8cSopenharmony_ci assert!(!m.contains_id("grp")); 8519625d8cSopenharmony_ci assert!(m.get_one::<String>("grp").map(|v| v.as_str()).is_none()); 8619625d8cSopenharmony_ci} 8719625d8cSopenharmony_ci 8819625d8cSopenharmony_ci#[test] 8919625d8cSopenharmony_cifn group_required_flags_empty() { 9019625d8cSopenharmony_ci let result = Command::new("group") 9119625d8cSopenharmony_ci .arg(arg!(-f --flag "some flag")) 9219625d8cSopenharmony_ci .arg(arg!(-c --color "some option")) 9319625d8cSopenharmony_ci .arg(arg!(-n --hostname <name> "another option")) 9419625d8cSopenharmony_ci .group( 9519625d8cSopenharmony_ci ArgGroup::new("grp") 9619625d8cSopenharmony_ci .required(true) 9719625d8cSopenharmony_ci .args(["hostname", "color", "flag"]), 9819625d8cSopenharmony_ci ) 9919625d8cSopenharmony_ci .try_get_matches_from(vec![""]); 10019625d8cSopenharmony_ci assert!(result.is_err()); 10119625d8cSopenharmony_ci let err = result.err().unwrap(); 10219625d8cSopenharmony_ci assert_eq!(err.kind(), ErrorKind::MissingRequiredArgument); 10319625d8cSopenharmony_ci} 10419625d8cSopenharmony_ci 10519625d8cSopenharmony_ci#[test] 10619625d8cSopenharmony_cifn group_multi_value_single_arg() { 10719625d8cSopenharmony_ci let res = Command::new("group") 10819625d8cSopenharmony_ci .arg(arg!(-f --flag "some flag")) 10919625d8cSopenharmony_ci .arg(arg!(-c --color <color> "some option").num_args(1..)) 11019625d8cSopenharmony_ci .arg(arg!(-n --hostname <name> "another option")) 11119625d8cSopenharmony_ci .group(ArgGroup::new("grp").args(["hostname", "color", "flag"])) 11219625d8cSopenharmony_ci .try_get_matches_from(vec!["", "-c", "blue", "red", "green"]); 11319625d8cSopenharmony_ci assert!(res.is_ok(), "{:?}", res.unwrap_err().kind()); 11419625d8cSopenharmony_ci 11519625d8cSopenharmony_ci let m = res.unwrap(); 11619625d8cSopenharmony_ci assert!(m.contains_id("grp")); 11719625d8cSopenharmony_ci assert_eq!(m.get_one::<Id>("grp").map(|v| v.as_str()).unwrap(), "color"); 11819625d8cSopenharmony_ci} 11919625d8cSopenharmony_ci 12019625d8cSopenharmony_ci#[test] 12119625d8cSopenharmony_cifn empty_group() { 12219625d8cSopenharmony_ci let r = Command::new("empty_group") 12319625d8cSopenharmony_ci .arg(arg!(-f --flag "some flag")) 12419625d8cSopenharmony_ci .group(ArgGroup::new("vers").required(true)) 12519625d8cSopenharmony_ci .try_get_matches_from(vec!["empty_prog"]); 12619625d8cSopenharmony_ci assert!(r.is_err()); 12719625d8cSopenharmony_ci let err = r.err().unwrap(); 12819625d8cSopenharmony_ci assert_eq!(err.kind(), ErrorKind::MissingRequiredArgument); 12919625d8cSopenharmony_ci} 13019625d8cSopenharmony_ci 13119625d8cSopenharmony_ci#[test] 13219625d8cSopenharmony_ci#[cfg(feature = "error-context")] 13319625d8cSopenharmony_cifn req_group_usage_string() { 13419625d8cSopenharmony_ci static REQ_GROUP_USAGE: &str = "error: the following required arguments were not provided: 13519625d8cSopenharmony_ci <base|--delete> 13619625d8cSopenharmony_ci 13719625d8cSopenharmony_ciUsage: clap-test <base|--delete> 13819625d8cSopenharmony_ci 13919625d8cSopenharmony_ciFor more information, try '--help'. 14019625d8cSopenharmony_ci"; 14119625d8cSopenharmony_ci 14219625d8cSopenharmony_ci let cmd = Command::new("req_group") 14319625d8cSopenharmony_ci .arg(arg!([base] "Base commit")) 14419625d8cSopenharmony_ci .arg(arg!( 14519625d8cSopenharmony_ci -d --delete "Remove the base commit information" 14619625d8cSopenharmony_ci )) 14719625d8cSopenharmony_ci .group( 14819625d8cSopenharmony_ci ArgGroup::new("base_or_delete") 14919625d8cSopenharmony_ci .args(["base", "delete"]) 15019625d8cSopenharmony_ci .required(true), 15119625d8cSopenharmony_ci ); 15219625d8cSopenharmony_ci 15319625d8cSopenharmony_ci utils::assert_output(cmd, "clap-test", REQ_GROUP_USAGE, true); 15419625d8cSopenharmony_ci} 15519625d8cSopenharmony_ci 15619625d8cSopenharmony_ci#[test] 15719625d8cSopenharmony_ci#[cfg(feature = "error-context")] 15819625d8cSopenharmony_cifn req_group_with_conflict_usage_string() { 15919625d8cSopenharmony_ci static REQ_GROUP_CONFLICT_USAGE: &str = "\ 16019625d8cSopenharmony_cierror: the argument '--delete' cannot be used with '[base]' 16119625d8cSopenharmony_ci 16219625d8cSopenharmony_ciUsage: clap-test <base|--delete> 16319625d8cSopenharmony_ci 16419625d8cSopenharmony_ciFor more information, try '--help'. 16519625d8cSopenharmony_ci"; 16619625d8cSopenharmony_ci 16719625d8cSopenharmony_ci let cmd = Command::new("req_group") 16819625d8cSopenharmony_ci .arg(arg!([base] "Base commit").conflicts_with("delete")) 16919625d8cSopenharmony_ci .arg(arg!( 17019625d8cSopenharmony_ci -d --delete "Remove the base commit information" 17119625d8cSopenharmony_ci )) 17219625d8cSopenharmony_ci .group( 17319625d8cSopenharmony_ci ArgGroup::new("base_or_delete") 17419625d8cSopenharmony_ci .args(["base", "delete"]) 17519625d8cSopenharmony_ci .required(true), 17619625d8cSopenharmony_ci ); 17719625d8cSopenharmony_ci 17819625d8cSopenharmony_ci utils::assert_output( 17919625d8cSopenharmony_ci cmd, 18019625d8cSopenharmony_ci "clap-test --delete base", 18119625d8cSopenharmony_ci REQ_GROUP_CONFLICT_USAGE, 18219625d8cSopenharmony_ci true, 18319625d8cSopenharmony_ci ); 18419625d8cSopenharmony_ci} 18519625d8cSopenharmony_ci 18619625d8cSopenharmony_ci#[test] 18719625d8cSopenharmony_ci#[cfg(feature = "error-context")] 18819625d8cSopenharmony_cifn req_group_with_conflict_usage_string_only_options() { 18919625d8cSopenharmony_ci static REQ_GROUP_CONFLICT_ONLY_OPTIONS: &str = "\ 19019625d8cSopenharmony_cierror: the argument '--delete' cannot be used with '--all' 19119625d8cSopenharmony_ci 19219625d8cSopenharmony_ciUsage: clap-test <--all|--delete> 19319625d8cSopenharmony_ci 19419625d8cSopenharmony_ciFor more information, try '--help'. 19519625d8cSopenharmony_ci"; 19619625d8cSopenharmony_ci 19719625d8cSopenharmony_ci let cmd = Command::new("req_group") 19819625d8cSopenharmony_ci .arg(arg!(-a --all "All").conflicts_with("delete")) 19919625d8cSopenharmony_ci .arg(arg!( 20019625d8cSopenharmony_ci -d --delete "Remove the base commit information" 20119625d8cSopenharmony_ci )) 20219625d8cSopenharmony_ci .group( 20319625d8cSopenharmony_ci ArgGroup::new("all_or_delete") 20419625d8cSopenharmony_ci .args(["all", "delete"]) 20519625d8cSopenharmony_ci .required(true), 20619625d8cSopenharmony_ci ); 20719625d8cSopenharmony_ci utils::assert_output( 20819625d8cSopenharmony_ci cmd, 20919625d8cSopenharmony_ci "clap-test --delete --all", 21019625d8cSopenharmony_ci REQ_GROUP_CONFLICT_ONLY_OPTIONS, 21119625d8cSopenharmony_ci true, 21219625d8cSopenharmony_ci ); 21319625d8cSopenharmony_ci} 21419625d8cSopenharmony_ci 21519625d8cSopenharmony_ci#[test] 21619625d8cSopenharmony_cifn required_group_multiple_args() { 21719625d8cSopenharmony_ci let result = Command::new("group") 21819625d8cSopenharmony_ci .arg(arg!(-f --flag "some flag").action(ArgAction::SetTrue)) 21919625d8cSopenharmony_ci .arg(arg!(-c --color "some other flag").action(ArgAction::SetTrue)) 22019625d8cSopenharmony_ci .group( 22119625d8cSopenharmony_ci ArgGroup::new("req") 22219625d8cSopenharmony_ci .args(["flag", "color"]) 22319625d8cSopenharmony_ci .required(true) 22419625d8cSopenharmony_ci .multiple(true), 22519625d8cSopenharmony_ci ) 22619625d8cSopenharmony_ci .try_get_matches_from(vec!["group", "-f", "-c"]); 22719625d8cSopenharmony_ci assert!(result.is_ok(), "{}", result.unwrap_err()); 22819625d8cSopenharmony_ci let m = result.unwrap(); 22919625d8cSopenharmony_ci assert!(*m.get_one::<bool>("flag").expect("defaulted by clap")); 23019625d8cSopenharmony_ci assert!(*m.get_one::<bool>("color").expect("defaulted by clap")); 23119625d8cSopenharmony_ci assert_eq!( 23219625d8cSopenharmony_ci &*m.get_many::<Id>("req") 23319625d8cSopenharmony_ci .unwrap() 23419625d8cSopenharmony_ci .map(|v| v.as_str()) 23519625d8cSopenharmony_ci .collect::<Vec<_>>(), 23619625d8cSopenharmony_ci ["flag", "color"] 23719625d8cSopenharmony_ci ); 23819625d8cSopenharmony_ci} 23919625d8cSopenharmony_ci 24019625d8cSopenharmony_ci#[test] 24119625d8cSopenharmony_cifn group_multiple_args_error() { 24219625d8cSopenharmony_ci let result = Command::new("group") 24319625d8cSopenharmony_ci .arg(arg!(-f --flag "some flag")) 24419625d8cSopenharmony_ci .arg(arg!(-c --color "some other flag")) 24519625d8cSopenharmony_ci .group(ArgGroup::new("req").args(["flag", "color"])) 24619625d8cSopenharmony_ci .try_get_matches_from(vec!["group", "-f", "-c"]); 24719625d8cSopenharmony_ci assert!(result.is_err()); 24819625d8cSopenharmony_ci let err = result.unwrap_err(); 24919625d8cSopenharmony_ci assert_eq!(err.kind(), ErrorKind::ArgumentConflict); 25019625d8cSopenharmony_ci} 25119625d8cSopenharmony_ci 25219625d8cSopenharmony_ci#[test] 25319625d8cSopenharmony_cifn group_overrides_required() { 25419625d8cSopenharmony_ci let command = Command::new("group") 25519625d8cSopenharmony_ci .arg(arg!(--foo <FOO>).required(true)) 25619625d8cSopenharmony_ci .arg(arg!(--bar <BAR>).required(true)) 25719625d8cSopenharmony_ci .group(ArgGroup::new("group").args(["foo", "bar"]).required(true)); 25819625d8cSopenharmony_ci let result = command.try_get_matches_from(vec!["group", "--foo", "value"]); 25919625d8cSopenharmony_ci assert!(result.is_ok(), "{}", result.unwrap_err()); 26019625d8cSopenharmony_ci let m = result.unwrap(); 26119625d8cSopenharmony_ci assert!(m.contains_id("foo")); 26219625d8cSopenharmony_ci assert!(!m.contains_id("bar")); 26319625d8cSopenharmony_ci} 26419625d8cSopenharmony_ci 26519625d8cSopenharmony_ci#[test] 26619625d8cSopenharmony_cifn group_usage_use_val_name() { 26719625d8cSopenharmony_ci static GROUP_USAGE_USE_VAL_NAME: &str = "\ 26819625d8cSopenharmony_ciUsage: prog <A> 26919625d8cSopenharmony_ci 27019625d8cSopenharmony_ciArguments: 27119625d8cSopenharmony_ci [A] 27219625d8cSopenharmony_ci 27319625d8cSopenharmony_ciOptions: 27419625d8cSopenharmony_ci -h, --help Print help 27519625d8cSopenharmony_ci"; 27619625d8cSopenharmony_ci let cmd = Command::new("prog") 27719625d8cSopenharmony_ci .arg(Arg::new("a").value_name("A")) 27819625d8cSopenharmony_ci .group(ArgGroup::new("group").arg("a").required(true)); 27919625d8cSopenharmony_ci utils::assert_output(cmd, "prog --help", GROUP_USAGE_USE_VAL_NAME, false); 28019625d8cSopenharmony_ci} 28119625d8cSopenharmony_ci 28219625d8cSopenharmony_ci#[test] 28319625d8cSopenharmony_cifn group_acts_like_arg() { 28419625d8cSopenharmony_ci let result = Command::new("prog") 28519625d8cSopenharmony_ci .arg( 28619625d8cSopenharmony_ci Arg::new("debug") 28719625d8cSopenharmony_ci .long("debug") 28819625d8cSopenharmony_ci .group("mode") 28919625d8cSopenharmony_ci .action(ArgAction::SetTrue), 29019625d8cSopenharmony_ci ) 29119625d8cSopenharmony_ci .arg( 29219625d8cSopenharmony_ci Arg::new("verbose") 29319625d8cSopenharmony_ci .long("verbose") 29419625d8cSopenharmony_ci .group("mode") 29519625d8cSopenharmony_ci .action(ArgAction::SetTrue), 29619625d8cSopenharmony_ci ) 29719625d8cSopenharmony_ci .try_get_matches_from(vec!["prog", "--debug"]); 29819625d8cSopenharmony_ci 29919625d8cSopenharmony_ci assert!(result.is_ok(), "{}", result.unwrap_err()); 30019625d8cSopenharmony_ci let m = result.unwrap(); 30119625d8cSopenharmony_ci assert!(m.contains_id("mode")); 30219625d8cSopenharmony_ci assert_eq!(m.get_one::<clap::Id>("mode").unwrap(), "debug"); 30319625d8cSopenharmony_ci} 30419625d8cSopenharmony_ci 30519625d8cSopenharmony_ci#[test] 30619625d8cSopenharmony_cifn conflict_with_overlapping_group_in_error() { 30719625d8cSopenharmony_ci static ERR: &str = "\ 30819625d8cSopenharmony_cierror: the argument '--major' cannot be used with '--minor' 30919625d8cSopenharmony_ci 31019625d8cSopenharmony_ciUsage: prog --major 31119625d8cSopenharmony_ci 31219625d8cSopenharmony_ciFor more information, try '--help'. 31319625d8cSopenharmony_ci"; 31419625d8cSopenharmony_ci 31519625d8cSopenharmony_ci let cmd = Command::new("prog") 31619625d8cSopenharmony_ci .group(ArgGroup::new("all").multiple(true)) 31719625d8cSopenharmony_ci .arg(arg!(--major).group("vers").group("all")) 31819625d8cSopenharmony_ci .arg(arg!(--minor).group("vers").group("all")) 31919625d8cSopenharmony_ci .arg(arg!(--other).group("all")); 32019625d8cSopenharmony_ci 32119625d8cSopenharmony_ci utils::assert_output(cmd, "prog --major --minor", ERR, true); 32219625d8cSopenharmony_ci} 32319625d8cSopenharmony_ci 32419625d8cSopenharmony_ci#[test] 32519625d8cSopenharmony_cifn requires_group_with_overlapping_group_in_error() { 32619625d8cSopenharmony_ci static ERR: &str = "\ 32719625d8cSopenharmony_cierror: the following required arguments were not provided: 32819625d8cSopenharmony_ci <--in|--spec> 32919625d8cSopenharmony_ci 33019625d8cSopenharmony_ciUsage: prog --config <--in|--spec> 33119625d8cSopenharmony_ci 33219625d8cSopenharmony_ciFor more information, try '--help'. 33319625d8cSopenharmony_ci"; 33419625d8cSopenharmony_ci 33519625d8cSopenharmony_ci let cmd = Command::new("prog") 33619625d8cSopenharmony_ci .group(ArgGroup::new("all").multiple(true)) 33719625d8cSopenharmony_ci .group(ArgGroup::new("input").required(true)) 33819625d8cSopenharmony_ci .arg(arg!(--in).group("input").group("all")) 33919625d8cSopenharmony_ci .arg(arg!(--spec).group("input").group("all")) 34019625d8cSopenharmony_ci .arg(arg!(--config).requires("input").group("all")); 34119625d8cSopenharmony_ci 34219625d8cSopenharmony_ci utils::assert_output(cmd, "prog --config", ERR, true); 34319625d8cSopenharmony_ci} 34419625d8cSopenharmony_ci 34519625d8cSopenharmony_ci/* This is used to be fixed in a hack, we need to find a better way to fix it. 34619625d8cSopenharmony_ci#[test] 34719625d8cSopenharmony_cifn issue_1794() { 34819625d8cSopenharmony_ci let cmd = clap::Command::new("hello") 34919625d8cSopenharmony_ci .bin_name("deno") 35019625d8cSopenharmony_ci .arg(Arg::new("option1").long("option1").action(ArgAction::SetTrue)) 35119625d8cSopenharmony_ci .arg(Arg::new("pos1").action(ArgAction::Set)) 35219625d8cSopenharmony_ci .arg(Arg::new("pos2").action(ArgAction::Set)) 35319625d8cSopenharmony_ci .group( 35419625d8cSopenharmony_ci ArgGroup::new("arg1") 35519625d8cSopenharmony_ci .args(["pos1", "option1"]) 35619625d8cSopenharmony_ci .required(true), 35719625d8cSopenharmony_ci ); 35819625d8cSopenharmony_ci 35919625d8cSopenharmony_ci let m = cmd.clone().try_get_matches_from(["cmd", "pos1", "pos2"]).unwrap(); 36019625d8cSopenharmony_ci assert_eq!(m.get_one::<String>("pos1").map(|v| v.as_str()), Some("pos1")); 36119625d8cSopenharmony_ci assert_eq!(m.get_one::<String>("pos2").map(|v| v.as_str()), Some("pos2")); 36219625d8cSopenharmony_ci assert!(!*m.get_one::<bool>("option1").expect("defaulted by clap")); 36319625d8cSopenharmony_ci 36419625d8cSopenharmony_ci let m = cmd 36519625d8cSopenharmony_ci .clone() 36619625d8cSopenharmony_ci .try_get_matches_from(["cmd", "--option1", "positional"]).unwrap(); 36719625d8cSopenharmony_ci assert_eq!(m.get_one::<String>("pos1").map(|v| v.as_str()), None); 36819625d8cSopenharmony_ci assert_eq!(m.get_one::<String>("pos2").map(|v| v.as_str()), Some("positional")); 36919625d8cSopenharmony_ci assert!(*m.get_one::<bool>("option1").expect("defaulted by clap")); 37019625d8cSopenharmony_ci} 37119625d8cSopenharmony_ci*/ 372