119625d8cSopenharmony_ciuse clap::{arg, error::ErrorKind, Arg, ArgAction, Command}; 219625d8cSopenharmony_ci 319625d8cSopenharmony_ci#[test] 419625d8cSopenharmony_cifn only_pos_follow() { 519625d8cSopenharmony_ci let r = Command::new("onlypos") 619625d8cSopenharmony_ci .args([arg!(f: -f [flag] "some opt"), arg!([arg] "some arg")]) 719625d8cSopenharmony_ci .try_get_matches_from(vec!["", "--", "-f"]); 819625d8cSopenharmony_ci assert!(r.is_ok(), "{}", r.unwrap_err()); 919625d8cSopenharmony_ci let m = r.unwrap(); 1019625d8cSopenharmony_ci assert!(m.contains_id("arg")); 1119625d8cSopenharmony_ci assert!(!m.contains_id("f")); 1219625d8cSopenharmony_ci assert_eq!( 1319625d8cSopenharmony_ci m.get_one::<String>("arg").map(|v| v.as_str()).unwrap(), 1419625d8cSopenharmony_ci "-f" 1519625d8cSopenharmony_ci ); 1619625d8cSopenharmony_ci} 1719625d8cSopenharmony_ci 1819625d8cSopenharmony_ci#[test] 1919625d8cSopenharmony_cifn issue_946() { 2019625d8cSopenharmony_ci let r = Command::new("compiletest") 2119625d8cSopenharmony_ci .arg(arg!(--exact "filters match exactly").action(ArgAction::SetTrue)) 2219625d8cSopenharmony_ci .arg( 2319625d8cSopenharmony_ci clap::Arg::new("filter") 2419625d8cSopenharmony_ci .index(1) 2519625d8cSopenharmony_ci .action(ArgAction::Set) 2619625d8cSopenharmony_ci .allow_hyphen_values(true) 2719625d8cSopenharmony_ci .help("filters to apply to output"), 2819625d8cSopenharmony_ci ) 2919625d8cSopenharmony_ci .try_get_matches_from(vec!["compiletest", "--exact"]); 3019625d8cSopenharmony_ci assert!(r.is_ok(), "{:#?}", r); 3119625d8cSopenharmony_ci let matches = r.unwrap(); 3219625d8cSopenharmony_ci 3319625d8cSopenharmony_ci assert!(*matches.get_one::<bool>("exact").expect("defaulted by clap")); 3419625d8cSopenharmony_ci assert!(matches 3519625d8cSopenharmony_ci .get_one::<String>("filter") 3619625d8cSopenharmony_ci .map(|v| v.as_str()) 3719625d8cSopenharmony_ci .is_none()); 3819625d8cSopenharmony_ci} 3919625d8cSopenharmony_ci 4019625d8cSopenharmony_ci#[test] 4119625d8cSopenharmony_cifn positional() { 4219625d8cSopenharmony_ci let r = Command::new("positional") 4319625d8cSopenharmony_ci .args([ 4419625d8cSopenharmony_ci arg!(-f --flag "some flag").action(ArgAction::SetTrue), 4519625d8cSopenharmony_ci Arg::new("positional").index(1), 4619625d8cSopenharmony_ci ]) 4719625d8cSopenharmony_ci .try_get_matches_from(vec!["", "-f", "test"]); 4819625d8cSopenharmony_ci assert!(r.is_ok(), "{:#?}", r); 4919625d8cSopenharmony_ci let m = r.unwrap(); 5019625d8cSopenharmony_ci assert!(m.contains_id("positional")); 5119625d8cSopenharmony_ci assert!(*m.get_one::<bool>("flag").expect("defaulted by clap")); 5219625d8cSopenharmony_ci assert_eq!( 5319625d8cSopenharmony_ci m.get_one::<String>("positional") 5419625d8cSopenharmony_ci .map(|v| v.as_str()) 5519625d8cSopenharmony_ci .unwrap(), 5619625d8cSopenharmony_ci "test" 5719625d8cSopenharmony_ci ); 5819625d8cSopenharmony_ci 5919625d8cSopenharmony_ci let m = Command::new("positional") 6019625d8cSopenharmony_ci .args([ 6119625d8cSopenharmony_ci arg!(-f --flag "some flag").action(ArgAction::SetTrue), 6219625d8cSopenharmony_ci Arg::new("positional").index(1), 6319625d8cSopenharmony_ci ]) 6419625d8cSopenharmony_ci .try_get_matches_from(vec!["", "test", "--flag"]) 6519625d8cSopenharmony_ci .unwrap(); 6619625d8cSopenharmony_ci assert!(m.contains_id("positional")); 6719625d8cSopenharmony_ci assert!(*m.get_one::<bool>("flag").expect("defaulted by clap")); 6819625d8cSopenharmony_ci assert_eq!( 6919625d8cSopenharmony_ci m.get_one::<String>("positional") 7019625d8cSopenharmony_ci .map(|v| v.as_str()) 7119625d8cSopenharmony_ci .unwrap(), 7219625d8cSopenharmony_ci "test" 7319625d8cSopenharmony_ci ); 7419625d8cSopenharmony_ci} 7519625d8cSopenharmony_ci 7619625d8cSopenharmony_ci#[test] 7719625d8cSopenharmony_cifn lots_o_vals() { 7819625d8cSopenharmony_ci let r = Command::new("opts") 7919625d8cSopenharmony_ci .arg(arg!(<opt>... "some pos")) 8019625d8cSopenharmony_ci .try_get_matches_from(vec![ 8119625d8cSopenharmony_ci "", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", 8219625d8cSopenharmony_ci "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", 8319625d8cSopenharmony_ci "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", 8419625d8cSopenharmony_ci "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", 8519625d8cSopenharmony_ci "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", 8619625d8cSopenharmony_ci "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", 8719625d8cSopenharmony_ci "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", 8819625d8cSopenharmony_ci "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", 8919625d8cSopenharmony_ci "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", 9019625d8cSopenharmony_ci "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", 9119625d8cSopenharmony_ci "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", 9219625d8cSopenharmony_ci "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", 9319625d8cSopenharmony_ci "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", 9419625d8cSopenharmony_ci "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", 9519625d8cSopenharmony_ci "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", 9619625d8cSopenharmony_ci "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", 9719625d8cSopenharmony_ci "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", 9819625d8cSopenharmony_ci "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", 9919625d8cSopenharmony_ci "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", 10019625d8cSopenharmony_ci "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", 10119625d8cSopenharmony_ci "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", 10219625d8cSopenharmony_ci "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", 10319625d8cSopenharmony_ci "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", 10419625d8cSopenharmony_ci "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", 10519625d8cSopenharmony_ci "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", 10619625d8cSopenharmony_ci "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", 10719625d8cSopenharmony_ci "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", 10819625d8cSopenharmony_ci "some", 10919625d8cSopenharmony_ci ]); 11019625d8cSopenharmony_ci assert!(r.is_ok(), "{}", r.unwrap_err()); 11119625d8cSopenharmony_ci let m = r.unwrap(); 11219625d8cSopenharmony_ci assert!(m.contains_id("opt")); 11319625d8cSopenharmony_ci assert_eq!(m.get_many::<String>("opt").unwrap().count(), 297); // i.e. more than u8 11419625d8cSopenharmony_ci} 11519625d8cSopenharmony_ci 11619625d8cSopenharmony_ci#[test] 11719625d8cSopenharmony_cifn positional_multiple() { 11819625d8cSopenharmony_ci let r = Command::new("positional_multiple") 11919625d8cSopenharmony_ci .args([ 12019625d8cSopenharmony_ci arg!(-f --flag "some flag").action(ArgAction::SetTrue), 12119625d8cSopenharmony_ci Arg::new("positional") 12219625d8cSopenharmony_ci .index(1) 12319625d8cSopenharmony_ci .action(ArgAction::Set) 12419625d8cSopenharmony_ci .num_args(1..), 12519625d8cSopenharmony_ci ]) 12619625d8cSopenharmony_ci .try_get_matches_from(vec!["", "-f", "test1", "test2", "test3"]); 12719625d8cSopenharmony_ci assert!(r.is_ok(), "{:#?}", r); 12819625d8cSopenharmony_ci let m = r.unwrap(); 12919625d8cSopenharmony_ci assert!(m.contains_id("positional")); 13019625d8cSopenharmony_ci assert!(*m.get_one::<bool>("flag").expect("defaulted by clap")); 13119625d8cSopenharmony_ci assert_eq!( 13219625d8cSopenharmony_ci &*m.get_many::<String>("positional") 13319625d8cSopenharmony_ci .unwrap() 13419625d8cSopenharmony_ci .map(|v| v.as_str()) 13519625d8cSopenharmony_ci .collect::<Vec<_>>(), 13619625d8cSopenharmony_ci ["test1", "test2", "test3"] 13719625d8cSopenharmony_ci ); 13819625d8cSopenharmony_ci} 13919625d8cSopenharmony_ci 14019625d8cSopenharmony_ci#[test] 14119625d8cSopenharmony_cifn positional_multiple_3() { 14219625d8cSopenharmony_ci let r = Command::new("positional_multiple") 14319625d8cSopenharmony_ci .args([ 14419625d8cSopenharmony_ci arg!(-f --flag "some flag").action(ArgAction::SetTrue), 14519625d8cSopenharmony_ci Arg::new("positional") 14619625d8cSopenharmony_ci .index(1) 14719625d8cSopenharmony_ci .action(ArgAction::Set) 14819625d8cSopenharmony_ci .num_args(1..), 14919625d8cSopenharmony_ci ]) 15019625d8cSopenharmony_ci .try_get_matches_from(vec!["", "test1", "test2", "test3", "--flag"]); 15119625d8cSopenharmony_ci assert!(r.is_ok(), "{:#?}", r); 15219625d8cSopenharmony_ci let m = r.unwrap(); 15319625d8cSopenharmony_ci assert!(m.contains_id("positional")); 15419625d8cSopenharmony_ci assert!(*m.get_one::<bool>("flag").expect("defaulted by clap")); 15519625d8cSopenharmony_ci assert_eq!( 15619625d8cSopenharmony_ci &*m.get_many::<String>("positional") 15719625d8cSopenharmony_ci .unwrap() 15819625d8cSopenharmony_ci .map(|v| v.as_str()) 15919625d8cSopenharmony_ci .collect::<Vec<_>>(), 16019625d8cSopenharmony_ci ["test1", "test2", "test3"] 16119625d8cSopenharmony_ci ); 16219625d8cSopenharmony_ci} 16319625d8cSopenharmony_ci 16419625d8cSopenharmony_ci#[test] 16519625d8cSopenharmony_cifn positional_multiple_2() { 16619625d8cSopenharmony_ci let result = Command::new("positional_multiple") 16719625d8cSopenharmony_ci .args([arg!(-f --flag "some flag"), Arg::new("positional").index(1)]) 16819625d8cSopenharmony_ci .try_get_matches_from(vec!["", "-f", "test1", "test2", "test3"]); 16919625d8cSopenharmony_ci assert!(result.is_err()); 17019625d8cSopenharmony_ci let err = result.err().unwrap(); 17119625d8cSopenharmony_ci assert_eq!(err.kind(), ErrorKind::UnknownArgument); 17219625d8cSopenharmony_ci} 17319625d8cSopenharmony_ci 17419625d8cSopenharmony_ci#[test] 17519625d8cSopenharmony_cifn positional_possible_values() { 17619625d8cSopenharmony_ci let r = Command::new("positional_possible_values") 17719625d8cSopenharmony_ci .args([ 17819625d8cSopenharmony_ci arg!(-f --flag "some flag").action(ArgAction::SetTrue), 17919625d8cSopenharmony_ci Arg::new("positional").index(1).value_parser(["test123"]), 18019625d8cSopenharmony_ci ]) 18119625d8cSopenharmony_ci .try_get_matches_from(vec!["", "-f", "test123"]); 18219625d8cSopenharmony_ci assert!(r.is_ok(), "{r:#?}"); 18319625d8cSopenharmony_ci let m = r.unwrap(); 18419625d8cSopenharmony_ci assert!(m.contains_id("positional")); 18519625d8cSopenharmony_ci assert!(*m.get_one::<bool>("flag").expect("defaulted by clap")); 18619625d8cSopenharmony_ci assert_eq!( 18719625d8cSopenharmony_ci &*m.get_many::<String>("positional") 18819625d8cSopenharmony_ci .unwrap() 18919625d8cSopenharmony_ci .map(|v| v.as_str()) 19019625d8cSopenharmony_ci .collect::<Vec<_>>(), 19119625d8cSopenharmony_ci ["test123"] 19219625d8cSopenharmony_ci ); 19319625d8cSopenharmony_ci} 19419625d8cSopenharmony_ci 19519625d8cSopenharmony_ci#[test] 19619625d8cSopenharmony_cifn create_positional() { 19719625d8cSopenharmony_ci let _ = Command::new("test") 19819625d8cSopenharmony_ci .arg(Arg::new("test").index(1).help("testing testing")) 19919625d8cSopenharmony_ci .try_get_matches_from(vec![""]) 20019625d8cSopenharmony_ci .unwrap(); 20119625d8cSopenharmony_ci} 20219625d8cSopenharmony_ci 20319625d8cSopenharmony_ci#[test] 20419625d8cSopenharmony_cifn positional_hyphen_does_not_panic() { 20519625d8cSopenharmony_ci let _ = Command::new("test") 20619625d8cSopenharmony_ci .arg(Arg::new("dummy")) 20719625d8cSopenharmony_ci .try_get_matches_from(vec!["test", "-"]) 20819625d8cSopenharmony_ci .unwrap(); 20919625d8cSopenharmony_ci} 21019625d8cSopenharmony_ci 21119625d8cSopenharmony_ci#[test] 21219625d8cSopenharmony_cifn single_positional_usage_string() { 21319625d8cSopenharmony_ci let mut cmd = Command::new("test").arg(arg!([FILE] "some file")); 21419625d8cSopenharmony_ci crate::utils::assert_eq(cmd.render_usage().to_string(), "Usage: test [FILE]"); 21519625d8cSopenharmony_ci} 21619625d8cSopenharmony_ci 21719625d8cSopenharmony_ci#[test] 21819625d8cSopenharmony_cifn single_positional_multiple_usage_string() { 21919625d8cSopenharmony_ci let mut cmd = Command::new("test").arg(arg!([FILE]... "some file")); 22019625d8cSopenharmony_ci crate::utils::assert_eq(cmd.render_usage().to_string(), "Usage: test [FILE]..."); 22119625d8cSopenharmony_ci} 22219625d8cSopenharmony_ci 22319625d8cSopenharmony_ci#[test] 22419625d8cSopenharmony_cifn multiple_positional_usage_string() { 22519625d8cSopenharmony_ci let mut cmd = Command::new("test") 22619625d8cSopenharmony_ci .arg(arg!([FILE] "some file")) 22719625d8cSopenharmony_ci .arg(arg!([FILES]... "some file")); 22819625d8cSopenharmony_ci crate::utils::assert_eq( 22919625d8cSopenharmony_ci cmd.render_usage().to_string(), 23019625d8cSopenharmony_ci "\ 23119625d8cSopenharmony_ciUsage: test [FILE] [FILES]...", 23219625d8cSopenharmony_ci ); 23319625d8cSopenharmony_ci} 23419625d8cSopenharmony_ci 23519625d8cSopenharmony_ci#[test] 23619625d8cSopenharmony_cifn multiple_positional_one_required_usage_string() { 23719625d8cSopenharmony_ci let mut cmd = Command::new("test") 23819625d8cSopenharmony_ci .arg(arg!(<FILE> "some file")) 23919625d8cSopenharmony_ci .arg(arg!([FILES]... "some file")); 24019625d8cSopenharmony_ci crate::utils::assert_eq( 24119625d8cSopenharmony_ci cmd.render_usage().to_string(), 24219625d8cSopenharmony_ci "Usage: test <FILE> [FILES]...", 24319625d8cSopenharmony_ci ); 24419625d8cSopenharmony_ci} 24519625d8cSopenharmony_ci 24619625d8cSopenharmony_ci#[test] 24719625d8cSopenharmony_cifn single_positional_required_usage_string() { 24819625d8cSopenharmony_ci let mut cmd = Command::new("test").arg(arg!(<FILE> "some file")); 24919625d8cSopenharmony_ci crate::utils::assert_eq(cmd.render_usage().to_string(), "Usage: test <FILE>"); 25019625d8cSopenharmony_ci} 25119625d8cSopenharmony_ci 25219625d8cSopenharmony_ci// This tests a programmer error and will only succeed with debug_assertions 25319625d8cSopenharmony_ci#[cfg(debug_assertions)] 25419625d8cSopenharmony_ci#[test] 25519625d8cSopenharmony_ci#[should_panic = "Found non-required positional argument \ 25619625d8cSopenharmony_ciwith a lower index than a required positional argument"] 25719625d8cSopenharmony_cifn missing_required() { 25819625d8cSopenharmony_ci let _ = Command::new("test") 25919625d8cSopenharmony_ci .arg(arg!([FILE1] "some file")) 26019625d8cSopenharmony_ci .arg(arg!(<FILE2> "some file")) 26119625d8cSopenharmony_ci .try_get_matches_from(vec![""]); 26219625d8cSopenharmony_ci} 26319625d8cSopenharmony_ci 26419625d8cSopenharmony_ci#[test] 26519625d8cSopenharmony_cifn missing_required_2() { 26619625d8cSopenharmony_ci let r = Command::new("test") 26719625d8cSopenharmony_ci .arg(arg!(<FILE1> "some file")) 26819625d8cSopenharmony_ci .arg(arg!(<FILE2> "some file")) 26919625d8cSopenharmony_ci .try_get_matches_from(vec!["test", "file"]); 27019625d8cSopenharmony_ci assert!(r.is_err()); 27119625d8cSopenharmony_ci assert_eq!(r.unwrap_err().kind(), ErrorKind::MissingRequiredArgument); 27219625d8cSopenharmony_ci} 27319625d8cSopenharmony_ci 27419625d8cSopenharmony_ci#[test] 27519625d8cSopenharmony_cifn last_positional() { 27619625d8cSopenharmony_ci let r = Command::new("test") 27719625d8cSopenharmony_ci .arg(arg!(<TARGET> "some target")) 27819625d8cSopenharmony_ci .arg(arg!([CORPUS] "some corpus")) 27919625d8cSopenharmony_ci .arg(arg!([ARGS]... "some file").last(true)) 28019625d8cSopenharmony_ci .try_get_matches_from(vec!["test", "tgt", "--", "arg"]); 28119625d8cSopenharmony_ci assert!(r.is_ok(), "{}", r.unwrap_err()); 28219625d8cSopenharmony_ci let m = r.unwrap(); 28319625d8cSopenharmony_ci assert_eq!( 28419625d8cSopenharmony_ci m.get_many::<String>("ARGS") 28519625d8cSopenharmony_ci .unwrap() 28619625d8cSopenharmony_ci .map(|v| v.as_str()) 28719625d8cSopenharmony_ci .collect::<Vec<_>>(), 28819625d8cSopenharmony_ci ["arg"] 28919625d8cSopenharmony_ci ); 29019625d8cSopenharmony_ci} 29119625d8cSopenharmony_ci 29219625d8cSopenharmony_ci#[test] 29319625d8cSopenharmony_cifn last_positional_no_double_dash() { 29419625d8cSopenharmony_ci let r = Command::new("test") 29519625d8cSopenharmony_ci .arg(arg!(<TARGET> "some target")) 29619625d8cSopenharmony_ci .arg(arg!([CORPUS] "some corpus")) 29719625d8cSopenharmony_ci .arg(arg!([ARGS]... "some file").last(true)) 29819625d8cSopenharmony_ci .try_get_matches_from(vec!["test", "tgt", "crp", "arg"]); 29919625d8cSopenharmony_ci assert!(r.is_err()); 30019625d8cSopenharmony_ci assert_eq!(r.unwrap_err().kind(), ErrorKind::UnknownArgument); 30119625d8cSopenharmony_ci} 30219625d8cSopenharmony_ci 30319625d8cSopenharmony_ci#[test] 30419625d8cSopenharmony_cifn last_positional_second_to_last_mult() { 30519625d8cSopenharmony_ci let r = Command::new("test") 30619625d8cSopenharmony_ci .arg(arg!(<TARGET> "some target")) 30719625d8cSopenharmony_ci .arg(arg!([CORPUS]... "some corpus")) 30819625d8cSopenharmony_ci .arg(arg!([ARGS]... "some file").last(true)) 30919625d8cSopenharmony_ci .try_get_matches_from(vec!["test", "tgt", "crp1", "crp2", "--", "arg"]); 31019625d8cSopenharmony_ci assert!(r.is_ok(), "{:?}", r.unwrap_err().kind()); 31119625d8cSopenharmony_ci} 31219625d8cSopenharmony_ci 31319625d8cSopenharmony_ci#[cfg(debug_assertions)] 31419625d8cSopenharmony_ci#[test] 31519625d8cSopenharmony_ci#[should_panic = "Argument 'arg' is a positional argument and can't have short or long name versions"] 31619625d8cSopenharmony_cifn positional_arg_with_long() { 31719625d8cSopenharmony_ci use clap::{Arg, Command}; 31819625d8cSopenharmony_ci 31919625d8cSopenharmony_ci let _ = Command::new("test") 32019625d8cSopenharmony_ci .arg(Arg::new("arg").index(1).long("arg")) 32119625d8cSopenharmony_ci .try_get_matches(); 32219625d8cSopenharmony_ci} 32319625d8cSopenharmony_ci 32419625d8cSopenharmony_ci#[cfg(debug_assertions)] 32519625d8cSopenharmony_ci#[test] 32619625d8cSopenharmony_ci#[should_panic = "Argument 'arg' is a positional argument and can't have short or long name versions"] 32719625d8cSopenharmony_cifn positional_arg_with_short() { 32819625d8cSopenharmony_ci use clap::{Arg, Command}; 32919625d8cSopenharmony_ci 33019625d8cSopenharmony_ci let _ = Command::new("test") 33119625d8cSopenharmony_ci .arg(Arg::new("arg").index(1).short('a')) 33219625d8cSopenharmony_ci .try_get_matches(); 33319625d8cSopenharmony_ci} 33419625d8cSopenharmony_ci 33519625d8cSopenharmony_ci#[test] 33619625d8cSopenharmony_cifn ignore_hyphen_values_on_last() { 33719625d8cSopenharmony_ci let cmd = clap::Command::new("foo") 33819625d8cSopenharmony_ci .arg( 33919625d8cSopenharmony_ci clap::Arg::new("cmd") 34019625d8cSopenharmony_ci .num_args(1..) 34119625d8cSopenharmony_ci .last(true) 34219625d8cSopenharmony_ci .allow_hyphen_values(true), 34319625d8cSopenharmony_ci ) 34419625d8cSopenharmony_ci .arg( 34519625d8cSopenharmony_ci clap::Arg::new("name") 34619625d8cSopenharmony_ci .long("name") 34719625d8cSopenharmony_ci .short('n') 34819625d8cSopenharmony_ci .action(ArgAction::Set) 34919625d8cSopenharmony_ci .required(false), 35019625d8cSopenharmony_ci ); 35119625d8cSopenharmony_ci 35219625d8cSopenharmony_ci let matches = cmd.try_get_matches_from(["test", "-n", "foo"]).unwrap(); 35319625d8cSopenharmony_ci assert_eq!( 35419625d8cSopenharmony_ci matches.get_one::<String>("name").map(|v| v.as_str()), 35519625d8cSopenharmony_ci Some("foo") 35619625d8cSopenharmony_ci ); 35719625d8cSopenharmony_ci} 358