119625d8cSopenharmony_ciuse clap::{arg, error::ErrorKind, Arg, ArgAction, ArgGroup, Command, Id};
219625d8cSopenharmony_ci
319625d8cSopenharmony_ciuse super::utils;
419625d8cSopenharmony_ci
519625d8cSopenharmony_ci#[test]
619625d8cSopenharmony_cifn required_group_missing_arg() {
719625d8cSopenharmony_ci    let result = Command::new("group")
819625d8cSopenharmony_ci        .arg(arg!(-f --flag "some flag"))
919625d8cSopenharmony_ci        .arg(arg!( -c --color "some other flag"))
1019625d8cSopenharmony_ci        .group(ArgGroup::new("req").args(["flag", "color"]).required(true))
1119625d8cSopenharmony_ci        .try_get_matches_from(vec![""]);
1219625d8cSopenharmony_ci    assert!(result.is_err());
1319625d8cSopenharmony_ci    let err = result.err().unwrap();
1419625d8cSopenharmony_ci    assert_eq!(err.kind(), ErrorKind::MissingRequiredArgument);
1519625d8cSopenharmony_ci}
1619625d8cSopenharmony_ci
1719625d8cSopenharmony_ci#[cfg(debug_assertions)]
1819625d8cSopenharmony_ci#[test]
1919625d8cSopenharmony_ci#[should_panic = "Command group: Argument group 'req' contains non-existent argument"]
2019625d8cSopenharmony_cifn non_existing_arg() {
2119625d8cSopenharmony_ci    let _ = Command::new("group")
2219625d8cSopenharmony_ci        .arg(arg!(-f --flag "some flag"))
2319625d8cSopenharmony_ci        .arg(arg!(-c --color "some other flag"))
2419625d8cSopenharmony_ci        .group(ArgGroup::new("req").args(["flg", "color"]).required(true))
2519625d8cSopenharmony_ci        .try_get_matches_from(vec![""]);
2619625d8cSopenharmony_ci}
2719625d8cSopenharmony_ci
2819625d8cSopenharmony_ci#[cfg(debug_assertions)]
2919625d8cSopenharmony_ci#[test]
3019625d8cSopenharmony_ci#[should_panic = "Command group: Argument group name must be unique\n\n\t'req' is already in use"]
3119625d8cSopenharmony_cifn unique_group_name() {
3219625d8cSopenharmony_ci    let _ = Command::new("group")
3319625d8cSopenharmony_ci        .arg(arg!(-f --flag "some flag"))
3419625d8cSopenharmony_ci        .arg(arg!(-c --color "some other flag"))
3519625d8cSopenharmony_ci        .group(ArgGroup::new("req").args(["flag"]).required(true))
3619625d8cSopenharmony_ci        .group(ArgGroup::new("req").args(["color"]).required(true))
3719625d8cSopenharmony_ci        .try_get_matches_from(vec![""]);
3819625d8cSopenharmony_ci}
3919625d8cSopenharmony_ci
4019625d8cSopenharmony_ci#[cfg(debug_assertions)]
4119625d8cSopenharmony_ci#[test]
4219625d8cSopenharmony_ci#[should_panic = "Command group: Argument group name 'a' must not conflict with argument name"]
4319625d8cSopenharmony_cifn groups_new_of_arg_name() {
4419625d8cSopenharmony_ci    let _ = Command::new("group")
4519625d8cSopenharmony_ci        .arg(Arg::new("a").long("a").group("a"))
4619625d8cSopenharmony_ci        .try_get_matches_from(vec!["", "--a"]);
4719625d8cSopenharmony_ci}
4819625d8cSopenharmony_ci
4919625d8cSopenharmony_ci#[cfg(debug_assertions)]
5019625d8cSopenharmony_ci#[test]
5119625d8cSopenharmony_ci#[should_panic = "Command group: Argument group name 'a' must not conflict with argument name"]
5219625d8cSopenharmony_cifn arg_group_new_of_arg_name() {
5319625d8cSopenharmony_ci    let _ = Command::new("group")
5419625d8cSopenharmony_ci        .arg(Arg::new("a").long("a").group("a"))
5519625d8cSopenharmony_ci        .group(ArgGroup::new("a"))
5619625d8cSopenharmony_ci        .try_get_matches_from(vec!["", "--a"]);
5719625d8cSopenharmony_ci}
5819625d8cSopenharmony_ci
5919625d8cSopenharmony_ci#[test]
6019625d8cSopenharmony_cifn group_single_value() {
6119625d8cSopenharmony_ci    let res = Command::new("group")
6219625d8cSopenharmony_ci        .arg(arg!(-c --color [color] "some option"))
6319625d8cSopenharmony_ci        .arg(arg!(-n --hostname <name> "another option"))
6419625d8cSopenharmony_ci        .group(ArgGroup::new("grp").args(["hostname", "color"]))
6519625d8cSopenharmony_ci        .try_get_matches_from(vec!["", "-c", "blue"]);
6619625d8cSopenharmony_ci    assert!(res.is_ok(), "{}", res.unwrap_err());
6719625d8cSopenharmony_ci
6819625d8cSopenharmony_ci    let m = res.unwrap();
6919625d8cSopenharmony_ci    assert!(m.contains_id("grp"));
7019625d8cSopenharmony_ci    assert_eq!(m.get_one::<Id>("grp").map(|v| v.as_str()).unwrap(), "color");
7119625d8cSopenharmony_ci}
7219625d8cSopenharmony_ci
7319625d8cSopenharmony_ci#[test]
7419625d8cSopenharmony_cifn group_empty() {
7519625d8cSopenharmony_ci    let res = Command::new("group")
7619625d8cSopenharmony_ci        .arg(arg!(-f --flag "some flag"))
7719625d8cSopenharmony_ci        .arg(arg!(-c --color [color] "some option"))
7819625d8cSopenharmony_ci        .arg(arg!(-n --hostname <name> "another option"))
7919625d8cSopenharmony_ci        .group(ArgGroup::new("grp").args(["hostname", "color", "flag"]))
8019625d8cSopenharmony_ci        .try_get_matches_from(vec![""]);
8119625d8cSopenharmony_ci    assert!(res.is_ok(), "{}", res.unwrap_err());
8219625d8cSopenharmony_ci
8319625d8cSopenharmony_ci    let m = res.unwrap();
8419625d8cSopenharmony_ci    assert!(!m.contains_id("grp"));
8519625d8cSopenharmony_ci    assert!(m.get_one::<String>("grp").map(|v| v.as_str()).is_none());
8619625d8cSopenharmony_ci}
8719625d8cSopenharmony_ci
8819625d8cSopenharmony_ci#[test]
8919625d8cSopenharmony_cifn group_required_flags_empty() {
9019625d8cSopenharmony_ci    let result = Command::new("group")
9119625d8cSopenharmony_ci        .arg(arg!(-f --flag "some flag"))
9219625d8cSopenharmony_ci        .arg(arg!(-c --color "some option"))
9319625d8cSopenharmony_ci        .arg(arg!(-n --hostname <name> "another option"))
9419625d8cSopenharmony_ci        .group(
9519625d8cSopenharmony_ci            ArgGroup::new("grp")
9619625d8cSopenharmony_ci                .required(true)
9719625d8cSopenharmony_ci                .args(["hostname", "color", "flag"]),
9819625d8cSopenharmony_ci        )
9919625d8cSopenharmony_ci        .try_get_matches_from(vec![""]);
10019625d8cSopenharmony_ci    assert!(result.is_err());
10119625d8cSopenharmony_ci    let err = result.err().unwrap();
10219625d8cSopenharmony_ci    assert_eq!(err.kind(), ErrorKind::MissingRequiredArgument);
10319625d8cSopenharmony_ci}
10419625d8cSopenharmony_ci
10519625d8cSopenharmony_ci#[test]
10619625d8cSopenharmony_cifn group_multi_value_single_arg() {
10719625d8cSopenharmony_ci    let res = Command::new("group")
10819625d8cSopenharmony_ci        .arg(arg!(-f --flag "some flag"))
10919625d8cSopenharmony_ci        .arg(arg!(-c --color <color> "some option").num_args(1..))
11019625d8cSopenharmony_ci        .arg(arg!(-n --hostname <name> "another option"))
11119625d8cSopenharmony_ci        .group(ArgGroup::new("grp").args(["hostname", "color", "flag"]))
11219625d8cSopenharmony_ci        .try_get_matches_from(vec!["", "-c", "blue", "red", "green"]);
11319625d8cSopenharmony_ci    assert!(res.is_ok(), "{:?}", res.unwrap_err().kind());
11419625d8cSopenharmony_ci
11519625d8cSopenharmony_ci    let m = res.unwrap();
11619625d8cSopenharmony_ci    assert!(m.contains_id("grp"));
11719625d8cSopenharmony_ci    assert_eq!(m.get_one::<Id>("grp").map(|v| v.as_str()).unwrap(), "color");
11819625d8cSopenharmony_ci}
11919625d8cSopenharmony_ci
12019625d8cSopenharmony_ci#[test]
12119625d8cSopenharmony_cifn empty_group() {
12219625d8cSopenharmony_ci    let r = Command::new("empty_group")
12319625d8cSopenharmony_ci        .arg(arg!(-f --flag "some flag"))
12419625d8cSopenharmony_ci        .group(ArgGroup::new("vers").required(true))
12519625d8cSopenharmony_ci        .try_get_matches_from(vec!["empty_prog"]);
12619625d8cSopenharmony_ci    assert!(r.is_err());
12719625d8cSopenharmony_ci    let err = r.err().unwrap();
12819625d8cSopenharmony_ci    assert_eq!(err.kind(), ErrorKind::MissingRequiredArgument);
12919625d8cSopenharmony_ci}
13019625d8cSopenharmony_ci
13119625d8cSopenharmony_ci#[test]
13219625d8cSopenharmony_ci#[cfg(feature = "error-context")]
13319625d8cSopenharmony_cifn req_group_usage_string() {
13419625d8cSopenharmony_ci    static REQ_GROUP_USAGE: &str = "error: the following required arguments were not provided:
13519625d8cSopenharmony_ci  <base|--delete>
13619625d8cSopenharmony_ci
13719625d8cSopenharmony_ciUsage: clap-test <base|--delete>
13819625d8cSopenharmony_ci
13919625d8cSopenharmony_ciFor more information, try '--help'.
14019625d8cSopenharmony_ci";
14119625d8cSopenharmony_ci
14219625d8cSopenharmony_ci    let cmd = Command::new("req_group")
14319625d8cSopenharmony_ci        .arg(arg!([base] "Base commit"))
14419625d8cSopenharmony_ci        .arg(arg!(
14519625d8cSopenharmony_ci            -d --delete "Remove the base commit information"
14619625d8cSopenharmony_ci        ))
14719625d8cSopenharmony_ci        .group(
14819625d8cSopenharmony_ci            ArgGroup::new("base_or_delete")
14919625d8cSopenharmony_ci                .args(["base", "delete"])
15019625d8cSopenharmony_ci                .required(true),
15119625d8cSopenharmony_ci        );
15219625d8cSopenharmony_ci
15319625d8cSopenharmony_ci    utils::assert_output(cmd, "clap-test", REQ_GROUP_USAGE, true);
15419625d8cSopenharmony_ci}
15519625d8cSopenharmony_ci
15619625d8cSopenharmony_ci#[test]
15719625d8cSopenharmony_ci#[cfg(feature = "error-context")]
15819625d8cSopenharmony_cifn req_group_with_conflict_usage_string() {
15919625d8cSopenharmony_ci    static REQ_GROUP_CONFLICT_USAGE: &str = "\
16019625d8cSopenharmony_cierror: the argument '--delete' cannot be used with '[base]'
16119625d8cSopenharmony_ci
16219625d8cSopenharmony_ciUsage: clap-test <base|--delete>
16319625d8cSopenharmony_ci
16419625d8cSopenharmony_ciFor more information, try '--help'.
16519625d8cSopenharmony_ci";
16619625d8cSopenharmony_ci
16719625d8cSopenharmony_ci    let cmd = Command::new("req_group")
16819625d8cSopenharmony_ci        .arg(arg!([base] "Base commit").conflicts_with("delete"))
16919625d8cSopenharmony_ci        .arg(arg!(
17019625d8cSopenharmony_ci            -d --delete "Remove the base commit information"
17119625d8cSopenharmony_ci        ))
17219625d8cSopenharmony_ci        .group(
17319625d8cSopenharmony_ci            ArgGroup::new("base_or_delete")
17419625d8cSopenharmony_ci                .args(["base", "delete"])
17519625d8cSopenharmony_ci                .required(true),
17619625d8cSopenharmony_ci        );
17719625d8cSopenharmony_ci
17819625d8cSopenharmony_ci    utils::assert_output(
17919625d8cSopenharmony_ci        cmd,
18019625d8cSopenharmony_ci        "clap-test --delete base",
18119625d8cSopenharmony_ci        REQ_GROUP_CONFLICT_USAGE,
18219625d8cSopenharmony_ci        true,
18319625d8cSopenharmony_ci    );
18419625d8cSopenharmony_ci}
18519625d8cSopenharmony_ci
18619625d8cSopenharmony_ci#[test]
18719625d8cSopenharmony_ci#[cfg(feature = "error-context")]
18819625d8cSopenharmony_cifn req_group_with_conflict_usage_string_only_options() {
18919625d8cSopenharmony_ci    static REQ_GROUP_CONFLICT_ONLY_OPTIONS: &str = "\
19019625d8cSopenharmony_cierror: the argument '--delete' cannot be used with '--all'
19119625d8cSopenharmony_ci
19219625d8cSopenharmony_ciUsage: clap-test <--all|--delete>
19319625d8cSopenharmony_ci
19419625d8cSopenharmony_ciFor more information, try '--help'.
19519625d8cSopenharmony_ci";
19619625d8cSopenharmony_ci
19719625d8cSopenharmony_ci    let cmd = Command::new("req_group")
19819625d8cSopenharmony_ci        .arg(arg!(-a --all "All").conflicts_with("delete"))
19919625d8cSopenharmony_ci        .arg(arg!(
20019625d8cSopenharmony_ci            -d --delete "Remove the base commit information"
20119625d8cSopenharmony_ci        ))
20219625d8cSopenharmony_ci        .group(
20319625d8cSopenharmony_ci            ArgGroup::new("all_or_delete")
20419625d8cSopenharmony_ci                .args(["all", "delete"])
20519625d8cSopenharmony_ci                .required(true),
20619625d8cSopenharmony_ci        );
20719625d8cSopenharmony_ci    utils::assert_output(
20819625d8cSopenharmony_ci        cmd,
20919625d8cSopenharmony_ci        "clap-test --delete --all",
21019625d8cSopenharmony_ci        REQ_GROUP_CONFLICT_ONLY_OPTIONS,
21119625d8cSopenharmony_ci        true,
21219625d8cSopenharmony_ci    );
21319625d8cSopenharmony_ci}
21419625d8cSopenharmony_ci
21519625d8cSopenharmony_ci#[test]
21619625d8cSopenharmony_cifn required_group_multiple_args() {
21719625d8cSopenharmony_ci    let result = Command::new("group")
21819625d8cSopenharmony_ci        .arg(arg!(-f --flag "some flag").action(ArgAction::SetTrue))
21919625d8cSopenharmony_ci        .arg(arg!(-c --color "some other flag").action(ArgAction::SetTrue))
22019625d8cSopenharmony_ci        .group(
22119625d8cSopenharmony_ci            ArgGroup::new("req")
22219625d8cSopenharmony_ci                .args(["flag", "color"])
22319625d8cSopenharmony_ci                .required(true)
22419625d8cSopenharmony_ci                .multiple(true),
22519625d8cSopenharmony_ci        )
22619625d8cSopenharmony_ci        .try_get_matches_from(vec!["group", "-f", "-c"]);
22719625d8cSopenharmony_ci    assert!(result.is_ok(), "{}", result.unwrap_err());
22819625d8cSopenharmony_ci    let m = result.unwrap();
22919625d8cSopenharmony_ci    assert!(*m.get_one::<bool>("flag").expect("defaulted by clap"));
23019625d8cSopenharmony_ci    assert!(*m.get_one::<bool>("color").expect("defaulted by clap"));
23119625d8cSopenharmony_ci    assert_eq!(
23219625d8cSopenharmony_ci        &*m.get_many::<Id>("req")
23319625d8cSopenharmony_ci            .unwrap()
23419625d8cSopenharmony_ci            .map(|v| v.as_str())
23519625d8cSopenharmony_ci            .collect::<Vec<_>>(),
23619625d8cSopenharmony_ci        ["flag", "color"]
23719625d8cSopenharmony_ci    );
23819625d8cSopenharmony_ci}
23919625d8cSopenharmony_ci
24019625d8cSopenharmony_ci#[test]
24119625d8cSopenharmony_cifn group_multiple_args_error() {
24219625d8cSopenharmony_ci    let result = Command::new("group")
24319625d8cSopenharmony_ci        .arg(arg!(-f --flag "some flag"))
24419625d8cSopenharmony_ci        .arg(arg!(-c --color "some other flag"))
24519625d8cSopenharmony_ci        .group(ArgGroup::new("req").args(["flag", "color"]))
24619625d8cSopenharmony_ci        .try_get_matches_from(vec!["group", "-f", "-c"]);
24719625d8cSopenharmony_ci    assert!(result.is_err());
24819625d8cSopenharmony_ci    let err = result.unwrap_err();
24919625d8cSopenharmony_ci    assert_eq!(err.kind(), ErrorKind::ArgumentConflict);
25019625d8cSopenharmony_ci}
25119625d8cSopenharmony_ci
25219625d8cSopenharmony_ci#[test]
25319625d8cSopenharmony_cifn group_overrides_required() {
25419625d8cSopenharmony_ci    let command = Command::new("group")
25519625d8cSopenharmony_ci        .arg(arg!(--foo <FOO>).required(true))
25619625d8cSopenharmony_ci        .arg(arg!(--bar <BAR>).required(true))
25719625d8cSopenharmony_ci        .group(ArgGroup::new("group").args(["foo", "bar"]).required(true));
25819625d8cSopenharmony_ci    let result = command.try_get_matches_from(vec!["group", "--foo", "value"]);
25919625d8cSopenharmony_ci    assert!(result.is_ok(), "{}", result.unwrap_err());
26019625d8cSopenharmony_ci    let m = result.unwrap();
26119625d8cSopenharmony_ci    assert!(m.contains_id("foo"));
26219625d8cSopenharmony_ci    assert!(!m.contains_id("bar"));
26319625d8cSopenharmony_ci}
26419625d8cSopenharmony_ci
26519625d8cSopenharmony_ci#[test]
26619625d8cSopenharmony_cifn group_usage_use_val_name() {
26719625d8cSopenharmony_ci    static GROUP_USAGE_USE_VAL_NAME: &str = "\
26819625d8cSopenharmony_ciUsage: prog <A>
26919625d8cSopenharmony_ci
27019625d8cSopenharmony_ciArguments:
27119625d8cSopenharmony_ci  [A]
27219625d8cSopenharmony_ci
27319625d8cSopenharmony_ciOptions:
27419625d8cSopenharmony_ci  -h, --help  Print help
27519625d8cSopenharmony_ci";
27619625d8cSopenharmony_ci    let cmd = Command::new("prog")
27719625d8cSopenharmony_ci        .arg(Arg::new("a").value_name("A"))
27819625d8cSopenharmony_ci        .group(ArgGroup::new("group").arg("a").required(true));
27919625d8cSopenharmony_ci    utils::assert_output(cmd, "prog --help", GROUP_USAGE_USE_VAL_NAME, false);
28019625d8cSopenharmony_ci}
28119625d8cSopenharmony_ci
28219625d8cSopenharmony_ci#[test]
28319625d8cSopenharmony_cifn group_acts_like_arg() {
28419625d8cSopenharmony_ci    let result = Command::new("prog")
28519625d8cSopenharmony_ci        .arg(
28619625d8cSopenharmony_ci            Arg::new("debug")
28719625d8cSopenharmony_ci                .long("debug")
28819625d8cSopenharmony_ci                .group("mode")
28919625d8cSopenharmony_ci                .action(ArgAction::SetTrue),
29019625d8cSopenharmony_ci        )
29119625d8cSopenharmony_ci        .arg(
29219625d8cSopenharmony_ci            Arg::new("verbose")
29319625d8cSopenharmony_ci                .long("verbose")
29419625d8cSopenharmony_ci                .group("mode")
29519625d8cSopenharmony_ci                .action(ArgAction::SetTrue),
29619625d8cSopenharmony_ci        )
29719625d8cSopenharmony_ci        .try_get_matches_from(vec!["prog", "--debug"]);
29819625d8cSopenharmony_ci
29919625d8cSopenharmony_ci    assert!(result.is_ok(), "{}", result.unwrap_err());
30019625d8cSopenharmony_ci    let m = result.unwrap();
30119625d8cSopenharmony_ci    assert!(m.contains_id("mode"));
30219625d8cSopenharmony_ci    assert_eq!(m.get_one::<clap::Id>("mode").unwrap(), "debug");
30319625d8cSopenharmony_ci}
30419625d8cSopenharmony_ci
30519625d8cSopenharmony_ci#[test]
30619625d8cSopenharmony_cifn conflict_with_overlapping_group_in_error() {
30719625d8cSopenharmony_ci    static ERR: &str = "\
30819625d8cSopenharmony_cierror: the argument '--major' cannot be used with '--minor'
30919625d8cSopenharmony_ci
31019625d8cSopenharmony_ciUsage: prog --major
31119625d8cSopenharmony_ci
31219625d8cSopenharmony_ciFor more information, try '--help'.
31319625d8cSopenharmony_ci";
31419625d8cSopenharmony_ci
31519625d8cSopenharmony_ci    let cmd = Command::new("prog")
31619625d8cSopenharmony_ci        .group(ArgGroup::new("all").multiple(true))
31719625d8cSopenharmony_ci        .arg(arg!(--major).group("vers").group("all"))
31819625d8cSopenharmony_ci        .arg(arg!(--minor).group("vers").group("all"))
31919625d8cSopenharmony_ci        .arg(arg!(--other).group("all"));
32019625d8cSopenharmony_ci
32119625d8cSopenharmony_ci    utils::assert_output(cmd, "prog --major --minor", ERR, true);
32219625d8cSopenharmony_ci}
32319625d8cSopenharmony_ci
32419625d8cSopenharmony_ci#[test]
32519625d8cSopenharmony_cifn requires_group_with_overlapping_group_in_error() {
32619625d8cSopenharmony_ci    static ERR: &str = "\
32719625d8cSopenharmony_cierror: the following required arguments were not provided:
32819625d8cSopenharmony_ci  <--in|--spec>
32919625d8cSopenharmony_ci
33019625d8cSopenharmony_ciUsage: prog --config <--in|--spec>
33119625d8cSopenharmony_ci
33219625d8cSopenharmony_ciFor more information, try '--help'.
33319625d8cSopenharmony_ci";
33419625d8cSopenharmony_ci
33519625d8cSopenharmony_ci    let cmd = Command::new("prog")
33619625d8cSopenharmony_ci        .group(ArgGroup::new("all").multiple(true))
33719625d8cSopenharmony_ci        .group(ArgGroup::new("input").required(true))
33819625d8cSopenharmony_ci        .arg(arg!(--in).group("input").group("all"))
33919625d8cSopenharmony_ci        .arg(arg!(--spec).group("input").group("all"))
34019625d8cSopenharmony_ci        .arg(arg!(--config).requires("input").group("all"));
34119625d8cSopenharmony_ci
34219625d8cSopenharmony_ci    utils::assert_output(cmd, "prog --config", ERR, true);
34319625d8cSopenharmony_ci}
34419625d8cSopenharmony_ci
34519625d8cSopenharmony_ci/* This is used to be fixed in a hack, we need to find a better way to fix it.
34619625d8cSopenharmony_ci#[test]
34719625d8cSopenharmony_cifn issue_1794() {
34819625d8cSopenharmony_ci    let cmd = clap::Command::new("hello")
34919625d8cSopenharmony_ci        .bin_name("deno")
35019625d8cSopenharmony_ci        .arg(Arg::new("option1").long("option1").action(ArgAction::SetTrue))
35119625d8cSopenharmony_ci        .arg(Arg::new("pos1").action(ArgAction::Set))
35219625d8cSopenharmony_ci        .arg(Arg::new("pos2").action(ArgAction::Set))
35319625d8cSopenharmony_ci        .group(
35419625d8cSopenharmony_ci            ArgGroup::new("arg1")
35519625d8cSopenharmony_ci                .args(["pos1", "option1"])
35619625d8cSopenharmony_ci                .required(true),
35719625d8cSopenharmony_ci        );
35819625d8cSopenharmony_ci
35919625d8cSopenharmony_ci    let m = cmd.clone().try_get_matches_from(["cmd", "pos1", "pos2"]).unwrap();
36019625d8cSopenharmony_ci    assert_eq!(m.get_one::<String>("pos1").map(|v| v.as_str()), Some("pos1"));
36119625d8cSopenharmony_ci    assert_eq!(m.get_one::<String>("pos2").map(|v| v.as_str()), Some("pos2"));
36219625d8cSopenharmony_ci    assert!(!*m.get_one::<bool>("option1").expect("defaulted by clap"));
36319625d8cSopenharmony_ci
36419625d8cSopenharmony_ci    let m = cmd
36519625d8cSopenharmony_ci        .clone()
36619625d8cSopenharmony_ci        .try_get_matches_from(["cmd", "--option1", "positional"]).unwrap();
36719625d8cSopenharmony_ci    assert_eq!(m.get_one::<String>("pos1").map(|v| v.as_str()), None);
36819625d8cSopenharmony_ci    assert_eq!(m.get_one::<String>("pos2").map(|v| v.as_str()), Some("positional"));
36919625d8cSopenharmony_ci    assert!(*m.get_one::<bool>("option1").expect("defaulted by clap"));
37019625d8cSopenharmony_ci}
37119625d8cSopenharmony_ci*/
372