119625d8cSopenharmony_ci#![cfg(feature = "env")] 219625d8cSopenharmony_ci 319625d8cSopenharmony_ciuse std::env; 419625d8cSopenharmony_ciuse std::ffi::OsStr; 519625d8cSopenharmony_ci 619625d8cSopenharmony_ciuse clap::{arg, builder::FalseyValueParser, Arg, ArgAction, Command}; 719625d8cSopenharmony_ci 819625d8cSopenharmony_ci#[test] 919625d8cSopenharmony_cifn env() { 1019625d8cSopenharmony_ci env::set_var("CLP_TEST_ENV", "env"); 1119625d8cSopenharmony_ci 1219625d8cSopenharmony_ci let r = Command::new("df") 1319625d8cSopenharmony_ci .arg( 1419625d8cSopenharmony_ci arg!([arg] "some opt") 1519625d8cSopenharmony_ci .env("CLP_TEST_ENV") 1619625d8cSopenharmony_ci .action(ArgAction::Set), 1719625d8cSopenharmony_ci ) 1819625d8cSopenharmony_ci .try_get_matches_from(vec![""]); 1919625d8cSopenharmony_ci 2019625d8cSopenharmony_ci assert!(r.is_ok(), "{}", r.unwrap_err()); 2119625d8cSopenharmony_ci let m = r.unwrap(); 2219625d8cSopenharmony_ci assert!(m.contains_id("arg")); 2319625d8cSopenharmony_ci assert_eq!( 2419625d8cSopenharmony_ci m.value_source("arg").unwrap(), 2519625d8cSopenharmony_ci clap::parser::ValueSource::EnvVariable 2619625d8cSopenharmony_ci ); 2719625d8cSopenharmony_ci assert_eq!( 2819625d8cSopenharmony_ci m.get_one::<String>("arg").map(|v| v.as_str()).unwrap(), 2919625d8cSopenharmony_ci "env" 3019625d8cSopenharmony_ci ); 3119625d8cSopenharmony_ci} 3219625d8cSopenharmony_ci 3319625d8cSopenharmony_ci#[test] 3419625d8cSopenharmony_cifn env_bool_literal() { 3519625d8cSopenharmony_ci env::set_var("CLP_TEST_FLAG_TRUE", "On"); 3619625d8cSopenharmony_ci env::set_var("CLP_TEST_FLAG_FALSE", "nO"); 3719625d8cSopenharmony_ci 3819625d8cSopenharmony_ci let r = Command::new("df") 3919625d8cSopenharmony_ci .arg( 4019625d8cSopenharmony_ci Arg::new("present") 4119625d8cSopenharmony_ci .short('p') 4219625d8cSopenharmony_ci .env("CLP_TEST_FLAG_TRUE") 4319625d8cSopenharmony_ci .action(ArgAction::SetTrue) 4419625d8cSopenharmony_ci .value_parser(FalseyValueParser::new()), 4519625d8cSopenharmony_ci ) 4619625d8cSopenharmony_ci .arg( 4719625d8cSopenharmony_ci Arg::new("negated") 4819625d8cSopenharmony_ci .short('n') 4919625d8cSopenharmony_ci .env("CLP_TEST_FLAG_FALSE") 5019625d8cSopenharmony_ci .action(ArgAction::SetTrue) 5119625d8cSopenharmony_ci .value_parser(FalseyValueParser::new()), 5219625d8cSopenharmony_ci ) 5319625d8cSopenharmony_ci .arg( 5419625d8cSopenharmony_ci Arg::new("absent") 5519625d8cSopenharmony_ci .short('a') 5619625d8cSopenharmony_ci .env("CLP_TEST_FLAG_ABSENT") 5719625d8cSopenharmony_ci .action(ArgAction::SetTrue) 5819625d8cSopenharmony_ci .value_parser(FalseyValueParser::new()), 5919625d8cSopenharmony_ci ) 6019625d8cSopenharmony_ci .try_get_matches_from(vec![""]); 6119625d8cSopenharmony_ci 6219625d8cSopenharmony_ci assert!(r.is_ok(), "{}", r.unwrap_err()); 6319625d8cSopenharmony_ci let m = r.unwrap(); 6419625d8cSopenharmony_ci assert!(*m.get_one::<bool>("present").expect("defaulted by clap")); 6519625d8cSopenharmony_ci assert!(!*m.get_one::<bool>("negated").expect("defaulted by clap")); 6619625d8cSopenharmony_ci assert!(!*m.get_one::<bool>("absent").expect("defaulted by clap")); 6719625d8cSopenharmony_ci} 6819625d8cSopenharmony_ci 6919625d8cSopenharmony_ci#[test] 7019625d8cSopenharmony_cifn env_os() { 7119625d8cSopenharmony_ci env::set_var("CLP_TEST_ENV_OS", "env"); 7219625d8cSopenharmony_ci 7319625d8cSopenharmony_ci let r = Command::new("df") 7419625d8cSopenharmony_ci .arg( 7519625d8cSopenharmony_ci arg!([arg] "some opt") 7619625d8cSopenharmony_ci .env(OsStr::new("CLP_TEST_ENV_OS")) 7719625d8cSopenharmony_ci .action(ArgAction::Set), 7819625d8cSopenharmony_ci ) 7919625d8cSopenharmony_ci .try_get_matches_from(vec![""]); 8019625d8cSopenharmony_ci 8119625d8cSopenharmony_ci assert!(r.is_ok(), "{}", r.unwrap_err()); 8219625d8cSopenharmony_ci let m = r.unwrap(); 8319625d8cSopenharmony_ci assert!(m.contains_id("arg")); 8419625d8cSopenharmony_ci assert_eq!( 8519625d8cSopenharmony_ci m.get_one::<String>("arg").map(|v| v.as_str()).unwrap(), 8619625d8cSopenharmony_ci "env" 8719625d8cSopenharmony_ci ); 8819625d8cSopenharmony_ci} 8919625d8cSopenharmony_ci 9019625d8cSopenharmony_ci#[test] 9119625d8cSopenharmony_cifn no_env() { 9219625d8cSopenharmony_ci // All the other tests use the presence of the Environment variable... 9319625d8cSopenharmony_ci // we need another variable just in case one of the others is running at the same time... 9419625d8cSopenharmony_ci env::remove_var("CLP_TEST_ENV_NONE"); 9519625d8cSopenharmony_ci 9619625d8cSopenharmony_ci let r = Command::new("df") 9719625d8cSopenharmony_ci .arg( 9819625d8cSopenharmony_ci arg!([arg] "some opt") 9919625d8cSopenharmony_ci .env("CLP_TEST_ENV_NONE") 10019625d8cSopenharmony_ci .action(ArgAction::Set), 10119625d8cSopenharmony_ci ) 10219625d8cSopenharmony_ci .try_get_matches_from(vec![""]); 10319625d8cSopenharmony_ci 10419625d8cSopenharmony_ci assert!(r.is_ok(), "{}", r.unwrap_err()); 10519625d8cSopenharmony_ci let m = r.unwrap(); 10619625d8cSopenharmony_ci assert!(!m.contains_id("arg")); 10719625d8cSopenharmony_ci assert_eq!(m.value_source("arg"), None); 10819625d8cSopenharmony_ci assert_eq!(m.get_one::<String>("arg").map(|v| v.as_str()), None); 10919625d8cSopenharmony_ci} 11019625d8cSopenharmony_ci 11119625d8cSopenharmony_ci#[test] 11219625d8cSopenharmony_cifn no_env_no_takes_value() { 11319625d8cSopenharmony_ci // All the other tests use the presence of the Environment variable... 11419625d8cSopenharmony_ci // we need another variable just in case one of the others is running at the same time... 11519625d8cSopenharmony_ci env::remove_var("CLP_TEST_ENV_NONE"); 11619625d8cSopenharmony_ci 11719625d8cSopenharmony_ci let r = Command::new("df") 11819625d8cSopenharmony_ci .arg(arg!([arg] "some opt").env("CLP_TEST_ENV_NONE")) 11919625d8cSopenharmony_ci .try_get_matches_from(vec![""]); 12019625d8cSopenharmony_ci 12119625d8cSopenharmony_ci assert!(r.is_ok(), "{}", r.unwrap_err()); 12219625d8cSopenharmony_ci let m = r.unwrap(); 12319625d8cSopenharmony_ci assert!(!m.contains_id("arg")); 12419625d8cSopenharmony_ci assert_eq!(m.value_source("arg"), None); 12519625d8cSopenharmony_ci assert_eq!(m.get_one::<String>("arg").map(|v| v.as_str()), None); 12619625d8cSopenharmony_ci} 12719625d8cSopenharmony_ci 12819625d8cSopenharmony_ci#[test] 12919625d8cSopenharmony_cifn with_default() { 13019625d8cSopenharmony_ci env::set_var("CLP_TEST_ENV_WD", "env"); 13119625d8cSopenharmony_ci 13219625d8cSopenharmony_ci let r = Command::new("df") 13319625d8cSopenharmony_ci .arg( 13419625d8cSopenharmony_ci arg!([arg] "some opt") 13519625d8cSopenharmony_ci .env("CLP_TEST_ENV_WD") 13619625d8cSopenharmony_ci .action(ArgAction::Set) 13719625d8cSopenharmony_ci .default_value("default"), 13819625d8cSopenharmony_ci ) 13919625d8cSopenharmony_ci .try_get_matches_from(vec![""]); 14019625d8cSopenharmony_ci 14119625d8cSopenharmony_ci assert!(r.is_ok(), "{}", r.unwrap_err()); 14219625d8cSopenharmony_ci let m = r.unwrap(); 14319625d8cSopenharmony_ci assert!(m.contains_id("arg")); 14419625d8cSopenharmony_ci assert_eq!( 14519625d8cSopenharmony_ci m.value_source("arg").unwrap(), 14619625d8cSopenharmony_ci clap::parser::ValueSource::EnvVariable 14719625d8cSopenharmony_ci ); 14819625d8cSopenharmony_ci assert_eq!( 14919625d8cSopenharmony_ci m.get_one::<String>("arg").map(|v| v.as_str()).unwrap(), 15019625d8cSopenharmony_ci "env" 15119625d8cSopenharmony_ci ); 15219625d8cSopenharmony_ci} 15319625d8cSopenharmony_ci 15419625d8cSopenharmony_ci#[test] 15519625d8cSopenharmony_cifn opt_user_override() { 15619625d8cSopenharmony_ci env::set_var("CLP_TEST_ENV_OR", "env"); 15719625d8cSopenharmony_ci 15819625d8cSopenharmony_ci let r = Command::new("df") 15919625d8cSopenharmony_ci .arg( 16019625d8cSopenharmony_ci arg!(--arg [FILE] "some arg") 16119625d8cSopenharmony_ci .env("CLP_TEST_ENV_OR") 16219625d8cSopenharmony_ci .action(ArgAction::Set), 16319625d8cSopenharmony_ci ) 16419625d8cSopenharmony_ci .try_get_matches_from(vec!["", "--arg", "opt"]); 16519625d8cSopenharmony_ci 16619625d8cSopenharmony_ci assert!(r.is_ok(), "{}", r.unwrap_err()); 16719625d8cSopenharmony_ci let m = r.unwrap(); 16819625d8cSopenharmony_ci assert!(m.contains_id("arg")); 16919625d8cSopenharmony_ci assert_eq!( 17019625d8cSopenharmony_ci m.value_source("arg").unwrap(), 17119625d8cSopenharmony_ci clap::parser::ValueSource::CommandLine 17219625d8cSopenharmony_ci ); 17319625d8cSopenharmony_ci assert_eq!( 17419625d8cSopenharmony_ci m.get_one::<String>("arg").map(|v| v.as_str()).unwrap(), 17519625d8cSopenharmony_ci "opt" 17619625d8cSopenharmony_ci ); 17719625d8cSopenharmony_ci 17819625d8cSopenharmony_ci // see https://github.com/clap-rs/clap/issues/1835 17919625d8cSopenharmony_ci let values: Vec<_> = m 18019625d8cSopenharmony_ci .get_many::<String>("arg") 18119625d8cSopenharmony_ci .unwrap() 18219625d8cSopenharmony_ci .map(|v| v.as_str()) 18319625d8cSopenharmony_ci .collect(); 18419625d8cSopenharmony_ci assert_eq!(values, vec!["opt"]); 18519625d8cSopenharmony_ci} 18619625d8cSopenharmony_ci 18719625d8cSopenharmony_ci#[test] 18819625d8cSopenharmony_cifn positionals() { 18919625d8cSopenharmony_ci env::set_var("CLP_TEST_ENV_P", "env"); 19019625d8cSopenharmony_ci 19119625d8cSopenharmony_ci let r = Command::new("df") 19219625d8cSopenharmony_ci .arg( 19319625d8cSopenharmony_ci arg!([arg] "some opt") 19419625d8cSopenharmony_ci .env("CLP_TEST_ENV_P") 19519625d8cSopenharmony_ci .action(ArgAction::Set), 19619625d8cSopenharmony_ci ) 19719625d8cSopenharmony_ci .try_get_matches_from(vec![""]); 19819625d8cSopenharmony_ci 19919625d8cSopenharmony_ci assert!(r.is_ok(), "{}", r.unwrap_err()); 20019625d8cSopenharmony_ci let m = r.unwrap(); 20119625d8cSopenharmony_ci assert!(m.contains_id("arg")); 20219625d8cSopenharmony_ci assert_eq!( 20319625d8cSopenharmony_ci m.value_source("arg").unwrap(), 20419625d8cSopenharmony_ci clap::parser::ValueSource::EnvVariable 20519625d8cSopenharmony_ci ); 20619625d8cSopenharmony_ci assert_eq!( 20719625d8cSopenharmony_ci m.get_one::<String>("arg").map(|v| v.as_str()).unwrap(), 20819625d8cSopenharmony_ci "env" 20919625d8cSopenharmony_ci ); 21019625d8cSopenharmony_ci} 21119625d8cSopenharmony_ci 21219625d8cSopenharmony_ci#[test] 21319625d8cSopenharmony_cifn positionals_user_override() { 21419625d8cSopenharmony_ci env::set_var("CLP_TEST_ENV_POR", "env"); 21519625d8cSopenharmony_ci 21619625d8cSopenharmony_ci let r = Command::new("df") 21719625d8cSopenharmony_ci .arg( 21819625d8cSopenharmony_ci arg!([arg] "some opt") 21919625d8cSopenharmony_ci .env("CLP_TEST_ENV_POR") 22019625d8cSopenharmony_ci .action(ArgAction::Set), 22119625d8cSopenharmony_ci ) 22219625d8cSopenharmony_ci .try_get_matches_from(vec!["", "opt"]); 22319625d8cSopenharmony_ci 22419625d8cSopenharmony_ci assert!(r.is_ok(), "{}", r.unwrap_err()); 22519625d8cSopenharmony_ci let m = r.unwrap(); 22619625d8cSopenharmony_ci assert!(m.contains_id("arg")); 22719625d8cSopenharmony_ci assert_eq!( 22819625d8cSopenharmony_ci m.value_source("arg").unwrap(), 22919625d8cSopenharmony_ci clap::parser::ValueSource::CommandLine 23019625d8cSopenharmony_ci ); 23119625d8cSopenharmony_ci assert_eq!( 23219625d8cSopenharmony_ci m.get_one::<String>("arg").map(|v| v.as_str()).unwrap(), 23319625d8cSopenharmony_ci "opt" 23419625d8cSopenharmony_ci ); 23519625d8cSopenharmony_ci 23619625d8cSopenharmony_ci // see https://github.com/clap-rs/clap/issues/1835 23719625d8cSopenharmony_ci let values: Vec<_> = m 23819625d8cSopenharmony_ci .get_many::<String>("arg") 23919625d8cSopenharmony_ci .unwrap() 24019625d8cSopenharmony_ci .map(|v| v.as_str()) 24119625d8cSopenharmony_ci .collect(); 24219625d8cSopenharmony_ci assert_eq!(values, vec!["opt"]); 24319625d8cSopenharmony_ci} 24419625d8cSopenharmony_ci 24519625d8cSopenharmony_ci#[test] 24619625d8cSopenharmony_cifn multiple_one() { 24719625d8cSopenharmony_ci env::set_var("CLP_TEST_ENV_MO", "env"); 24819625d8cSopenharmony_ci 24919625d8cSopenharmony_ci let r = Command::new("df") 25019625d8cSopenharmony_ci .arg( 25119625d8cSopenharmony_ci arg!([arg] "some opt") 25219625d8cSopenharmony_ci .env("CLP_TEST_ENV_MO") 25319625d8cSopenharmony_ci .action(ArgAction::Set) 25419625d8cSopenharmony_ci .value_delimiter(',') 25519625d8cSopenharmony_ci .num_args(1..), 25619625d8cSopenharmony_ci ) 25719625d8cSopenharmony_ci .try_get_matches_from(vec![""]); 25819625d8cSopenharmony_ci 25919625d8cSopenharmony_ci assert!(r.is_ok(), "{}", r.unwrap_err()); 26019625d8cSopenharmony_ci let m = r.unwrap(); 26119625d8cSopenharmony_ci assert!(m.contains_id("arg")); 26219625d8cSopenharmony_ci assert_eq!( 26319625d8cSopenharmony_ci m.get_many::<String>("arg") 26419625d8cSopenharmony_ci .unwrap() 26519625d8cSopenharmony_ci .map(|v| v.as_str()) 26619625d8cSopenharmony_ci .collect::<Vec<_>>(), 26719625d8cSopenharmony_ci vec!["env"] 26819625d8cSopenharmony_ci ); 26919625d8cSopenharmony_ci} 27019625d8cSopenharmony_ci 27119625d8cSopenharmony_ci#[test] 27219625d8cSopenharmony_cifn multiple_three() { 27319625d8cSopenharmony_ci env::set_var("CLP_TEST_ENV_MULTI1", "env1,env2,env3"); 27419625d8cSopenharmony_ci 27519625d8cSopenharmony_ci let r = Command::new("df") 27619625d8cSopenharmony_ci .arg( 27719625d8cSopenharmony_ci arg!([arg] "some opt") 27819625d8cSopenharmony_ci .env("CLP_TEST_ENV_MULTI1") 27919625d8cSopenharmony_ci .action(ArgAction::Set) 28019625d8cSopenharmony_ci .value_delimiter(',') 28119625d8cSopenharmony_ci .num_args(1..), 28219625d8cSopenharmony_ci ) 28319625d8cSopenharmony_ci .try_get_matches_from(vec![""]); 28419625d8cSopenharmony_ci 28519625d8cSopenharmony_ci assert!(r.is_ok(), "{}", r.unwrap_err()); 28619625d8cSopenharmony_ci let m = r.unwrap(); 28719625d8cSopenharmony_ci assert!(m.contains_id("arg")); 28819625d8cSopenharmony_ci assert_eq!( 28919625d8cSopenharmony_ci m.get_many::<String>("arg") 29019625d8cSopenharmony_ci .unwrap() 29119625d8cSopenharmony_ci .map(|v| v.as_str()) 29219625d8cSopenharmony_ci .collect::<Vec<_>>(), 29319625d8cSopenharmony_ci vec!["env1", "env2", "env3"] 29419625d8cSopenharmony_ci ); 29519625d8cSopenharmony_ci} 29619625d8cSopenharmony_ci 29719625d8cSopenharmony_ci#[test] 29819625d8cSopenharmony_cifn multiple_no_delimiter() { 29919625d8cSopenharmony_ci env::set_var("CLP_TEST_ENV_MULTI2", "env1 env2 env3"); 30019625d8cSopenharmony_ci 30119625d8cSopenharmony_ci let r = Command::new("df") 30219625d8cSopenharmony_ci .arg( 30319625d8cSopenharmony_ci arg!([arg] "some opt") 30419625d8cSopenharmony_ci .env("CLP_TEST_ENV_MULTI2") 30519625d8cSopenharmony_ci .action(ArgAction::Set) 30619625d8cSopenharmony_ci .num_args(1..), 30719625d8cSopenharmony_ci ) 30819625d8cSopenharmony_ci .try_get_matches_from(vec![""]); 30919625d8cSopenharmony_ci 31019625d8cSopenharmony_ci assert!(r.is_ok(), "{}", r.unwrap_err()); 31119625d8cSopenharmony_ci let m = r.unwrap(); 31219625d8cSopenharmony_ci assert!(m.contains_id("arg")); 31319625d8cSopenharmony_ci assert_eq!( 31419625d8cSopenharmony_ci m.get_many::<String>("arg") 31519625d8cSopenharmony_ci .unwrap() 31619625d8cSopenharmony_ci .map(|v| v.as_str()) 31719625d8cSopenharmony_ci .collect::<Vec<_>>(), 31819625d8cSopenharmony_ci vec!["env1 env2 env3"] 31919625d8cSopenharmony_ci ); 32019625d8cSopenharmony_ci} 32119625d8cSopenharmony_ci 32219625d8cSopenharmony_ci#[test] 32319625d8cSopenharmony_cifn possible_value() { 32419625d8cSopenharmony_ci env::set_var("CLP_TEST_ENV_PV", "env"); 32519625d8cSopenharmony_ci 32619625d8cSopenharmony_ci let r = Command::new("df") 32719625d8cSopenharmony_ci .arg( 32819625d8cSopenharmony_ci arg!([arg] "some opt") 32919625d8cSopenharmony_ci .env("CLP_TEST_ENV_PV") 33019625d8cSopenharmony_ci .action(ArgAction::Set) 33119625d8cSopenharmony_ci .value_parser(["env"]), 33219625d8cSopenharmony_ci ) 33319625d8cSopenharmony_ci .try_get_matches_from(vec![""]); 33419625d8cSopenharmony_ci 33519625d8cSopenharmony_ci assert!(r.is_ok(), "{}", r.unwrap_err()); 33619625d8cSopenharmony_ci let m = r.unwrap(); 33719625d8cSopenharmony_ci assert!(m.contains_id("arg")); 33819625d8cSopenharmony_ci assert_eq!( 33919625d8cSopenharmony_ci m.get_one::<String>("arg").map(|v| v.as_str()).unwrap(), 34019625d8cSopenharmony_ci "env" 34119625d8cSopenharmony_ci ); 34219625d8cSopenharmony_ci} 34319625d8cSopenharmony_ci 34419625d8cSopenharmony_ci#[test] 34519625d8cSopenharmony_cifn not_possible_value() { 34619625d8cSopenharmony_ci env::set_var("CLP_TEST_ENV_NPV", "env"); 34719625d8cSopenharmony_ci 34819625d8cSopenharmony_ci let r = Command::new("df") 34919625d8cSopenharmony_ci .arg( 35019625d8cSopenharmony_ci arg!([arg] "some opt") 35119625d8cSopenharmony_ci .env("CLP_TEST_ENV_NPV") 35219625d8cSopenharmony_ci .action(ArgAction::Set) 35319625d8cSopenharmony_ci .value_parser(["never"]), 35419625d8cSopenharmony_ci ) 35519625d8cSopenharmony_ci .try_get_matches_from(vec![""]); 35619625d8cSopenharmony_ci 35719625d8cSopenharmony_ci assert!(r.is_err()); 35819625d8cSopenharmony_ci} 35919625d8cSopenharmony_ci 36019625d8cSopenharmony_ci#[test] 36119625d8cSopenharmony_cifn value_parser() { 36219625d8cSopenharmony_ci env::set_var("CLP_TEST_ENV_VDOR", "env"); 36319625d8cSopenharmony_ci 36419625d8cSopenharmony_ci let r = Command::new("df") 36519625d8cSopenharmony_ci .arg( 36619625d8cSopenharmony_ci arg!([arg] "some opt") 36719625d8cSopenharmony_ci .env("CLP_TEST_ENV_VDOR") 36819625d8cSopenharmony_ci .action(ArgAction::Set) 36919625d8cSopenharmony_ci .value_parser(|s: &str| -> Result<String, String> { 37019625d8cSopenharmony_ci if s == "env" { 37119625d8cSopenharmony_ci Ok(s.to_owned()) 37219625d8cSopenharmony_ci } else { 37319625d8cSopenharmony_ci Err("not equal".to_owned()) 37419625d8cSopenharmony_ci } 37519625d8cSopenharmony_ci }), 37619625d8cSopenharmony_ci ) 37719625d8cSopenharmony_ci .try_get_matches_from(vec![""]); 37819625d8cSopenharmony_ci 37919625d8cSopenharmony_ci assert!(r.is_ok(), "{}", r.unwrap_err()); 38019625d8cSopenharmony_ci let m = r.unwrap(); 38119625d8cSopenharmony_ci assert!(m.contains_id("arg")); 38219625d8cSopenharmony_ci assert_eq!( 38319625d8cSopenharmony_ci m.get_one::<String>("arg").map(|v| v.as_str()).unwrap(), 38419625d8cSopenharmony_ci "env" 38519625d8cSopenharmony_ci ); 38619625d8cSopenharmony_ci} 38719625d8cSopenharmony_ci 38819625d8cSopenharmony_ci#[test] 38919625d8cSopenharmony_cifn value_parser_output() { 39019625d8cSopenharmony_ci env::set_var("CLP_TEST_ENV_VO", "42"); 39119625d8cSopenharmony_ci 39219625d8cSopenharmony_ci let m = Command::new("df") 39319625d8cSopenharmony_ci .arg( 39419625d8cSopenharmony_ci arg!([arg] "some opt") 39519625d8cSopenharmony_ci .env("CLP_TEST_ENV_VO") 39619625d8cSopenharmony_ci .action(ArgAction::Set) 39719625d8cSopenharmony_ci .value_parser(clap::value_parser!(i32)), 39819625d8cSopenharmony_ci ) 39919625d8cSopenharmony_ci .try_get_matches_from(vec![""]) 40019625d8cSopenharmony_ci .unwrap(); 40119625d8cSopenharmony_ci 40219625d8cSopenharmony_ci assert_eq!(*m.get_one::<i32>("arg").unwrap(), 42); 40319625d8cSopenharmony_ci} 40419625d8cSopenharmony_ci 40519625d8cSopenharmony_ci#[test] 40619625d8cSopenharmony_cifn value_parser_invalid() { 40719625d8cSopenharmony_ci env::set_var("CLP_TEST_ENV_IV", "env"); 40819625d8cSopenharmony_ci 40919625d8cSopenharmony_ci let r = Command::new("df") 41019625d8cSopenharmony_ci .arg( 41119625d8cSopenharmony_ci arg!([arg] "some opt") 41219625d8cSopenharmony_ci .env("CLP_TEST_ENV_IV") 41319625d8cSopenharmony_ci .action(ArgAction::Set) 41419625d8cSopenharmony_ci .value_parser(|s: &str| -> Result<String, String> { 41519625d8cSopenharmony_ci if s != "env" { 41619625d8cSopenharmony_ci Ok(s.to_owned()) 41719625d8cSopenharmony_ci } else { 41819625d8cSopenharmony_ci Err("is equal".to_string()) 41919625d8cSopenharmony_ci } 42019625d8cSopenharmony_ci }), 42119625d8cSopenharmony_ci ) 42219625d8cSopenharmony_ci .try_get_matches_from(vec![""]); 42319625d8cSopenharmony_ci 42419625d8cSopenharmony_ci assert!(r.is_err()); 42519625d8cSopenharmony_ci} 426