119625d8cSopenharmony_ciuse clap::{builder::PossibleValue, error::ErrorKind, Arg, ArgAction, Command};
219625d8cSopenharmony_ci
319625d8cSopenharmony_ci#[cfg(feature = "error-context")]
419625d8cSopenharmony_ciuse super::utils;
519625d8cSopenharmony_ci
619625d8cSopenharmony_ci#[test]
719625d8cSopenharmony_cifn possible_values_of_positional() {
819625d8cSopenharmony_ci    let m = Command::new("possible_values")
919625d8cSopenharmony_ci        .arg(Arg::new("positional").index(1).value_parser(["test123"]))
1019625d8cSopenharmony_ci        .try_get_matches_from(vec!["myprog", "test123"]);
1119625d8cSopenharmony_ci
1219625d8cSopenharmony_ci    assert!(m.is_ok(), "{}", m.unwrap_err());
1319625d8cSopenharmony_ci    let m = m.unwrap();
1419625d8cSopenharmony_ci
1519625d8cSopenharmony_ci    assert!(m.contains_id("positional"));
1619625d8cSopenharmony_ci    assert_eq!(
1719625d8cSopenharmony_ci        m.get_one::<String>("positional").map(|v| v.as_str()),
1819625d8cSopenharmony_ci        Some("test123")
1919625d8cSopenharmony_ci    );
2019625d8cSopenharmony_ci}
2119625d8cSopenharmony_ci
2219625d8cSopenharmony_ci#[test]
2319625d8cSopenharmony_cifn possible_value_arg_value() {
2419625d8cSopenharmony_ci    let m = Command::new("possible_values")
2519625d8cSopenharmony_ci        .arg(
2619625d8cSopenharmony_ci            Arg::new("arg_value")
2719625d8cSopenharmony_ci                .index(1)
2819625d8cSopenharmony_ci                .value_parser([PossibleValue::new("test123")
2919625d8cSopenharmony_ci                    .hide(false)
3019625d8cSopenharmony_ci                    .help("It's just a test")]),
3119625d8cSopenharmony_ci        )
3219625d8cSopenharmony_ci        .try_get_matches_from(vec!["myprog", "test123"]);
3319625d8cSopenharmony_ci
3419625d8cSopenharmony_ci    assert!(m.is_ok(), "{}", m.unwrap_err());
3519625d8cSopenharmony_ci    let m = m.unwrap();
3619625d8cSopenharmony_ci
3719625d8cSopenharmony_ci    assert!(m.contains_id("arg_value"));
3819625d8cSopenharmony_ci    assert_eq!(
3919625d8cSopenharmony_ci        m.get_one::<String>("arg_value").map(|v| v.as_str()),
4019625d8cSopenharmony_ci        Some("test123")
4119625d8cSopenharmony_ci    );
4219625d8cSopenharmony_ci}
4319625d8cSopenharmony_ci
4419625d8cSopenharmony_ci#[test]
4519625d8cSopenharmony_cifn possible_values_of_positional_fail() {
4619625d8cSopenharmony_ci    let m = Command::new("possible_values")
4719625d8cSopenharmony_ci        .arg(Arg::new("positional").index(1).value_parser(["test123"]))
4819625d8cSopenharmony_ci        .try_get_matches_from(vec!["myprog", "notest"]);
4919625d8cSopenharmony_ci
5019625d8cSopenharmony_ci    assert!(m.is_err());
5119625d8cSopenharmony_ci    assert_eq!(m.unwrap_err().kind(), ErrorKind::InvalidValue);
5219625d8cSopenharmony_ci}
5319625d8cSopenharmony_ci
5419625d8cSopenharmony_ci#[test]
5519625d8cSopenharmony_cifn possible_values_of_positional_multiple() {
5619625d8cSopenharmony_ci    let m = Command::new("possible_values")
5719625d8cSopenharmony_ci        .arg(
5819625d8cSopenharmony_ci            Arg::new("positional")
5919625d8cSopenharmony_ci                .index(1)
6019625d8cSopenharmony_ci                .action(ArgAction::Set)
6119625d8cSopenharmony_ci                .value_parser(["test123", "test321"])
6219625d8cSopenharmony_ci                .num_args(1..),
6319625d8cSopenharmony_ci        )
6419625d8cSopenharmony_ci        .try_get_matches_from(vec!["myprog", "test123", "test321"]);
6519625d8cSopenharmony_ci
6619625d8cSopenharmony_ci    assert!(m.is_ok(), "{}", m.unwrap_err());
6719625d8cSopenharmony_ci    let m = m.unwrap();
6819625d8cSopenharmony_ci
6919625d8cSopenharmony_ci    assert!(m.contains_id("positional"));
7019625d8cSopenharmony_ci    assert_eq!(
7119625d8cSopenharmony_ci        m.get_many::<String>("positional")
7219625d8cSopenharmony_ci            .unwrap()
7319625d8cSopenharmony_ci            .map(|v| v.as_str())
7419625d8cSopenharmony_ci            .collect::<Vec<_>>(),
7519625d8cSopenharmony_ci        vec!["test123", "test321"]
7619625d8cSopenharmony_ci    );
7719625d8cSopenharmony_ci}
7819625d8cSopenharmony_ci
7919625d8cSopenharmony_ci#[test]
8019625d8cSopenharmony_cifn possible_values_of_positional_multiple_fail() {
8119625d8cSopenharmony_ci    let m = Command::new("possible_values")
8219625d8cSopenharmony_ci        .arg(
8319625d8cSopenharmony_ci            Arg::new("positional")
8419625d8cSopenharmony_ci                .index(1)
8519625d8cSopenharmony_ci                .action(ArgAction::Set)
8619625d8cSopenharmony_ci                .value_parser(["test123", "test321"])
8719625d8cSopenharmony_ci                .num_args(1..),
8819625d8cSopenharmony_ci        )
8919625d8cSopenharmony_ci        .try_get_matches_from(vec!["myprog", "test123", "notest"]);
9019625d8cSopenharmony_ci
9119625d8cSopenharmony_ci    assert!(m.is_err());
9219625d8cSopenharmony_ci    assert_eq!(m.unwrap_err().kind(), ErrorKind::InvalidValue);
9319625d8cSopenharmony_ci}
9419625d8cSopenharmony_ci
9519625d8cSopenharmony_ci#[test]
9619625d8cSopenharmony_cifn possible_values_of_option() {
9719625d8cSopenharmony_ci    let m = Command::new("possible_values")
9819625d8cSopenharmony_ci        .arg(
9919625d8cSopenharmony_ci            Arg::new("option")
10019625d8cSopenharmony_ci                .short('o')
10119625d8cSopenharmony_ci                .long("option")
10219625d8cSopenharmony_ci                .action(ArgAction::Set)
10319625d8cSopenharmony_ci                .value_parser(["test123"]),
10419625d8cSopenharmony_ci        )
10519625d8cSopenharmony_ci        .try_get_matches_from(vec!["myprog", "--option", "test123"]);
10619625d8cSopenharmony_ci
10719625d8cSopenharmony_ci    assert!(m.is_ok(), "{}", m.unwrap_err());
10819625d8cSopenharmony_ci    let m = m.unwrap();
10919625d8cSopenharmony_ci
11019625d8cSopenharmony_ci    assert!(m.contains_id("option"));
11119625d8cSopenharmony_ci    assert_eq!(
11219625d8cSopenharmony_ci        m.get_one::<String>("option").map(|v| v.as_str()),
11319625d8cSopenharmony_ci        Some("test123")
11419625d8cSopenharmony_ci    );
11519625d8cSopenharmony_ci}
11619625d8cSopenharmony_ci
11719625d8cSopenharmony_ci#[test]
11819625d8cSopenharmony_cifn possible_values_of_option_fail() {
11919625d8cSopenharmony_ci    let m = Command::new("possible_values")
12019625d8cSopenharmony_ci        .arg(
12119625d8cSopenharmony_ci            Arg::new("option")
12219625d8cSopenharmony_ci                .short('o')
12319625d8cSopenharmony_ci                .long("option")
12419625d8cSopenharmony_ci                .action(ArgAction::Set)
12519625d8cSopenharmony_ci                .value_parser(["test123"]),
12619625d8cSopenharmony_ci        )
12719625d8cSopenharmony_ci        .try_get_matches_from(vec!["myprog", "--option", "notest"]);
12819625d8cSopenharmony_ci
12919625d8cSopenharmony_ci    assert!(m.is_err());
13019625d8cSopenharmony_ci    assert_eq!(m.unwrap_err().kind(), ErrorKind::InvalidValue);
13119625d8cSopenharmony_ci}
13219625d8cSopenharmony_ci
13319625d8cSopenharmony_ci#[test]
13419625d8cSopenharmony_cifn possible_values_of_option_multiple() {
13519625d8cSopenharmony_ci    let m = Command::new("possible_values")
13619625d8cSopenharmony_ci        .arg(
13719625d8cSopenharmony_ci            Arg::new("option")
13819625d8cSopenharmony_ci                .short('o')
13919625d8cSopenharmony_ci                .long("option")
14019625d8cSopenharmony_ci                .action(ArgAction::Set)
14119625d8cSopenharmony_ci                .value_parser(["test123", "test321"])
14219625d8cSopenharmony_ci                .action(ArgAction::Append),
14319625d8cSopenharmony_ci        )
14419625d8cSopenharmony_ci        .try_get_matches_from(vec!["", "--option", "test123", "--option", "test321"]);
14519625d8cSopenharmony_ci
14619625d8cSopenharmony_ci    assert!(m.is_ok(), "{}", m.unwrap_err());
14719625d8cSopenharmony_ci    let m = m.unwrap();
14819625d8cSopenharmony_ci
14919625d8cSopenharmony_ci    assert!(m.contains_id("option"));
15019625d8cSopenharmony_ci    assert_eq!(
15119625d8cSopenharmony_ci        m.get_many::<String>("option")
15219625d8cSopenharmony_ci            .unwrap()
15319625d8cSopenharmony_ci            .map(|v| v.as_str())
15419625d8cSopenharmony_ci            .collect::<Vec<_>>(),
15519625d8cSopenharmony_ci        vec!["test123", "test321"]
15619625d8cSopenharmony_ci    );
15719625d8cSopenharmony_ci}
15819625d8cSopenharmony_ci
15919625d8cSopenharmony_ci#[test]
16019625d8cSopenharmony_cifn possible_values_of_option_multiple_fail() {
16119625d8cSopenharmony_ci    let m = Command::new("possible_values")
16219625d8cSopenharmony_ci        .arg(
16319625d8cSopenharmony_ci            Arg::new("option")
16419625d8cSopenharmony_ci                .short('o')
16519625d8cSopenharmony_ci                .long("option")
16619625d8cSopenharmony_ci                .action(ArgAction::Set)
16719625d8cSopenharmony_ci                .value_parser(["test123", "test321"])
16819625d8cSopenharmony_ci                .action(ArgAction::Append),
16919625d8cSopenharmony_ci        )
17019625d8cSopenharmony_ci        .try_get_matches_from(vec!["", "--option", "test123", "--option", "notest"]);
17119625d8cSopenharmony_ci
17219625d8cSopenharmony_ci    assert!(m.is_err());
17319625d8cSopenharmony_ci    assert_eq!(m.unwrap_err().kind(), ErrorKind::InvalidValue);
17419625d8cSopenharmony_ci}
17519625d8cSopenharmony_ci
17619625d8cSopenharmony_ci#[test]
17719625d8cSopenharmony_ci#[cfg(feature = "error-context")]
17819625d8cSopenharmony_cifn possible_values_output() {
17919625d8cSopenharmony_ci    #[cfg(feature = "suggestions")]
18019625d8cSopenharmony_ci    static PV_ERROR: &str = "\
18119625d8cSopenharmony_cierror: invalid value 'slo' for '-O <option>'
18219625d8cSopenharmony_ci  [possible values: slow, fast, \"ludicrous speed\"]
18319625d8cSopenharmony_ci
18419625d8cSopenharmony_ci  note: value 'slow' exists
18519625d8cSopenharmony_ci
18619625d8cSopenharmony_ciFor more information, try '--help'.
18719625d8cSopenharmony_ci";
18819625d8cSopenharmony_ci
18919625d8cSopenharmony_ci    #[cfg(not(feature = "suggestions"))]
19019625d8cSopenharmony_ci    static PV_ERROR: &str = "\
19119625d8cSopenharmony_cierror: invalid value 'slo' for '-O <option>'
19219625d8cSopenharmony_ci  [possible values: slow, fast, \"ludicrous speed\"]
19319625d8cSopenharmony_ci
19419625d8cSopenharmony_ciFor more information, try '--help'.
19519625d8cSopenharmony_ci";
19619625d8cSopenharmony_ci
19719625d8cSopenharmony_ci    utils::assert_output(
19819625d8cSopenharmony_ci        Command::new("test").arg(
19919625d8cSopenharmony_ci            Arg::new("option")
20019625d8cSopenharmony_ci                .short('O')
20119625d8cSopenharmony_ci                .action(ArgAction::Set)
20219625d8cSopenharmony_ci                .value_parser(["slow", "fast", "ludicrous speed"]),
20319625d8cSopenharmony_ci        ),
20419625d8cSopenharmony_ci        "clap-test -O slo",
20519625d8cSopenharmony_ci        PV_ERROR,
20619625d8cSopenharmony_ci        true,
20719625d8cSopenharmony_ci    );
20819625d8cSopenharmony_ci}
20919625d8cSopenharmony_ci
21019625d8cSopenharmony_ci#[test]
21119625d8cSopenharmony_ci#[cfg(feature = "error-context")]
21219625d8cSopenharmony_cifn possible_values_alias_output() {
21319625d8cSopenharmony_ci    #[cfg(feature = "suggestions")]
21419625d8cSopenharmony_ci    static PV_ERROR: &str = "\
21519625d8cSopenharmony_cierror: invalid value 'slo' for '-O <option>'
21619625d8cSopenharmony_ci  [possible values: slow, fast, \"ludicrous speed\"]
21719625d8cSopenharmony_ci
21819625d8cSopenharmony_ci  note: value 'slow' exists
21919625d8cSopenharmony_ci
22019625d8cSopenharmony_ciFor more information, try '--help'.
22119625d8cSopenharmony_ci";
22219625d8cSopenharmony_ci
22319625d8cSopenharmony_ci    #[cfg(not(feature = "suggestions"))]
22419625d8cSopenharmony_ci    static PV_ERROR: &str = "\
22519625d8cSopenharmony_cierror: invalid value 'slo' for '-O <option>'
22619625d8cSopenharmony_ci  [possible values: slow, fast, \"ludicrous speed\"]
22719625d8cSopenharmony_ci
22819625d8cSopenharmony_ciFor more information, try '--help'.
22919625d8cSopenharmony_ci";
23019625d8cSopenharmony_ci
23119625d8cSopenharmony_ci    utils::assert_output(
23219625d8cSopenharmony_ci        Command::new("test").arg(
23319625d8cSopenharmony_ci            Arg::new("option")
23419625d8cSopenharmony_ci                .short('O')
23519625d8cSopenharmony_ci                .action(ArgAction::Set)
23619625d8cSopenharmony_ci                .value_parser([
23719625d8cSopenharmony_ci                    "slow".into(),
23819625d8cSopenharmony_ci                    PossibleValue::new("fast").alias("fost"),
23919625d8cSopenharmony_ci                    PossibleValue::new("ludicrous speed").aliases(["ls", "lcs"]),
24019625d8cSopenharmony_ci                ]),
24119625d8cSopenharmony_ci        ),
24219625d8cSopenharmony_ci        "clap-test -O slo",
24319625d8cSopenharmony_ci        PV_ERROR,
24419625d8cSopenharmony_ci        true,
24519625d8cSopenharmony_ci    );
24619625d8cSopenharmony_ci}
24719625d8cSopenharmony_ci
24819625d8cSopenharmony_ci#[test]
24919625d8cSopenharmony_ci#[cfg(feature = "error-context")]
25019625d8cSopenharmony_cifn possible_values_hidden_output() {
25119625d8cSopenharmony_ci    #[cfg(feature = "suggestions")]
25219625d8cSopenharmony_ci    static PV_ERROR: &str = "\
25319625d8cSopenharmony_cierror: invalid value 'slo' for '-O <option>'
25419625d8cSopenharmony_ci  [possible values: slow, fast, \"ludicrous speed\"]
25519625d8cSopenharmony_ci
25619625d8cSopenharmony_ci  note: value 'slow' exists
25719625d8cSopenharmony_ci
25819625d8cSopenharmony_ciFor more information, try '--help'.
25919625d8cSopenharmony_ci";
26019625d8cSopenharmony_ci
26119625d8cSopenharmony_ci    #[cfg(not(feature = "suggestions"))]
26219625d8cSopenharmony_ci    static PV_ERROR: &str = "\
26319625d8cSopenharmony_cierror: invalid value 'slo' for '-O <option>'
26419625d8cSopenharmony_ci  [possible values: slow, fast, \"ludicrous speed\"]
26519625d8cSopenharmony_ci
26619625d8cSopenharmony_ciFor more information, try '--help'.
26719625d8cSopenharmony_ci";
26819625d8cSopenharmony_ci
26919625d8cSopenharmony_ci    utils::assert_output(
27019625d8cSopenharmony_ci        Command::new("test").arg(
27119625d8cSopenharmony_ci            Arg::new("option")
27219625d8cSopenharmony_ci                .short('O')
27319625d8cSopenharmony_ci                .action(ArgAction::Set)
27419625d8cSopenharmony_ci                .value_parser([
27519625d8cSopenharmony_ci                    "slow".into(),
27619625d8cSopenharmony_ci                    "fast".into(),
27719625d8cSopenharmony_ci                    PossibleValue::new("ludicrous speed"),
27819625d8cSopenharmony_ci                    PossibleValue::new("forbidden speed").hide(true),
27919625d8cSopenharmony_ci                ]),
28019625d8cSopenharmony_ci        ),
28119625d8cSopenharmony_ci        "clap-test -O slo",
28219625d8cSopenharmony_ci        PV_ERROR,
28319625d8cSopenharmony_ci        true,
28419625d8cSopenharmony_ci    );
28519625d8cSopenharmony_ci}
28619625d8cSopenharmony_ci
28719625d8cSopenharmony_ci#[test]
28819625d8cSopenharmony_ci#[cfg(feature = "error-context")]
28919625d8cSopenharmony_cifn escaped_possible_values_output() {
29019625d8cSopenharmony_ci    #[cfg(feature = "suggestions")]
29119625d8cSopenharmony_ci    static PV_ERROR_ESCAPED: &str = "\
29219625d8cSopenharmony_cierror: invalid value 'ludicrous' for '-O <option>'
29319625d8cSopenharmony_ci  [possible values: slow, fast, \"ludicrous speed\"]
29419625d8cSopenharmony_ci
29519625d8cSopenharmony_ci  note: value 'ludicrous speed' exists
29619625d8cSopenharmony_ci
29719625d8cSopenharmony_ciFor more information, try '--help'.
29819625d8cSopenharmony_ci";
29919625d8cSopenharmony_ci
30019625d8cSopenharmony_ci    #[cfg(not(feature = "suggestions"))]
30119625d8cSopenharmony_ci    static PV_ERROR_ESCAPED: &str = "\
30219625d8cSopenharmony_cierror: invalid value 'ludicrous' for '-O <option>'
30319625d8cSopenharmony_ci  [possible values: slow, fast, \"ludicrous speed\"]
30419625d8cSopenharmony_ci
30519625d8cSopenharmony_ciFor more information, try '--help'.
30619625d8cSopenharmony_ci";
30719625d8cSopenharmony_ci
30819625d8cSopenharmony_ci    utils::assert_output(
30919625d8cSopenharmony_ci        Command::new("test").arg(
31019625d8cSopenharmony_ci            Arg::new("option")
31119625d8cSopenharmony_ci                .short('O')
31219625d8cSopenharmony_ci                .action(ArgAction::Set)
31319625d8cSopenharmony_ci                .value_parser(["slow", "fast", "ludicrous speed"]),
31419625d8cSopenharmony_ci        ),
31519625d8cSopenharmony_ci        "clap-test -O ludicrous",
31619625d8cSopenharmony_ci        PV_ERROR_ESCAPED,
31719625d8cSopenharmony_ci        true,
31819625d8cSopenharmony_ci    );
31919625d8cSopenharmony_ci}
32019625d8cSopenharmony_ci
32119625d8cSopenharmony_ci#[test]
32219625d8cSopenharmony_ci#[cfg(feature = "error-context")]
32319625d8cSopenharmony_cifn missing_possible_value_error() {
32419625d8cSopenharmony_ci    static MISSING_PV_ERROR: &str = "\
32519625d8cSopenharmony_cierror: a value is required for '-O <option>' but none was supplied
32619625d8cSopenharmony_ci  [possible values: slow, fast, \"ludicrous speed\"]
32719625d8cSopenharmony_ci
32819625d8cSopenharmony_ciFor more information, try '--help'.
32919625d8cSopenharmony_ci";
33019625d8cSopenharmony_ci
33119625d8cSopenharmony_ci    utils::assert_output(
33219625d8cSopenharmony_ci        Command::new("test").arg(
33319625d8cSopenharmony_ci            Arg::new("option")
33419625d8cSopenharmony_ci                .short('O')
33519625d8cSopenharmony_ci                .action(ArgAction::Set)
33619625d8cSopenharmony_ci                .value_parser([
33719625d8cSopenharmony_ci                    "slow".into(),
33819625d8cSopenharmony_ci                    PossibleValue::new("fast").alias("fost"),
33919625d8cSopenharmony_ci                    PossibleValue::new("ludicrous speed"),
34019625d8cSopenharmony_ci                    PossibleValue::new("forbidden speed").hide(true),
34119625d8cSopenharmony_ci                ]),
34219625d8cSopenharmony_ci        ),
34319625d8cSopenharmony_ci        "clap-test -O",
34419625d8cSopenharmony_ci        MISSING_PV_ERROR,
34519625d8cSopenharmony_ci        true,
34619625d8cSopenharmony_ci    );
34719625d8cSopenharmony_ci}
34819625d8cSopenharmony_ci
34919625d8cSopenharmony_ci#[test]
35019625d8cSopenharmony_cifn alias() {
35119625d8cSopenharmony_ci    let m = Command::new("pv")
35219625d8cSopenharmony_ci        .arg(
35319625d8cSopenharmony_ci            Arg::new("option")
35419625d8cSopenharmony_ci                .short('o')
35519625d8cSopenharmony_ci                .long("option")
35619625d8cSopenharmony_ci                .action(ArgAction::Set)
35719625d8cSopenharmony_ci                .value_parser([PossibleValue::new("test123").alias("123"), "test321".into()])
35819625d8cSopenharmony_ci                .ignore_case(true),
35919625d8cSopenharmony_ci        )
36019625d8cSopenharmony_ci        .try_get_matches_from(vec!["pv", "--option", "123"]);
36119625d8cSopenharmony_ci
36219625d8cSopenharmony_ci    assert!(m.is_ok(), "{}", m.unwrap_err());
36319625d8cSopenharmony_ci    assert!(m
36419625d8cSopenharmony_ci        .unwrap()
36519625d8cSopenharmony_ci        .get_one::<String>("option")
36619625d8cSopenharmony_ci        .map(|v| v.as_str())
36719625d8cSopenharmony_ci        .unwrap()
36819625d8cSopenharmony_ci        .eq("123"));
36919625d8cSopenharmony_ci}
37019625d8cSopenharmony_ci
37119625d8cSopenharmony_ci#[test]
37219625d8cSopenharmony_cifn aliases() {
37319625d8cSopenharmony_ci    let m = Command::new("pv")
37419625d8cSopenharmony_ci        .arg(
37519625d8cSopenharmony_ci            Arg::new("option")
37619625d8cSopenharmony_ci                .short('o')
37719625d8cSopenharmony_ci                .long("option")
37819625d8cSopenharmony_ci                .action(ArgAction::Set)
37919625d8cSopenharmony_ci                .value_parser([
38019625d8cSopenharmony_ci                    PossibleValue::new("test123").aliases(["1", "2", "3"]),
38119625d8cSopenharmony_ci                    "test321".into(),
38219625d8cSopenharmony_ci                ])
38319625d8cSopenharmony_ci                .ignore_case(true),
38419625d8cSopenharmony_ci        )
38519625d8cSopenharmony_ci        .try_get_matches_from(vec!["pv", "--option", "2"]);
38619625d8cSopenharmony_ci
38719625d8cSopenharmony_ci    assert!(m.is_ok(), "{}", m.unwrap_err());
38819625d8cSopenharmony_ci    assert!(m
38919625d8cSopenharmony_ci        .unwrap()
39019625d8cSopenharmony_ci        .get_one::<String>("option")
39119625d8cSopenharmony_ci        .map(|v| v.as_str())
39219625d8cSopenharmony_ci        .unwrap()
39319625d8cSopenharmony_ci        .eq("2"));
39419625d8cSopenharmony_ci}
39519625d8cSopenharmony_ci
39619625d8cSopenharmony_ci#[test]
39719625d8cSopenharmony_cifn ignore_case() {
39819625d8cSopenharmony_ci    let m = Command::new("pv")
39919625d8cSopenharmony_ci        .arg(
40019625d8cSopenharmony_ci            Arg::new("option")
40119625d8cSopenharmony_ci                .short('o')
40219625d8cSopenharmony_ci                .long("option")
40319625d8cSopenharmony_ci                .action(ArgAction::Set)
40419625d8cSopenharmony_ci                .value_parser(["test123", "test321"])
40519625d8cSopenharmony_ci                .ignore_case(true),
40619625d8cSopenharmony_ci        )
40719625d8cSopenharmony_ci        .try_get_matches_from(vec!["pv", "--option", "TeSt123"]);
40819625d8cSopenharmony_ci
40919625d8cSopenharmony_ci    assert!(m.is_ok(), "{}", m.unwrap_err());
41019625d8cSopenharmony_ci    assert!(m
41119625d8cSopenharmony_ci        .unwrap()
41219625d8cSopenharmony_ci        .get_one::<String>("option")
41319625d8cSopenharmony_ci        .map(|v| v.as_str())
41419625d8cSopenharmony_ci        .unwrap()
41519625d8cSopenharmony_ci        .eq_ignore_ascii_case("test123"));
41619625d8cSopenharmony_ci}
41719625d8cSopenharmony_ci
41819625d8cSopenharmony_ci#[test]
41919625d8cSopenharmony_cifn ignore_case_fail() {
42019625d8cSopenharmony_ci    let m = Command::new("pv")
42119625d8cSopenharmony_ci        .arg(
42219625d8cSopenharmony_ci            Arg::new("option")
42319625d8cSopenharmony_ci                .short('o')
42419625d8cSopenharmony_ci                .long("option")
42519625d8cSopenharmony_ci                .action(ArgAction::Set)
42619625d8cSopenharmony_ci                .value_parser(["test123", "test321"]),
42719625d8cSopenharmony_ci        )
42819625d8cSopenharmony_ci        .try_get_matches_from(vec!["pv", "--option", "TeSt123"]);
42919625d8cSopenharmony_ci
43019625d8cSopenharmony_ci    assert!(m.is_err());
43119625d8cSopenharmony_ci    assert_eq!(m.unwrap_err().kind(), ErrorKind::InvalidValue);
43219625d8cSopenharmony_ci}
43319625d8cSopenharmony_ci
43419625d8cSopenharmony_ci#[test]
43519625d8cSopenharmony_cifn ignore_case_multiple() {
43619625d8cSopenharmony_ci    let m = Command::new("pv")
43719625d8cSopenharmony_ci        .arg(
43819625d8cSopenharmony_ci            Arg::new("option")
43919625d8cSopenharmony_ci                .short('o')
44019625d8cSopenharmony_ci                .long("option")
44119625d8cSopenharmony_ci                .action(ArgAction::Set)
44219625d8cSopenharmony_ci                .value_parser(["test123", "test321"])
44319625d8cSopenharmony_ci                .num_args(1..)
44419625d8cSopenharmony_ci                .ignore_case(true),
44519625d8cSopenharmony_ci        )
44619625d8cSopenharmony_ci        .try_get_matches_from(vec!["pv", "--option", "TeSt123", "teST123", "tESt321"]);
44719625d8cSopenharmony_ci
44819625d8cSopenharmony_ci    assert!(m.is_ok(), "{}", m.unwrap_err());
44919625d8cSopenharmony_ci    assert_eq!(
45019625d8cSopenharmony_ci        m.unwrap()
45119625d8cSopenharmony_ci            .get_many::<String>("option")
45219625d8cSopenharmony_ci            .unwrap()
45319625d8cSopenharmony_ci            .map(|v| v.as_str())
45419625d8cSopenharmony_ci            .collect::<Vec<_>>(),
45519625d8cSopenharmony_ci        ["TeSt123", "teST123", "tESt321"]
45619625d8cSopenharmony_ci    );
45719625d8cSopenharmony_ci}
45819625d8cSopenharmony_ci
45919625d8cSopenharmony_ci#[test]
46019625d8cSopenharmony_cifn ignore_case_multiple_fail() {
46119625d8cSopenharmony_ci    let m = Command::new("pv")
46219625d8cSopenharmony_ci        .arg(
46319625d8cSopenharmony_ci            Arg::new("option")
46419625d8cSopenharmony_ci                .short('o')
46519625d8cSopenharmony_ci                .long("option")
46619625d8cSopenharmony_ci                .action(ArgAction::Set)
46719625d8cSopenharmony_ci                .value_parser(["test123", "test321"])
46819625d8cSopenharmony_ci                .num_args(1..),
46919625d8cSopenharmony_ci        )
47019625d8cSopenharmony_ci        .try_get_matches_from(vec!["pv", "--option", "test123", "teST123", "test321"]);
47119625d8cSopenharmony_ci
47219625d8cSopenharmony_ci    assert!(m.is_err());
47319625d8cSopenharmony_ci    assert_eq!(m.unwrap_err().kind(), ErrorKind::InvalidValue);
47419625d8cSopenharmony_ci}
475