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