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