119625d8cSopenharmony_ci#![allow(clippy::bool_assert_comparison)] 219625d8cSopenharmony_ci 319625d8cSopenharmony_ciuse clap::builder::ArgPredicate; 419625d8cSopenharmony_ciuse clap::error::ErrorKind; 519625d8cSopenharmony_ciuse clap::Arg; 619625d8cSopenharmony_ciuse clap::ArgAction; 719625d8cSopenharmony_ciuse clap::Command; 819625d8cSopenharmony_ci 919625d8cSopenharmony_ci#[test] 1019625d8cSopenharmony_cifn set() { 1119625d8cSopenharmony_ci let cmd = Command::new("test").arg(Arg::new("mammal").long("mammal").action(ArgAction::Set)); 1219625d8cSopenharmony_ci 1319625d8cSopenharmony_ci let matches = cmd.clone().try_get_matches_from(["test"]).unwrap(); 1419625d8cSopenharmony_ci assert_eq!(matches.get_one::<String>("mammal"), None); 1519625d8cSopenharmony_ci assert_eq!(matches.contains_id("mammal"), false); 1619625d8cSopenharmony_ci assert_eq!(matches.index_of("mammal"), None); 1719625d8cSopenharmony_ci 1819625d8cSopenharmony_ci let matches = cmd 1919625d8cSopenharmony_ci .clone() 2019625d8cSopenharmony_ci .try_get_matches_from(["test", "--mammal", "dog"]) 2119625d8cSopenharmony_ci .unwrap(); 2219625d8cSopenharmony_ci assert_eq!(matches.get_one::<String>("mammal").unwrap(), "dog"); 2319625d8cSopenharmony_ci assert_eq!(matches.contains_id("mammal"), true); 2419625d8cSopenharmony_ci assert_eq!(matches.index_of("mammal"), Some(2)); 2519625d8cSopenharmony_ci 2619625d8cSopenharmony_ci let result = cmd 2719625d8cSopenharmony_ci .clone() 2819625d8cSopenharmony_ci .try_get_matches_from(["test", "--mammal", "dog", "--mammal", "cat"]); 2919625d8cSopenharmony_ci let err = result.err().unwrap(); 3019625d8cSopenharmony_ci assert_eq!(err.kind(), ErrorKind::ArgumentConflict); 3119625d8cSopenharmony_ci 3219625d8cSopenharmony_ci let matches = cmd 3319625d8cSopenharmony_ci .clone() 3419625d8cSopenharmony_ci .args_override_self(true) 3519625d8cSopenharmony_ci .try_get_matches_from(["test", "--mammal", "dog", "--mammal", "cat"]) 3619625d8cSopenharmony_ci .unwrap(); 3719625d8cSopenharmony_ci assert_eq!(matches.get_one::<String>("mammal").unwrap(), "cat"); 3819625d8cSopenharmony_ci assert_eq!(matches.contains_id("mammal"), true); 3919625d8cSopenharmony_ci assert_eq!(matches.index_of("mammal"), Some(4)); 4019625d8cSopenharmony_ci} 4119625d8cSopenharmony_ci 4219625d8cSopenharmony_ci#[test] 4319625d8cSopenharmony_cifn append() { 4419625d8cSopenharmony_ci let cmd = Command::new("test").arg(Arg::new("mammal").long("mammal").action(ArgAction::Append)); 4519625d8cSopenharmony_ci 4619625d8cSopenharmony_ci let matches = cmd.clone().try_get_matches_from(["test"]).unwrap(); 4719625d8cSopenharmony_ci assert_eq!(matches.get_one::<String>("mammal"), None); 4819625d8cSopenharmony_ci assert_eq!(matches.contains_id("mammal"), false); 4919625d8cSopenharmony_ci assert_eq!(matches.index_of("mammal"), None); 5019625d8cSopenharmony_ci 5119625d8cSopenharmony_ci let matches = cmd 5219625d8cSopenharmony_ci .clone() 5319625d8cSopenharmony_ci .try_get_matches_from(["test", "--mammal", "dog"]) 5419625d8cSopenharmony_ci .unwrap(); 5519625d8cSopenharmony_ci assert_eq!(matches.get_one::<String>("mammal").unwrap(), "dog"); 5619625d8cSopenharmony_ci assert_eq!(matches.contains_id("mammal"), true); 5719625d8cSopenharmony_ci assert_eq!( 5819625d8cSopenharmony_ci matches.indices_of("mammal").unwrap().collect::<Vec<_>>(), 5919625d8cSopenharmony_ci vec![2] 6019625d8cSopenharmony_ci ); 6119625d8cSopenharmony_ci 6219625d8cSopenharmony_ci let matches = cmd 6319625d8cSopenharmony_ci .clone() 6419625d8cSopenharmony_ci .try_get_matches_from(["test", "--mammal", "dog", "--mammal", "cat"]) 6519625d8cSopenharmony_ci .unwrap(); 6619625d8cSopenharmony_ci assert_eq!( 6719625d8cSopenharmony_ci matches 6819625d8cSopenharmony_ci .get_many::<String>("mammal") 6919625d8cSopenharmony_ci .unwrap() 7019625d8cSopenharmony_ci .map(|s| s.as_str()) 7119625d8cSopenharmony_ci .collect::<Vec<_>>(), 7219625d8cSopenharmony_ci vec!["dog", "cat"] 7319625d8cSopenharmony_ci ); 7419625d8cSopenharmony_ci assert_eq!(matches.contains_id("mammal"), true); 7519625d8cSopenharmony_ci assert_eq!( 7619625d8cSopenharmony_ci matches.indices_of("mammal").unwrap().collect::<Vec<_>>(), 7719625d8cSopenharmony_ci vec![2, 4] 7819625d8cSopenharmony_ci ); 7919625d8cSopenharmony_ci} 8019625d8cSopenharmony_ci 8119625d8cSopenharmony_ci#[test] 8219625d8cSopenharmony_cifn set_true() { 8319625d8cSopenharmony_ci let cmd = 8419625d8cSopenharmony_ci Command::new("test").arg(Arg::new("mammal").long("mammal").action(ArgAction::SetTrue)); 8519625d8cSopenharmony_ci 8619625d8cSopenharmony_ci let matches = cmd.clone().try_get_matches_from(["test"]).unwrap(); 8719625d8cSopenharmony_ci assert_eq!(matches.get_flag("mammal"), false); 8819625d8cSopenharmony_ci assert_eq!(matches.contains_id("mammal"), true); 8919625d8cSopenharmony_ci assert_eq!(matches.index_of("mammal"), Some(1)); 9019625d8cSopenharmony_ci 9119625d8cSopenharmony_ci let matches = cmd 9219625d8cSopenharmony_ci .clone() 9319625d8cSopenharmony_ci .try_get_matches_from(["test", "--mammal"]) 9419625d8cSopenharmony_ci .unwrap(); 9519625d8cSopenharmony_ci assert_eq!(matches.get_flag("mammal"), true); 9619625d8cSopenharmony_ci assert_eq!(matches.contains_id("mammal"), true); 9719625d8cSopenharmony_ci assert_eq!(matches.index_of("mammal"), Some(1)); 9819625d8cSopenharmony_ci 9919625d8cSopenharmony_ci let result = cmd 10019625d8cSopenharmony_ci .clone() 10119625d8cSopenharmony_ci .try_get_matches_from(["test", "--mammal", "--mammal"]); 10219625d8cSopenharmony_ci let err = result.err().unwrap(); 10319625d8cSopenharmony_ci assert_eq!(err.kind(), ErrorKind::ArgumentConflict); 10419625d8cSopenharmony_ci 10519625d8cSopenharmony_ci let matches = cmd 10619625d8cSopenharmony_ci .clone() 10719625d8cSopenharmony_ci .args_override_self(true) 10819625d8cSopenharmony_ci .try_get_matches_from(["test", "--mammal", "--mammal"]) 10919625d8cSopenharmony_ci .unwrap(); 11019625d8cSopenharmony_ci assert_eq!(matches.get_flag("mammal"), true); 11119625d8cSopenharmony_ci assert_eq!(matches.contains_id("mammal"), true); 11219625d8cSopenharmony_ci assert_eq!(matches.index_of("mammal"), Some(2)); 11319625d8cSopenharmony_ci} 11419625d8cSopenharmony_ci 11519625d8cSopenharmony_ci#[test] 11619625d8cSopenharmony_cifn set_true_with_explicit_default_value() { 11719625d8cSopenharmony_ci let cmd = Command::new("test").arg( 11819625d8cSopenharmony_ci Arg::new("mammal") 11919625d8cSopenharmony_ci .long("mammal") 12019625d8cSopenharmony_ci .action(ArgAction::SetTrue) 12119625d8cSopenharmony_ci .default_value("false"), 12219625d8cSopenharmony_ci ); 12319625d8cSopenharmony_ci 12419625d8cSopenharmony_ci let matches = cmd 12519625d8cSopenharmony_ci .clone() 12619625d8cSopenharmony_ci .try_get_matches_from(["test", "--mammal"]) 12719625d8cSopenharmony_ci .unwrap(); 12819625d8cSopenharmony_ci assert_eq!(matches.get_flag("mammal"), true); 12919625d8cSopenharmony_ci assert_eq!(matches.contains_id("mammal"), true); 13019625d8cSopenharmony_ci assert_eq!(matches.index_of("mammal"), Some(1)); 13119625d8cSopenharmony_ci 13219625d8cSopenharmony_ci let matches = cmd.clone().try_get_matches_from(["test"]).unwrap(); 13319625d8cSopenharmony_ci assert_eq!(matches.get_flag("mammal"), false); 13419625d8cSopenharmony_ci assert_eq!(matches.contains_id("mammal"), true); 13519625d8cSopenharmony_ci assert_eq!(matches.index_of("mammal"), Some(1)); 13619625d8cSopenharmony_ci} 13719625d8cSopenharmony_ci 13819625d8cSopenharmony_ci#[test] 13919625d8cSopenharmony_cifn set_true_with_default_value_if_present() { 14019625d8cSopenharmony_ci let cmd = Command::new("test") 14119625d8cSopenharmony_ci .arg( 14219625d8cSopenharmony_ci Arg::new("mammal") 14319625d8cSopenharmony_ci .long("mammal") 14419625d8cSopenharmony_ci .action(ArgAction::SetTrue) 14519625d8cSopenharmony_ci .default_value_if("dog", ArgPredicate::IsPresent, Some("true")), 14619625d8cSopenharmony_ci ) 14719625d8cSopenharmony_ci .arg(Arg::new("dog").long("dog").action(ArgAction::SetTrue)); 14819625d8cSopenharmony_ci 14919625d8cSopenharmony_ci let matches = cmd.clone().try_get_matches_from(["test"]).unwrap(); 15019625d8cSopenharmony_ci assert_eq!(matches.get_flag("dog"), false); 15119625d8cSopenharmony_ci assert_eq!(matches.get_flag("mammal"), false); 15219625d8cSopenharmony_ci 15319625d8cSopenharmony_ci let matches = cmd.clone().try_get_matches_from(["test", "--dog"]).unwrap(); 15419625d8cSopenharmony_ci assert_eq!(matches.get_flag("dog"), true); 15519625d8cSopenharmony_ci assert_eq!(matches.get_flag("mammal"), true); 15619625d8cSopenharmony_ci 15719625d8cSopenharmony_ci let matches = cmd 15819625d8cSopenharmony_ci .clone() 15919625d8cSopenharmony_ci .try_get_matches_from(["test", "--mammal"]) 16019625d8cSopenharmony_ci .unwrap(); 16119625d8cSopenharmony_ci assert_eq!(matches.get_flag("dog"), false); 16219625d8cSopenharmony_ci assert_eq!(matches.get_flag("mammal"), true); 16319625d8cSopenharmony_ci} 16419625d8cSopenharmony_ci 16519625d8cSopenharmony_ci#[test] 16619625d8cSopenharmony_cifn set_true_with_default_value_if_value() { 16719625d8cSopenharmony_ci let cmd = Command::new("test") 16819625d8cSopenharmony_ci .arg( 16919625d8cSopenharmony_ci Arg::new("mammal") 17019625d8cSopenharmony_ci .long("mammal") 17119625d8cSopenharmony_ci .action(ArgAction::SetTrue) 17219625d8cSopenharmony_ci .default_value_if("dog", "true", Some("true")), 17319625d8cSopenharmony_ci ) 17419625d8cSopenharmony_ci .arg(Arg::new("dog").long("dog").action(ArgAction::SetTrue)); 17519625d8cSopenharmony_ci 17619625d8cSopenharmony_ci let matches = cmd.clone().try_get_matches_from(["test"]).unwrap(); 17719625d8cSopenharmony_ci assert_eq!(matches.get_flag("dog"), false); 17819625d8cSopenharmony_ci assert_eq!(matches.get_flag("mammal"), false); 17919625d8cSopenharmony_ci 18019625d8cSopenharmony_ci let matches = cmd.clone().try_get_matches_from(["test", "--dog"]).unwrap(); 18119625d8cSopenharmony_ci assert_eq!(matches.get_flag("dog"), true); 18219625d8cSopenharmony_ci assert_eq!(matches.get_flag("mammal"), true); 18319625d8cSopenharmony_ci 18419625d8cSopenharmony_ci let matches = cmd 18519625d8cSopenharmony_ci .clone() 18619625d8cSopenharmony_ci .try_get_matches_from(["test", "--mammal"]) 18719625d8cSopenharmony_ci .unwrap(); 18819625d8cSopenharmony_ci assert_eq!(matches.get_flag("dog"), false); 18919625d8cSopenharmony_ci assert_eq!(matches.get_flag("mammal"), true); 19019625d8cSopenharmony_ci} 19119625d8cSopenharmony_ci 19219625d8cSopenharmony_ci#[test] 19319625d8cSopenharmony_cifn set_true_with_required_if_eq() { 19419625d8cSopenharmony_ci let cmd = Command::new("test") 19519625d8cSopenharmony_ci .arg( 19619625d8cSopenharmony_ci Arg::new("mammal") 19719625d8cSopenharmony_ci .long("mammal") 19819625d8cSopenharmony_ci .action(ArgAction::SetTrue) 19919625d8cSopenharmony_ci .required_if_eq("dog", "true"), 20019625d8cSopenharmony_ci ) 20119625d8cSopenharmony_ci .arg(Arg::new("dog").long("dog").action(ArgAction::SetTrue)); 20219625d8cSopenharmony_ci 20319625d8cSopenharmony_ci let matches = cmd 20419625d8cSopenharmony_ci .clone() 20519625d8cSopenharmony_ci .try_get_matches_from(["test", "--mammal"]) 20619625d8cSopenharmony_ci .unwrap(); 20719625d8cSopenharmony_ci assert_eq!(matches.get_flag("dog"), false); 20819625d8cSopenharmony_ci assert_eq!(matches.get_flag("mammal"), true); 20919625d8cSopenharmony_ci 21019625d8cSopenharmony_ci cmd.clone() 21119625d8cSopenharmony_ci .try_get_matches_from(["test", "--dog"]) 21219625d8cSopenharmony_ci .unwrap_err(); 21319625d8cSopenharmony_ci 21419625d8cSopenharmony_ci let matches = cmd 21519625d8cSopenharmony_ci .clone() 21619625d8cSopenharmony_ci .try_get_matches_from(["test", "--dog", "--mammal"]) 21719625d8cSopenharmony_ci .unwrap(); 21819625d8cSopenharmony_ci assert_eq!(matches.get_flag("dog"), true); 21919625d8cSopenharmony_ci assert_eq!(matches.get_flag("mammal"), true); 22019625d8cSopenharmony_ci} 22119625d8cSopenharmony_ci 22219625d8cSopenharmony_ci#[test] 22319625d8cSopenharmony_cifn set_false() { 22419625d8cSopenharmony_ci let cmd = Command::new("test").arg( 22519625d8cSopenharmony_ci Arg::new("mammal") 22619625d8cSopenharmony_ci .long("mammal") 22719625d8cSopenharmony_ci .action(ArgAction::SetFalse), 22819625d8cSopenharmony_ci ); 22919625d8cSopenharmony_ci 23019625d8cSopenharmony_ci let matches = cmd.clone().try_get_matches_from(["test"]).unwrap(); 23119625d8cSopenharmony_ci assert_eq!(matches.get_flag("mammal"), true); 23219625d8cSopenharmony_ci assert_eq!(matches.contains_id("mammal"), true); 23319625d8cSopenharmony_ci assert_eq!(matches.index_of("mammal"), Some(1)); 23419625d8cSopenharmony_ci 23519625d8cSopenharmony_ci let matches = cmd 23619625d8cSopenharmony_ci .clone() 23719625d8cSopenharmony_ci .try_get_matches_from(["test", "--mammal"]) 23819625d8cSopenharmony_ci .unwrap(); 23919625d8cSopenharmony_ci assert_eq!(matches.get_flag("mammal"), false); 24019625d8cSopenharmony_ci assert_eq!(matches.contains_id("mammal"), true); 24119625d8cSopenharmony_ci assert_eq!(matches.index_of("mammal"), Some(1)); 24219625d8cSopenharmony_ci 24319625d8cSopenharmony_ci let result = cmd 24419625d8cSopenharmony_ci .clone() 24519625d8cSopenharmony_ci .try_get_matches_from(["test", "--mammal", "--mammal"]); 24619625d8cSopenharmony_ci let err = result.err().unwrap(); 24719625d8cSopenharmony_ci assert_eq!(err.kind(), ErrorKind::ArgumentConflict); 24819625d8cSopenharmony_ci 24919625d8cSopenharmony_ci let matches = cmd 25019625d8cSopenharmony_ci .clone() 25119625d8cSopenharmony_ci .args_override_self(true) 25219625d8cSopenharmony_ci .try_get_matches_from(["test", "--mammal", "--mammal"]) 25319625d8cSopenharmony_ci .unwrap(); 25419625d8cSopenharmony_ci assert_eq!(matches.get_flag("mammal"), false); 25519625d8cSopenharmony_ci assert_eq!(matches.contains_id("mammal"), true); 25619625d8cSopenharmony_ci assert_eq!(matches.index_of("mammal"), Some(2)); 25719625d8cSopenharmony_ci} 25819625d8cSopenharmony_ci 25919625d8cSopenharmony_ci#[test] 26019625d8cSopenharmony_cifn set_false_with_explicit_default_value() { 26119625d8cSopenharmony_ci let cmd = Command::new("test").arg( 26219625d8cSopenharmony_ci Arg::new("mammal") 26319625d8cSopenharmony_ci .long("mammal") 26419625d8cSopenharmony_ci .action(ArgAction::SetFalse) 26519625d8cSopenharmony_ci .default_value("true"), 26619625d8cSopenharmony_ci ); 26719625d8cSopenharmony_ci 26819625d8cSopenharmony_ci let matches = cmd 26919625d8cSopenharmony_ci .clone() 27019625d8cSopenharmony_ci .try_get_matches_from(["test", "--mammal"]) 27119625d8cSopenharmony_ci .unwrap(); 27219625d8cSopenharmony_ci assert_eq!(matches.get_flag("mammal"), false); 27319625d8cSopenharmony_ci assert_eq!(matches.contains_id("mammal"), true); 27419625d8cSopenharmony_ci assert_eq!(matches.index_of("mammal"), Some(1)); 27519625d8cSopenharmony_ci 27619625d8cSopenharmony_ci let matches = cmd.clone().try_get_matches_from(["test"]).unwrap(); 27719625d8cSopenharmony_ci assert_eq!(matches.get_flag("mammal"), true); 27819625d8cSopenharmony_ci assert_eq!(matches.contains_id("mammal"), true); 27919625d8cSopenharmony_ci assert_eq!(matches.index_of("mammal"), Some(1)); 28019625d8cSopenharmony_ci} 28119625d8cSopenharmony_ci 28219625d8cSopenharmony_ci#[test] 28319625d8cSopenharmony_cifn set_false_with_default_value_if_present() { 28419625d8cSopenharmony_ci let cmd = Command::new("test") 28519625d8cSopenharmony_ci .arg( 28619625d8cSopenharmony_ci Arg::new("mammal") 28719625d8cSopenharmony_ci .long("mammal") 28819625d8cSopenharmony_ci .action(ArgAction::SetFalse) 28919625d8cSopenharmony_ci .default_value_if("dog", ArgPredicate::IsPresent, Some("false")), 29019625d8cSopenharmony_ci ) 29119625d8cSopenharmony_ci .arg(Arg::new("dog").long("dog").action(ArgAction::SetFalse)); 29219625d8cSopenharmony_ci 29319625d8cSopenharmony_ci let matches = cmd.clone().try_get_matches_from(["test"]).unwrap(); 29419625d8cSopenharmony_ci assert_eq!(matches.get_flag("dog"), true); 29519625d8cSopenharmony_ci assert_eq!(matches.get_flag("mammal"), true); 29619625d8cSopenharmony_ci 29719625d8cSopenharmony_ci let matches = cmd.clone().try_get_matches_from(["test", "--dog"]).unwrap(); 29819625d8cSopenharmony_ci assert_eq!(matches.get_flag("dog"), false); 29919625d8cSopenharmony_ci assert_eq!(matches.get_flag("mammal"), false); 30019625d8cSopenharmony_ci 30119625d8cSopenharmony_ci let matches = cmd 30219625d8cSopenharmony_ci .clone() 30319625d8cSopenharmony_ci .try_get_matches_from(["test", "--mammal"]) 30419625d8cSopenharmony_ci .unwrap(); 30519625d8cSopenharmony_ci assert_eq!(matches.get_flag("dog"), true); 30619625d8cSopenharmony_ci assert_eq!(matches.get_flag("mammal"), false); 30719625d8cSopenharmony_ci} 30819625d8cSopenharmony_ci 30919625d8cSopenharmony_ci#[test] 31019625d8cSopenharmony_cifn set_false_with_default_value_if_value() { 31119625d8cSopenharmony_ci let cmd = Command::new("test") 31219625d8cSopenharmony_ci .arg( 31319625d8cSopenharmony_ci Arg::new("mammal") 31419625d8cSopenharmony_ci .long("mammal") 31519625d8cSopenharmony_ci .action(ArgAction::SetFalse) 31619625d8cSopenharmony_ci .default_value_if("dog", "false", Some("false")), 31719625d8cSopenharmony_ci ) 31819625d8cSopenharmony_ci .arg(Arg::new("dog").long("dog").action(ArgAction::SetFalse)); 31919625d8cSopenharmony_ci 32019625d8cSopenharmony_ci let matches = cmd.clone().try_get_matches_from(["test"]).unwrap(); 32119625d8cSopenharmony_ci assert_eq!(matches.get_flag("dog"), true); 32219625d8cSopenharmony_ci assert_eq!(matches.get_flag("mammal"), true); 32319625d8cSopenharmony_ci 32419625d8cSopenharmony_ci let matches = cmd.clone().try_get_matches_from(["test", "--dog"]).unwrap(); 32519625d8cSopenharmony_ci assert_eq!(matches.get_flag("dog"), false); 32619625d8cSopenharmony_ci assert_eq!(matches.get_flag("mammal"), false); 32719625d8cSopenharmony_ci 32819625d8cSopenharmony_ci let matches = cmd 32919625d8cSopenharmony_ci .clone() 33019625d8cSopenharmony_ci .try_get_matches_from(["test", "--mammal"]) 33119625d8cSopenharmony_ci .unwrap(); 33219625d8cSopenharmony_ci assert_eq!(matches.get_flag("dog"), true); 33319625d8cSopenharmony_ci assert_eq!(matches.get_flag("mammal"), false); 33419625d8cSopenharmony_ci} 33519625d8cSopenharmony_ci 33619625d8cSopenharmony_ci#[test] 33719625d8cSopenharmony_cifn count() { 33819625d8cSopenharmony_ci let cmd = Command::new("test").arg(Arg::new("mammal").long("mammal").action(ArgAction::Count)); 33919625d8cSopenharmony_ci 34019625d8cSopenharmony_ci let matches = cmd.clone().try_get_matches_from(["test"]).unwrap(); 34119625d8cSopenharmony_ci assert_eq!(*matches.get_one::<u8>("mammal").unwrap(), 0); 34219625d8cSopenharmony_ci assert_eq!(matches.contains_id("mammal"), true); 34319625d8cSopenharmony_ci assert_eq!(matches.index_of("mammal"), Some(1)); 34419625d8cSopenharmony_ci 34519625d8cSopenharmony_ci let matches = cmd 34619625d8cSopenharmony_ci .clone() 34719625d8cSopenharmony_ci .try_get_matches_from(["test", "--mammal"]) 34819625d8cSopenharmony_ci .unwrap(); 34919625d8cSopenharmony_ci assert_eq!(*matches.get_one::<u8>("mammal").unwrap(), 1); 35019625d8cSopenharmony_ci assert_eq!(matches.contains_id("mammal"), true); 35119625d8cSopenharmony_ci assert_eq!(matches.index_of("mammal"), Some(1)); 35219625d8cSopenharmony_ci 35319625d8cSopenharmony_ci let matches = cmd 35419625d8cSopenharmony_ci .clone() 35519625d8cSopenharmony_ci .try_get_matches_from(["test", "--mammal", "--mammal"]) 35619625d8cSopenharmony_ci .unwrap(); 35719625d8cSopenharmony_ci assert_eq!(*matches.get_one::<u8>("mammal").unwrap(), 2); 35819625d8cSopenharmony_ci assert_eq!(matches.contains_id("mammal"), true); 35919625d8cSopenharmony_ci assert_eq!(matches.index_of("mammal"), Some(2)); 36019625d8cSopenharmony_ci} 36119625d8cSopenharmony_ci 36219625d8cSopenharmony_ci#[test] 36319625d8cSopenharmony_cifn count_with_explicit_default_value() { 36419625d8cSopenharmony_ci let cmd = Command::new("test").arg( 36519625d8cSopenharmony_ci Arg::new("mammal") 36619625d8cSopenharmony_ci .long("mammal") 36719625d8cSopenharmony_ci .action(ArgAction::Count) 36819625d8cSopenharmony_ci .default_value("10"), 36919625d8cSopenharmony_ci ); 37019625d8cSopenharmony_ci 37119625d8cSopenharmony_ci let matches = cmd 37219625d8cSopenharmony_ci .clone() 37319625d8cSopenharmony_ci .try_get_matches_from(["test", "--mammal"]) 37419625d8cSopenharmony_ci .unwrap(); 37519625d8cSopenharmony_ci assert_eq!(*matches.get_one::<u8>("mammal").unwrap(), 1); 37619625d8cSopenharmony_ci assert_eq!(matches.contains_id("mammal"), true); 37719625d8cSopenharmony_ci assert_eq!(matches.index_of("mammal"), Some(1)); 37819625d8cSopenharmony_ci 37919625d8cSopenharmony_ci let matches = cmd.clone().try_get_matches_from(["test"]).unwrap(); 38019625d8cSopenharmony_ci assert_eq!(*matches.get_one::<u8>("mammal").unwrap(), 10); 38119625d8cSopenharmony_ci assert_eq!(matches.contains_id("mammal"), true); 38219625d8cSopenharmony_ci assert_eq!(matches.index_of("mammal"), Some(1)); 38319625d8cSopenharmony_ci} 38419625d8cSopenharmony_ci 38519625d8cSopenharmony_ci#[test] 38619625d8cSopenharmony_cifn count_with_default_value_if_present() { 38719625d8cSopenharmony_ci let cmd = Command::new("test") 38819625d8cSopenharmony_ci .arg( 38919625d8cSopenharmony_ci Arg::new("mammal") 39019625d8cSopenharmony_ci .long("mammal") 39119625d8cSopenharmony_ci .action(ArgAction::Count) 39219625d8cSopenharmony_ci .default_value_if("dog", ArgPredicate::IsPresent, Some("10")), 39319625d8cSopenharmony_ci ) 39419625d8cSopenharmony_ci .arg(Arg::new("dog").long("dog").action(ArgAction::Count)); 39519625d8cSopenharmony_ci 39619625d8cSopenharmony_ci let matches = cmd.clone().try_get_matches_from(["test"]).unwrap(); 39719625d8cSopenharmony_ci assert_eq!(*matches.get_one::<u8>("dog").unwrap(), 0); 39819625d8cSopenharmony_ci assert_eq!(*matches.get_one::<u8>("mammal").unwrap(), 0); 39919625d8cSopenharmony_ci 40019625d8cSopenharmony_ci let matches = cmd.clone().try_get_matches_from(["test", "--dog"]).unwrap(); 40119625d8cSopenharmony_ci assert_eq!(*matches.get_one::<u8>("dog").unwrap(), 1); 40219625d8cSopenharmony_ci assert_eq!(*matches.get_one::<u8>("mammal").unwrap(), 10); 40319625d8cSopenharmony_ci 40419625d8cSopenharmony_ci let matches = cmd 40519625d8cSopenharmony_ci .clone() 40619625d8cSopenharmony_ci .try_get_matches_from(["test", "--mammal"]) 40719625d8cSopenharmony_ci .unwrap(); 40819625d8cSopenharmony_ci assert_eq!(*matches.get_one::<u8>("dog").unwrap(), 0); 40919625d8cSopenharmony_ci assert_eq!(*matches.get_one::<u8>("mammal").unwrap(), 1); 41019625d8cSopenharmony_ci} 41119625d8cSopenharmony_ci 41219625d8cSopenharmony_ci#[test] 41319625d8cSopenharmony_cifn count_with_default_value_if_value() { 41419625d8cSopenharmony_ci let cmd = Command::new("test") 41519625d8cSopenharmony_ci .arg( 41619625d8cSopenharmony_ci Arg::new("mammal") 41719625d8cSopenharmony_ci .long("mammal") 41819625d8cSopenharmony_ci .action(ArgAction::Count) 41919625d8cSopenharmony_ci .default_value_if("dog", "2", Some("10")), 42019625d8cSopenharmony_ci ) 42119625d8cSopenharmony_ci .arg(Arg::new("dog").long("dog").action(ArgAction::Count)); 42219625d8cSopenharmony_ci 42319625d8cSopenharmony_ci let matches = cmd.clone().try_get_matches_from(["test"]).unwrap(); 42419625d8cSopenharmony_ci assert_eq!(*matches.get_one::<u8>("dog").unwrap(), 0); 42519625d8cSopenharmony_ci assert_eq!(*matches.get_one::<u8>("mammal").unwrap(), 0); 42619625d8cSopenharmony_ci 42719625d8cSopenharmony_ci let matches = cmd.clone().try_get_matches_from(["test", "--dog"]).unwrap(); 42819625d8cSopenharmony_ci assert_eq!(*matches.get_one::<u8>("dog").unwrap(), 1); 42919625d8cSopenharmony_ci assert_eq!(*matches.get_one::<u8>("mammal").unwrap(), 0); 43019625d8cSopenharmony_ci 43119625d8cSopenharmony_ci let matches = cmd 43219625d8cSopenharmony_ci .clone() 43319625d8cSopenharmony_ci .try_get_matches_from(["test", "--dog", "--dog"]) 43419625d8cSopenharmony_ci .unwrap(); 43519625d8cSopenharmony_ci assert_eq!(*matches.get_one::<u8>("dog").unwrap(), 2); 43619625d8cSopenharmony_ci assert_eq!(*matches.get_one::<u8>("mammal").unwrap(), 10); 43719625d8cSopenharmony_ci 43819625d8cSopenharmony_ci let matches = cmd 43919625d8cSopenharmony_ci .clone() 44019625d8cSopenharmony_ci .try_get_matches_from(["test", "--mammal"]) 44119625d8cSopenharmony_ci .unwrap(); 44219625d8cSopenharmony_ci assert_eq!(*matches.get_one::<u8>("dog").unwrap(), 0); 44319625d8cSopenharmony_ci assert_eq!(*matches.get_one::<u8>("mammal").unwrap(), 1); 44419625d8cSopenharmony_ci} 445