119625d8cSopenharmony_ciuse super::utils; 219625d8cSopenharmony_ci 319625d8cSopenharmony_ciuse clap::{arg, Arg, ArgAction, Command}; 419625d8cSopenharmony_ci 519625d8cSopenharmony_ci#[test] 619625d8cSopenharmony_cifn single_alias_of_option() { 719625d8cSopenharmony_ci let a = Command::new("single_alias") 819625d8cSopenharmony_ci .arg( 919625d8cSopenharmony_ci Arg::new("alias") 1019625d8cSopenharmony_ci .long("alias") 1119625d8cSopenharmony_ci .action(ArgAction::Set) 1219625d8cSopenharmony_ci .help("single alias") 1319625d8cSopenharmony_ci .alias("new-opt"), 1419625d8cSopenharmony_ci ) 1519625d8cSopenharmony_ci .try_get_matches_from(vec!["", "--new-opt", "cool"]); 1619625d8cSopenharmony_ci assert!(a.is_ok(), "{}", a.unwrap_err()); 1719625d8cSopenharmony_ci let a = a.unwrap(); 1819625d8cSopenharmony_ci assert!(a.contains_id("alias")); 1919625d8cSopenharmony_ci assert_eq!( 2019625d8cSopenharmony_ci a.get_one::<String>("alias").map(|v| v.as_str()).unwrap(), 2119625d8cSopenharmony_ci "cool" 2219625d8cSopenharmony_ci ); 2319625d8cSopenharmony_ci} 2419625d8cSopenharmony_ci 2519625d8cSopenharmony_ci#[test] 2619625d8cSopenharmony_cifn multiple_aliases_of_option() { 2719625d8cSopenharmony_ci let a = Command::new("multiple_aliases").arg( 2819625d8cSopenharmony_ci Arg::new("aliases") 2919625d8cSopenharmony_ci .long("aliases") 3019625d8cSopenharmony_ci .action(ArgAction::Set) 3119625d8cSopenharmony_ci .help("multiple aliases") 3219625d8cSopenharmony_ci .aliases(["alias1", "alias2", "alias3"]), 3319625d8cSopenharmony_ci ); 3419625d8cSopenharmony_ci let long = a 3519625d8cSopenharmony_ci .clone() 3619625d8cSopenharmony_ci .try_get_matches_from(vec!["", "--aliases", "value"]); 3719625d8cSopenharmony_ci assert!(long.is_ok(), "{}", long.unwrap_err()); 3819625d8cSopenharmony_ci let long = long.unwrap(); 3919625d8cSopenharmony_ci 4019625d8cSopenharmony_ci let als1 = a 4119625d8cSopenharmony_ci .clone() 4219625d8cSopenharmony_ci .try_get_matches_from(vec!["", "--alias1", "value"]); 4319625d8cSopenharmony_ci assert!(als1.is_ok(), "{}", als1.unwrap_err()); 4419625d8cSopenharmony_ci let als1 = als1.unwrap(); 4519625d8cSopenharmony_ci 4619625d8cSopenharmony_ci let als2 = a 4719625d8cSopenharmony_ci .clone() 4819625d8cSopenharmony_ci .try_get_matches_from(vec!["", "--alias2", "value"]); 4919625d8cSopenharmony_ci assert!(als2.is_ok(), "{}", als2.unwrap_err()); 5019625d8cSopenharmony_ci let als2 = als2.unwrap(); 5119625d8cSopenharmony_ci 5219625d8cSopenharmony_ci let als3 = a 5319625d8cSopenharmony_ci .clone() 5419625d8cSopenharmony_ci .try_get_matches_from(vec!["", "--alias3", "value"]); 5519625d8cSopenharmony_ci assert!(als3.is_ok(), "{}", als3.unwrap_err()); 5619625d8cSopenharmony_ci let als3 = als3.unwrap(); 5719625d8cSopenharmony_ci 5819625d8cSopenharmony_ci assert!(long.contains_id("aliases")); 5919625d8cSopenharmony_ci assert!(als1.contains_id("aliases")); 6019625d8cSopenharmony_ci assert!(als2.contains_id("aliases")); 6119625d8cSopenharmony_ci assert!(als3.contains_id("aliases")); 6219625d8cSopenharmony_ci assert_eq!( 6319625d8cSopenharmony_ci long.get_one::<String>("aliases") 6419625d8cSopenharmony_ci .map(|v| v.as_str()) 6519625d8cSopenharmony_ci .unwrap(), 6619625d8cSopenharmony_ci "value" 6719625d8cSopenharmony_ci ); 6819625d8cSopenharmony_ci assert_eq!( 6919625d8cSopenharmony_ci als1.get_one::<String>("aliases") 7019625d8cSopenharmony_ci .map(|v| v.as_str()) 7119625d8cSopenharmony_ci .unwrap(), 7219625d8cSopenharmony_ci "value" 7319625d8cSopenharmony_ci ); 7419625d8cSopenharmony_ci assert_eq!( 7519625d8cSopenharmony_ci als2.get_one::<String>("aliases") 7619625d8cSopenharmony_ci .map(|v| v.as_str()) 7719625d8cSopenharmony_ci .unwrap(), 7819625d8cSopenharmony_ci "value" 7919625d8cSopenharmony_ci ); 8019625d8cSopenharmony_ci assert_eq!( 8119625d8cSopenharmony_ci als3.get_one::<String>("aliases") 8219625d8cSopenharmony_ci .map(|v| v.as_str()) 8319625d8cSopenharmony_ci .unwrap(), 8419625d8cSopenharmony_ci "value" 8519625d8cSopenharmony_ci ); 8619625d8cSopenharmony_ci} 8719625d8cSopenharmony_ci 8819625d8cSopenharmony_ci#[test] 8919625d8cSopenharmony_cifn get_aliases() { 9019625d8cSopenharmony_ci let a = Arg::new("aliases") 9119625d8cSopenharmony_ci .long("aliases") 9219625d8cSopenharmony_ci .action(ArgAction::Set) 9319625d8cSopenharmony_ci .help("multiple aliases") 9419625d8cSopenharmony_ci .aliases(["alias1", "alias2", "alias3"]) 9519625d8cSopenharmony_ci .short_aliases(['a', 'b', 'c']) 9619625d8cSopenharmony_ci .visible_aliases(["alias4", "alias5", "alias6"]) 9719625d8cSopenharmony_ci .visible_short_aliases(['d', 'e', 'f']); 9819625d8cSopenharmony_ci 9919625d8cSopenharmony_ci assert!(a.get_short_and_visible_aliases().is_none()); 10019625d8cSopenharmony_ci assert_eq!( 10119625d8cSopenharmony_ci a.get_long_and_visible_aliases().unwrap(), 10219625d8cSopenharmony_ci ["aliases", "alias4", "alias5", "alias6"] 10319625d8cSopenharmony_ci ); 10419625d8cSopenharmony_ci assert_eq!( 10519625d8cSopenharmony_ci a.get_visible_aliases().unwrap(), 10619625d8cSopenharmony_ci ["alias4", "alias5", "alias6"] 10719625d8cSopenharmony_ci ); 10819625d8cSopenharmony_ci assert_eq!( 10919625d8cSopenharmony_ci a.get_all_aliases().unwrap(), 11019625d8cSopenharmony_ci ["alias1", "alias2", "alias3", "alias4", "alias5", "alias6"] 11119625d8cSopenharmony_ci ); 11219625d8cSopenharmony_ci assert_eq!(a.get_visible_short_aliases().unwrap(), vec!['d', 'e', 'f']); 11319625d8cSopenharmony_ci assert_eq!( 11419625d8cSopenharmony_ci a.get_all_short_aliases().unwrap(), 11519625d8cSopenharmony_ci vec!['a', 'b', 'c', 'd', 'e', 'f'] 11619625d8cSopenharmony_ci ); 11719625d8cSopenharmony_ci} 11819625d8cSopenharmony_ci 11919625d8cSopenharmony_ci#[test] 12019625d8cSopenharmony_cifn single_alias_of_flag() { 12119625d8cSopenharmony_ci let a = Command::new("test") 12219625d8cSopenharmony_ci .arg( 12319625d8cSopenharmony_ci Arg::new("flag") 12419625d8cSopenharmony_ci .long("flag") 12519625d8cSopenharmony_ci .alias("alias") 12619625d8cSopenharmony_ci .action(ArgAction::SetTrue), 12719625d8cSopenharmony_ci ) 12819625d8cSopenharmony_ci .try_get_matches_from(vec!["", "--alias"]); 12919625d8cSopenharmony_ci assert!(a.is_ok(), "{}", a.unwrap_err()); 13019625d8cSopenharmony_ci let a = a.unwrap(); 13119625d8cSopenharmony_ci assert!(*a.get_one::<bool>("flag").expect("defaulted by clap")); 13219625d8cSopenharmony_ci} 13319625d8cSopenharmony_ci 13419625d8cSopenharmony_ci#[test] 13519625d8cSopenharmony_cifn multiple_aliases_of_flag() { 13619625d8cSopenharmony_ci let a = Command::new("test").arg( 13719625d8cSopenharmony_ci Arg::new("flag") 13819625d8cSopenharmony_ci .long("flag") 13919625d8cSopenharmony_ci .aliases(["invisible", "set", "of", "cool", "aliases"]) 14019625d8cSopenharmony_ci .action(ArgAction::SetTrue), 14119625d8cSopenharmony_ci ); 14219625d8cSopenharmony_ci 14319625d8cSopenharmony_ci let flag = a.clone().try_get_matches_from(vec!["", "--flag"]); 14419625d8cSopenharmony_ci assert!(flag.is_ok(), "{}", flag.unwrap_err()); 14519625d8cSopenharmony_ci let flag = flag.unwrap(); 14619625d8cSopenharmony_ci 14719625d8cSopenharmony_ci let inv = a.clone().try_get_matches_from(vec!["", "--invisible"]); 14819625d8cSopenharmony_ci assert!(inv.is_ok(), "{}", inv.unwrap_err()); 14919625d8cSopenharmony_ci let inv = inv.unwrap(); 15019625d8cSopenharmony_ci 15119625d8cSopenharmony_ci let cool = a.clone().try_get_matches_from(vec!["", "--cool"]); 15219625d8cSopenharmony_ci assert!(cool.is_ok(), "{}", cool.unwrap_err()); 15319625d8cSopenharmony_ci let cool = cool.unwrap(); 15419625d8cSopenharmony_ci 15519625d8cSopenharmony_ci let als = a.clone().try_get_matches_from(vec!["", "--aliases"]); 15619625d8cSopenharmony_ci assert!(als.is_ok(), "{}", als.unwrap_err()); 15719625d8cSopenharmony_ci let als = als.unwrap(); 15819625d8cSopenharmony_ci 15919625d8cSopenharmony_ci assert!(*flag.get_one::<bool>("flag").expect("defaulted by clap")); 16019625d8cSopenharmony_ci assert!(*inv.get_one::<bool>("flag").expect("defaulted by clap")); 16119625d8cSopenharmony_ci assert!(*cool.get_one::<bool>("flag").expect("defaulted by clap")); 16219625d8cSopenharmony_ci assert!(*als.get_one::<bool>("flag").expect("defaulted by clap")); 16319625d8cSopenharmony_ci} 16419625d8cSopenharmony_ci 16519625d8cSopenharmony_ci#[test] 16619625d8cSopenharmony_cifn alias_on_a_subcommand_option() { 16719625d8cSopenharmony_ci let m = Command::new("test") 16819625d8cSopenharmony_ci .subcommand( 16919625d8cSopenharmony_ci Command::new("some").arg( 17019625d8cSopenharmony_ci Arg::new("test") 17119625d8cSopenharmony_ci .short('t') 17219625d8cSopenharmony_ci .long("test") 17319625d8cSopenharmony_ci .action(ArgAction::Set) 17419625d8cSopenharmony_ci .alias("opt") 17519625d8cSopenharmony_ci .help("testing testing"), 17619625d8cSopenharmony_ci ), 17719625d8cSopenharmony_ci ) 17819625d8cSopenharmony_ci .arg(Arg::new("other").long("other").aliases(["o1", "o2", "o3"])) 17919625d8cSopenharmony_ci .try_get_matches_from(vec!["test", "some", "--opt", "awesome"]) 18019625d8cSopenharmony_ci .unwrap(); 18119625d8cSopenharmony_ci 18219625d8cSopenharmony_ci assert!(m.subcommand_matches("some").is_some()); 18319625d8cSopenharmony_ci let sub_m = m.subcommand_matches("some").unwrap(); 18419625d8cSopenharmony_ci assert!(sub_m.contains_id("test")); 18519625d8cSopenharmony_ci assert_eq!( 18619625d8cSopenharmony_ci sub_m.get_one::<String>("test").map(|v| v.as_str()).unwrap(), 18719625d8cSopenharmony_ci "awesome" 18819625d8cSopenharmony_ci ); 18919625d8cSopenharmony_ci} 19019625d8cSopenharmony_ci 19119625d8cSopenharmony_ci#[test] 19219625d8cSopenharmony_cifn invisible_arg_aliases_help_output() { 19319625d8cSopenharmony_ci static SC_INVISIBLE_ALIAS_HELP: &str = "\ 19419625d8cSopenharmony_ciSome help 19519625d8cSopenharmony_ci 19619625d8cSopenharmony_ciUsage: ct test [OPTIONS] 19719625d8cSopenharmony_ci 19819625d8cSopenharmony_ciOptions: 19919625d8cSopenharmony_ci -o, --opt <opt> 20019625d8cSopenharmony_ci -f, --flag 20119625d8cSopenharmony_ci -h, --help Print help 20219625d8cSopenharmony_ci -V, --version Print version 20319625d8cSopenharmony_ci"; 20419625d8cSopenharmony_ci 20519625d8cSopenharmony_ci let cmd = Command::new("ct").author("Salim Afiune").subcommand( 20619625d8cSopenharmony_ci Command::new("test") 20719625d8cSopenharmony_ci .about("Some help") 20819625d8cSopenharmony_ci .version("1.2") 20919625d8cSopenharmony_ci .arg( 21019625d8cSopenharmony_ci Arg::new("opt") 21119625d8cSopenharmony_ci .long("opt") 21219625d8cSopenharmony_ci .short('o') 21319625d8cSopenharmony_ci .action(ArgAction::Set) 21419625d8cSopenharmony_ci .aliases(["invisible", "als1", "more"]), 21519625d8cSopenharmony_ci ) 21619625d8cSopenharmony_ci .arg(arg!(-f - -flag).aliases(["unseeable", "flg1", "anyway"])), 21719625d8cSopenharmony_ci ); 21819625d8cSopenharmony_ci utils::assert_output(cmd, "ct test --help", SC_INVISIBLE_ALIAS_HELP, false); 21919625d8cSopenharmony_ci} 22019625d8cSopenharmony_ci 22119625d8cSopenharmony_ci#[test] 22219625d8cSopenharmony_cifn visible_arg_aliases_help_output() { 22319625d8cSopenharmony_ci static SC_VISIBLE_ALIAS_HELP: &str = "\ 22419625d8cSopenharmony_ciSome help 22519625d8cSopenharmony_ci 22619625d8cSopenharmony_ciUsage: ct test [OPTIONS] 22719625d8cSopenharmony_ci 22819625d8cSopenharmony_ciOptions: 22919625d8cSopenharmony_ci -o, --opt <opt> [aliases: visible] 23019625d8cSopenharmony_ci -f, --flag [aliases: v_flg, flag2, flg3] 23119625d8cSopenharmony_ci -h, --help Print help 23219625d8cSopenharmony_ci -V, --version Print version 23319625d8cSopenharmony_ci"; 23419625d8cSopenharmony_ci 23519625d8cSopenharmony_ci let cmd = Command::new("ct").author("Salim Afiune").subcommand( 23619625d8cSopenharmony_ci Command::new("test") 23719625d8cSopenharmony_ci .about("Some help") 23819625d8cSopenharmony_ci .version("1.2") 23919625d8cSopenharmony_ci .arg( 24019625d8cSopenharmony_ci Arg::new("opt") 24119625d8cSopenharmony_ci .long("opt") 24219625d8cSopenharmony_ci .short('o') 24319625d8cSopenharmony_ci .action(ArgAction::Set) 24419625d8cSopenharmony_ci .alias("invisible") 24519625d8cSopenharmony_ci .visible_alias("visible"), 24619625d8cSopenharmony_ci ) 24719625d8cSopenharmony_ci .arg( 24819625d8cSopenharmony_ci Arg::new("flg") 24919625d8cSopenharmony_ci .long("flag") 25019625d8cSopenharmony_ci .short('f') 25119625d8cSopenharmony_ci .action(ArgAction::SetTrue) 25219625d8cSopenharmony_ci .visible_aliases(["v_flg", "flag2", "flg3"]), 25319625d8cSopenharmony_ci ), 25419625d8cSopenharmony_ci ); 25519625d8cSopenharmony_ci utils::assert_output(cmd, "ct test --help", SC_VISIBLE_ALIAS_HELP, false); 25619625d8cSopenharmony_ci} 257