119625d8cSopenharmony_ciuse clap::{arg, value_parser, Command}; 219625d8cSopenharmony_ci#[cfg(debug_assertions)] 319625d8cSopenharmony_ciuse clap::{Arg, ArgAction}; 419625d8cSopenharmony_ci 519625d8cSopenharmony_ci#[test] 619625d8cSopenharmony_cifn ids() { 719625d8cSopenharmony_ci let m = Command::new("test") 819625d8cSopenharmony_ci .arg(arg!(--color <when>).value_parser(["auto", "always", "never"])) 919625d8cSopenharmony_ci .arg(arg!(--config <path>).value_parser(value_parser!(std::path::PathBuf))) 1019625d8cSopenharmony_ci .try_get_matches_from(["test", "--config=config.toml", "--color=auto"]) 1119625d8cSopenharmony_ci .unwrap(); 1219625d8cSopenharmony_ci assert_eq!( 1319625d8cSopenharmony_ci m.ids().map(|id| id.as_str()).collect::<Vec<_>>(), 1419625d8cSopenharmony_ci ["config", "color"] 1519625d8cSopenharmony_ci ); 1619625d8cSopenharmony_ci assert_eq!(m.ids().len(), 2); 1719625d8cSopenharmony_ci} 1819625d8cSopenharmony_ci 1919625d8cSopenharmony_ci#[test] 2019625d8cSopenharmony_cifn ids_ignore_unused() { 2119625d8cSopenharmony_ci let m = Command::new("test") 2219625d8cSopenharmony_ci .arg(arg!(--color <when>).value_parser(["auto", "always", "never"])) 2319625d8cSopenharmony_ci .arg(arg!(--config <path>).value_parser(value_parser!(std::path::PathBuf))) 2419625d8cSopenharmony_ci .try_get_matches_from(["test", "--config=config.toml"]) 2519625d8cSopenharmony_ci .unwrap(); 2619625d8cSopenharmony_ci assert_eq!( 2719625d8cSopenharmony_ci m.ids().map(|id| id.as_str()).collect::<Vec<_>>(), 2819625d8cSopenharmony_ci ["config"] 2919625d8cSopenharmony_ci ); 3019625d8cSopenharmony_ci assert_eq!(m.ids().len(), 1); 3119625d8cSopenharmony_ci} 3219625d8cSopenharmony_ci 3319625d8cSopenharmony_ci#[test] 3419625d8cSopenharmony_cifn ids_ignore_overridden() { 3519625d8cSopenharmony_ci let m = Command::new("test") 3619625d8cSopenharmony_ci .arg(arg!(--color <when>).value_parser(["auto", "always", "never"])) 3719625d8cSopenharmony_ci .arg( 3819625d8cSopenharmony_ci arg!(--config <path>) 3919625d8cSopenharmony_ci .value_parser(value_parser!(std::path::PathBuf)) 4019625d8cSopenharmony_ci .overrides_with("color"), 4119625d8cSopenharmony_ci ) 4219625d8cSopenharmony_ci .try_get_matches_from(["test", "--config=config.toml", "--color=auto"]) 4319625d8cSopenharmony_ci .unwrap(); 4419625d8cSopenharmony_ci assert_eq!(m.ids().map(|id| id.as_str()).collect::<Vec<_>>(), ["color"]); 4519625d8cSopenharmony_ci assert_eq!(m.ids().len(), 1); 4619625d8cSopenharmony_ci} 4719625d8cSopenharmony_ci 4819625d8cSopenharmony_ci#[test] 4919625d8cSopenharmony_ci#[cfg(debug_assertions)] 5019625d8cSopenharmony_ci#[should_panic = "Unknown argument or group id. Make sure you are using the argument id and not the short or long flags"] 5119625d8cSopenharmony_cifn arg_matches_if_present_wrong_arg() { 5219625d8cSopenharmony_ci let m = Command::new("test") 5319625d8cSopenharmony_ci .arg(Arg::new("flag").short('f').action(ArgAction::SetTrue)) 5419625d8cSopenharmony_ci .try_get_matches_from(["test", "-f"]) 5519625d8cSopenharmony_ci .unwrap(); 5619625d8cSopenharmony_ci 5719625d8cSopenharmony_ci assert!(*m.get_one::<bool>("flag").expect("defaulted by clap")); 5819625d8cSopenharmony_ci m.contains_id("f"); 5919625d8cSopenharmony_ci} 6019625d8cSopenharmony_ci 6119625d8cSopenharmony_ci#[test] 6219625d8cSopenharmony_ci#[cfg(debug_assertions)] 6319625d8cSopenharmony_ci#[should_panic = "Mismatch between definition and access of `o`. Unknown argument or group id. Make sure you are using the argument id and not the short or long flags"] 6419625d8cSopenharmony_cifn arg_matches_value_of_wrong_arg() { 6519625d8cSopenharmony_ci let m = Command::new("test") 6619625d8cSopenharmony_ci .arg(Arg::new("opt").short('o').action(ArgAction::Set)) 6719625d8cSopenharmony_ci .try_get_matches_from(["test", "-o", "val"]) 6819625d8cSopenharmony_ci .unwrap(); 6919625d8cSopenharmony_ci 7019625d8cSopenharmony_ci assert_eq!(m.get_one::<String>("opt").map(|v| v.as_str()), Some("val")); 7119625d8cSopenharmony_ci m.get_one::<String>("o").map(|v| v.as_str()); 7219625d8cSopenharmony_ci} 7319625d8cSopenharmony_ci 7419625d8cSopenharmony_ci#[test] 7519625d8cSopenharmony_ci#[cfg(debug_assertions)] 7619625d8cSopenharmony_ci#[should_panic = "`seed` is not a name of a subcommand."] 7719625d8cSopenharmony_cifn arg_matches_subcommand_matches_wrong_sub() { 7819625d8cSopenharmony_ci let m = Command::new("test") 7919625d8cSopenharmony_ci .subcommand(Command::new("speed")) 8019625d8cSopenharmony_ci .try_get_matches_from(["test", "speed"]) 8119625d8cSopenharmony_ci .unwrap(); 8219625d8cSopenharmony_ci 8319625d8cSopenharmony_ci assert!(m.subcommand_matches("speed").is_some()); 8419625d8cSopenharmony_ci m.subcommand_matches("seed"); 8519625d8cSopenharmony_ci} 86