119625d8cSopenharmony_ciuse clap::{arg, error::ErrorKind, Arg, ArgAction, ArgMatches, Command};
219625d8cSopenharmony_ci
319625d8cSopenharmony_ci#[cfg(feature = "error-context")]
419625d8cSopenharmony_ciuse super::utils;
519625d8cSopenharmony_ci
619625d8cSopenharmony_ci#[test]
719625d8cSopenharmony_cifn require_equals_fail() {
819625d8cSopenharmony_ci    let res = Command::new("prog")
919625d8cSopenharmony_ci        .arg(
1019625d8cSopenharmony_ci            Arg::new("cfg")
1119625d8cSopenharmony_ci                .require_equals(true)
1219625d8cSopenharmony_ci                .value_parser(clap::builder::NonEmptyStringValueParser::new())
1319625d8cSopenharmony_ci                .action(ArgAction::Set)
1419625d8cSopenharmony_ci                .long("config"),
1519625d8cSopenharmony_ci        )
1619625d8cSopenharmony_ci        .try_get_matches_from(vec!["prog", "--config", "file.conf"]);
1719625d8cSopenharmony_ci    assert!(res.is_err());
1819625d8cSopenharmony_ci    assert_eq!(res.unwrap_err().kind(), ErrorKind::NoEquals);
1919625d8cSopenharmony_ci}
2019625d8cSopenharmony_ci
2119625d8cSopenharmony_ci#[test]
2219625d8cSopenharmony_ci#[cfg(feature = "error-context")]
2319625d8cSopenharmony_cifn require_equals_fail_message() {
2419625d8cSopenharmony_ci    static NO_EQUALS: &str = "error: equal sign is needed when assigning values to '--config=<cfg>'
2519625d8cSopenharmony_ci
2619625d8cSopenharmony_ciUsage: prog [OPTIONS]
2719625d8cSopenharmony_ci
2819625d8cSopenharmony_ciFor more information, try '--help'.
2919625d8cSopenharmony_ci";
3019625d8cSopenharmony_ci    let cmd = Command::new("prog").arg(
3119625d8cSopenharmony_ci        Arg::new("cfg")
3219625d8cSopenharmony_ci            .require_equals(true)
3319625d8cSopenharmony_ci            .action(ArgAction::Set)
3419625d8cSopenharmony_ci            .long("config"),
3519625d8cSopenharmony_ci    );
3619625d8cSopenharmony_ci    utils::assert_output(cmd, "prog --config file.conf", NO_EQUALS, true);
3719625d8cSopenharmony_ci}
3819625d8cSopenharmony_ci
3919625d8cSopenharmony_ci#[test]
4019625d8cSopenharmony_cifn require_equals_min_values_zero() {
4119625d8cSopenharmony_ci    let res = Command::new("prog")
4219625d8cSopenharmony_ci        .arg(
4319625d8cSopenharmony_ci            Arg::new("cfg")
4419625d8cSopenharmony_ci                .action(ArgAction::Set)
4519625d8cSopenharmony_ci                .require_equals(true)
4619625d8cSopenharmony_ci                .num_args(0..)
4719625d8cSopenharmony_ci                .long("config"),
4819625d8cSopenharmony_ci        )
4919625d8cSopenharmony_ci        .arg(Arg::new("cmd"))
5019625d8cSopenharmony_ci        .try_get_matches_from(vec!["prog", "--config", "cmd"]);
5119625d8cSopenharmony_ci    assert!(res.is_ok(), "{}", res.unwrap_err());
5219625d8cSopenharmony_ci    let m = res.unwrap();
5319625d8cSopenharmony_ci    assert!(m.contains_id("cfg"));
5419625d8cSopenharmony_ci    assert_eq!(m.get_one::<String>("cmd").map(|v| v.as_str()), Some("cmd"));
5519625d8cSopenharmony_ci}
5619625d8cSopenharmony_ci
5719625d8cSopenharmony_ci#[test]
5819625d8cSopenharmony_cifn double_hyphen_as_value() {
5919625d8cSopenharmony_ci    let res = Command::new("prog")
6019625d8cSopenharmony_ci        .arg(
6119625d8cSopenharmony_ci            Arg::new("cfg")
6219625d8cSopenharmony_ci                .action(ArgAction::Set)
6319625d8cSopenharmony_ci                .allow_hyphen_values(true)
6419625d8cSopenharmony_ci                .long("config"),
6519625d8cSopenharmony_ci        )
6619625d8cSopenharmony_ci        .try_get_matches_from(vec!["prog", "--config", "--"]);
6719625d8cSopenharmony_ci    assert!(res.is_ok(), "{:?}", res);
6819625d8cSopenharmony_ci    assert_eq!(
6919625d8cSopenharmony_ci        res.unwrap().get_one::<String>("cfg").map(|v| v.as_str()),
7019625d8cSopenharmony_ci        Some("--")
7119625d8cSopenharmony_ci    );
7219625d8cSopenharmony_ci}
7319625d8cSopenharmony_ci
7419625d8cSopenharmony_ci#[test]
7519625d8cSopenharmony_cifn require_equals_no_empty_values_fail() {
7619625d8cSopenharmony_ci    let res = Command::new("prog")
7719625d8cSopenharmony_ci        .arg(
7819625d8cSopenharmony_ci            Arg::new("cfg")
7919625d8cSopenharmony_ci                .action(ArgAction::Set)
8019625d8cSopenharmony_ci                .require_equals(true)
8119625d8cSopenharmony_ci                .value_parser(clap::builder::NonEmptyStringValueParser::new())
8219625d8cSopenharmony_ci                .long("config"),
8319625d8cSopenharmony_ci        )
8419625d8cSopenharmony_ci        .arg(Arg::new("some"))
8519625d8cSopenharmony_ci        .try_get_matches_from(vec!["prog", "--config=", "file.conf"]);
8619625d8cSopenharmony_ci    assert!(res.is_err());
8719625d8cSopenharmony_ci    assert_eq!(res.unwrap_err().kind(), ErrorKind::InvalidValue);
8819625d8cSopenharmony_ci}
8919625d8cSopenharmony_ci
9019625d8cSopenharmony_ci#[test]
9119625d8cSopenharmony_cifn require_equals_empty_vals_pass() {
9219625d8cSopenharmony_ci    let res = Command::new("prog")
9319625d8cSopenharmony_ci        .arg(
9419625d8cSopenharmony_ci            Arg::new("cfg")
9519625d8cSopenharmony_ci                .action(ArgAction::Set)
9619625d8cSopenharmony_ci                .require_equals(true)
9719625d8cSopenharmony_ci                .long("config"),
9819625d8cSopenharmony_ci        )
9919625d8cSopenharmony_ci        .try_get_matches_from(vec!["prog", "--config="]);
10019625d8cSopenharmony_ci    assert!(res.is_ok(), "{}", res.unwrap_err());
10119625d8cSopenharmony_ci}
10219625d8cSopenharmony_ci
10319625d8cSopenharmony_ci#[test]
10419625d8cSopenharmony_cifn require_equals_pass() {
10519625d8cSopenharmony_ci    let res = Command::new("prog")
10619625d8cSopenharmony_ci        .arg(
10719625d8cSopenharmony_ci            Arg::new("cfg")
10819625d8cSopenharmony_ci                .action(ArgAction::Set)
10919625d8cSopenharmony_ci                .require_equals(true)
11019625d8cSopenharmony_ci                .long("config"),
11119625d8cSopenharmony_ci        )
11219625d8cSopenharmony_ci        .try_get_matches_from(vec!["prog", "--config=file.conf"]);
11319625d8cSopenharmony_ci    assert!(res.is_ok(), "{}", res.unwrap_err());
11419625d8cSopenharmony_ci}
11519625d8cSopenharmony_ci
11619625d8cSopenharmony_ci#[test]
11719625d8cSopenharmony_cifn stdin_char() {
11819625d8cSopenharmony_ci    let r = Command::new("opts")
11919625d8cSopenharmony_ci        .arg(arg!(f: -f [flag] "some flag"))
12019625d8cSopenharmony_ci        .try_get_matches_from(vec!["", "-f", "-"]);
12119625d8cSopenharmony_ci    assert!(r.is_ok(), "{}", r.unwrap_err());
12219625d8cSopenharmony_ci    let m = r.unwrap();
12319625d8cSopenharmony_ci    assert!(m.contains_id("f"));
12419625d8cSopenharmony_ci    assert_eq!(m.get_one::<String>("f").map(|v| v.as_str()).unwrap(), "-");
12519625d8cSopenharmony_ci}
12619625d8cSopenharmony_ci
12719625d8cSopenharmony_ci#[test]
12819625d8cSopenharmony_cifn opts_using_short() {
12919625d8cSopenharmony_ci    let r = Command::new("opts")
13019625d8cSopenharmony_ci        .args([
13119625d8cSopenharmony_ci            arg!(f: -f [flag] "some flag"),
13219625d8cSopenharmony_ci            arg!(c: -c [color] "some other flag"),
13319625d8cSopenharmony_ci        ])
13419625d8cSopenharmony_ci        .try_get_matches_from(vec!["", "-f", "some", "-c", "other"]);
13519625d8cSopenharmony_ci    assert!(r.is_ok(), "{}", r.unwrap_err());
13619625d8cSopenharmony_ci    let m = r.unwrap();
13719625d8cSopenharmony_ci    assert!(m.contains_id("f"));
13819625d8cSopenharmony_ci    assert_eq!(
13919625d8cSopenharmony_ci        m.get_one::<String>("f").map(|v| v.as_str()).unwrap(),
14019625d8cSopenharmony_ci        "some"
14119625d8cSopenharmony_ci    );
14219625d8cSopenharmony_ci    assert!(m.contains_id("c"));
14319625d8cSopenharmony_ci    assert_eq!(
14419625d8cSopenharmony_ci        m.get_one::<String>("c").map(|v| v.as_str()).unwrap(),
14519625d8cSopenharmony_ci        "other"
14619625d8cSopenharmony_ci    );
14719625d8cSopenharmony_ci}
14819625d8cSopenharmony_ci
14919625d8cSopenharmony_ci#[test]
15019625d8cSopenharmony_cifn lots_o_vals() {
15119625d8cSopenharmony_ci    let r = Command::new("opts")
15219625d8cSopenharmony_ci        .arg(arg!(o: -o <opt> "some opt").num_args(1..).required(true))
15319625d8cSopenharmony_ci        .try_get_matches_from(vec![
15419625d8cSopenharmony_ci            "", "-o", "some", "some", "some", "some", "some", "some", "some", "some", "some",
15519625d8cSopenharmony_ci            "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some",
15619625d8cSopenharmony_ci            "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some",
15719625d8cSopenharmony_ci            "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some",
15819625d8cSopenharmony_ci            "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some",
15919625d8cSopenharmony_ci            "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some",
16019625d8cSopenharmony_ci            "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some",
16119625d8cSopenharmony_ci            "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some",
16219625d8cSopenharmony_ci            "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some",
16319625d8cSopenharmony_ci            "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some",
16419625d8cSopenharmony_ci            "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some",
16519625d8cSopenharmony_ci            "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some",
16619625d8cSopenharmony_ci            "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some",
16719625d8cSopenharmony_ci            "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some",
16819625d8cSopenharmony_ci            "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some",
16919625d8cSopenharmony_ci            "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some",
17019625d8cSopenharmony_ci            "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some",
17119625d8cSopenharmony_ci            "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some",
17219625d8cSopenharmony_ci            "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some",
17319625d8cSopenharmony_ci            "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some",
17419625d8cSopenharmony_ci            "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some",
17519625d8cSopenharmony_ci            "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some",
17619625d8cSopenharmony_ci            "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some",
17719625d8cSopenharmony_ci            "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some",
17819625d8cSopenharmony_ci            "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some",
17919625d8cSopenharmony_ci            "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some",
18019625d8cSopenharmony_ci            "some", "some", "some", "some", "some", "some", "some", "some", "some", "some", "some",
18119625d8cSopenharmony_ci            "some", "some",
18219625d8cSopenharmony_ci        ]);
18319625d8cSopenharmony_ci    assert!(r.is_ok(), "{}", r.unwrap_err());
18419625d8cSopenharmony_ci    let m = r.unwrap();
18519625d8cSopenharmony_ci    assert!(m.contains_id("o"));
18619625d8cSopenharmony_ci    assert_eq!(m.get_many::<String>("o").unwrap().count(), 297); // i.e. more than u8
18719625d8cSopenharmony_ci}
18819625d8cSopenharmony_ci
18919625d8cSopenharmony_ci#[test]
19019625d8cSopenharmony_cifn opts_using_long_space() {
19119625d8cSopenharmony_ci    let r = Command::new("opts")
19219625d8cSopenharmony_ci        .args([
19319625d8cSopenharmony_ci            arg!(--flag [flag] "some flag"),
19419625d8cSopenharmony_ci            arg!(--color [color] "some other flag"),
19519625d8cSopenharmony_ci        ])
19619625d8cSopenharmony_ci        .try_get_matches_from(vec!["", "--flag", "some", "--color", "other"]);
19719625d8cSopenharmony_ci    assert!(r.is_ok(), "{}", r.unwrap_err());
19819625d8cSopenharmony_ci    let m = r.unwrap();
19919625d8cSopenharmony_ci    assert!(m.contains_id("flag"));
20019625d8cSopenharmony_ci    assert_eq!(
20119625d8cSopenharmony_ci        m.get_one::<String>("flag").map(|v| v.as_str()).unwrap(),
20219625d8cSopenharmony_ci        "some"
20319625d8cSopenharmony_ci    );
20419625d8cSopenharmony_ci    assert!(m.contains_id("color"));
20519625d8cSopenharmony_ci    assert_eq!(
20619625d8cSopenharmony_ci        m.get_one::<String>("color").map(|v| v.as_str()).unwrap(),
20719625d8cSopenharmony_ci        "other"
20819625d8cSopenharmony_ci    );
20919625d8cSopenharmony_ci}
21019625d8cSopenharmony_ci
21119625d8cSopenharmony_ci#[test]
21219625d8cSopenharmony_cifn opts_using_long_equals() {
21319625d8cSopenharmony_ci    let r = Command::new("opts")
21419625d8cSopenharmony_ci        .args([
21519625d8cSopenharmony_ci            arg!(--flag [flag] "some flag"),
21619625d8cSopenharmony_ci            arg!(--color [color] "some other flag"),
21719625d8cSopenharmony_ci        ])
21819625d8cSopenharmony_ci        .try_get_matches_from(vec!["", "--flag=some", "--color=other"]);
21919625d8cSopenharmony_ci    assert!(r.is_ok(), "{}", r.unwrap_err());
22019625d8cSopenharmony_ci    let m = r.unwrap();
22119625d8cSopenharmony_ci    assert!(m.contains_id("flag"));
22219625d8cSopenharmony_ci    assert_eq!(
22319625d8cSopenharmony_ci        m.get_one::<String>("flag").map(|v| v.as_str()).unwrap(),
22419625d8cSopenharmony_ci        "some"
22519625d8cSopenharmony_ci    );
22619625d8cSopenharmony_ci    assert!(m.contains_id("color"));
22719625d8cSopenharmony_ci    assert_eq!(
22819625d8cSopenharmony_ci        m.get_one::<String>("color").map(|v| v.as_str()).unwrap(),
22919625d8cSopenharmony_ci        "other"
23019625d8cSopenharmony_ci    );
23119625d8cSopenharmony_ci}
23219625d8cSopenharmony_ci
23319625d8cSopenharmony_ci#[test]
23419625d8cSopenharmony_cifn opts_using_mixed() {
23519625d8cSopenharmony_ci    let r = Command::new("opts")
23619625d8cSopenharmony_ci        .args([
23719625d8cSopenharmony_ci            arg!(-f --flag [flag] "some flag"),
23819625d8cSopenharmony_ci            arg!(-c --color [color] "some other flag"),
23919625d8cSopenharmony_ci        ])
24019625d8cSopenharmony_ci        .try_get_matches_from(vec!["", "-f", "some", "--color", "other"]);
24119625d8cSopenharmony_ci    assert!(r.is_ok(), "{}", r.unwrap_err());
24219625d8cSopenharmony_ci    let m = r.unwrap();
24319625d8cSopenharmony_ci    assert!(m.contains_id("flag"));
24419625d8cSopenharmony_ci    assert_eq!(
24519625d8cSopenharmony_ci        m.get_one::<String>("flag").map(|v| v.as_str()).unwrap(),
24619625d8cSopenharmony_ci        "some"
24719625d8cSopenharmony_ci    );
24819625d8cSopenharmony_ci    assert!(m.contains_id("color"));
24919625d8cSopenharmony_ci    assert_eq!(
25019625d8cSopenharmony_ci        m.get_one::<String>("color").map(|v| v.as_str()).unwrap(),
25119625d8cSopenharmony_ci        "other"
25219625d8cSopenharmony_ci    );
25319625d8cSopenharmony_ci}
25419625d8cSopenharmony_ci
25519625d8cSopenharmony_ci#[test]
25619625d8cSopenharmony_cifn opts_using_mixed2() {
25719625d8cSopenharmony_ci    let r = Command::new("opts")
25819625d8cSopenharmony_ci        .args([
25919625d8cSopenharmony_ci            arg!(-f --flag [flag] "some flag"),
26019625d8cSopenharmony_ci            arg!(-c --color [color] "some other flag"),
26119625d8cSopenharmony_ci        ])
26219625d8cSopenharmony_ci        .try_get_matches_from(vec!["", "--flag=some", "-c", "other"]);
26319625d8cSopenharmony_ci    assert!(r.is_ok(), "{}", r.unwrap_err());
26419625d8cSopenharmony_ci    let m = r.unwrap();
26519625d8cSopenharmony_ci    assert!(m.contains_id("flag"));
26619625d8cSopenharmony_ci    assert_eq!(
26719625d8cSopenharmony_ci        m.get_one::<String>("flag").map(|v| v.as_str()).unwrap(),
26819625d8cSopenharmony_ci        "some"
26919625d8cSopenharmony_ci    );
27019625d8cSopenharmony_ci    assert!(m.contains_id("color"));
27119625d8cSopenharmony_ci    assert_eq!(
27219625d8cSopenharmony_ci        m.get_one::<String>("color").map(|v| v.as_str()).unwrap(),
27319625d8cSopenharmony_ci        "other"
27419625d8cSopenharmony_ci    );
27519625d8cSopenharmony_ci}
27619625d8cSopenharmony_ci
27719625d8cSopenharmony_ci#[test]
27819625d8cSopenharmony_cifn default_values_user_value() {
27919625d8cSopenharmony_ci    let r = Command::new("df")
28019625d8cSopenharmony_ci        .arg(arg!(o: -o [opt] "some opt").default_value("default"))
28119625d8cSopenharmony_ci        .try_get_matches_from(vec!["", "-o", "value"]);
28219625d8cSopenharmony_ci    assert!(r.is_ok(), "{}", r.unwrap_err());
28319625d8cSopenharmony_ci    let m = r.unwrap();
28419625d8cSopenharmony_ci    assert!(m.contains_id("o"));
28519625d8cSopenharmony_ci    assert_eq!(
28619625d8cSopenharmony_ci        m.get_one::<String>("o").map(|v| v.as_str()).unwrap(),
28719625d8cSopenharmony_ci        "value"
28819625d8cSopenharmony_ci    );
28919625d8cSopenharmony_ci}
29019625d8cSopenharmony_ci
29119625d8cSopenharmony_ci#[test]
29219625d8cSopenharmony_cifn multiple_vals_pos_arg_equals() {
29319625d8cSopenharmony_ci    let r = Command::new("mvae")
29419625d8cSopenharmony_ci        .arg(arg!(o: -o [opt] ... "some opt"))
29519625d8cSopenharmony_ci        .arg(arg!([file] "some file"))
29619625d8cSopenharmony_ci        .try_get_matches_from(vec!["", "-o=1", "some"]);
29719625d8cSopenharmony_ci    assert!(r.is_ok(), "{}", r.unwrap_err());
29819625d8cSopenharmony_ci    let m = r.unwrap();
29919625d8cSopenharmony_ci    assert!(m.contains_id("o"));
30019625d8cSopenharmony_ci    assert_eq!(m.get_one::<String>("o").map(|v| v.as_str()).unwrap(), "1");
30119625d8cSopenharmony_ci    assert!(m.contains_id("file"));
30219625d8cSopenharmony_ci    assert_eq!(
30319625d8cSopenharmony_ci        m.get_one::<String>("file").map(|v| v.as_str()).unwrap(),
30419625d8cSopenharmony_ci        "some"
30519625d8cSopenharmony_ci    );
30619625d8cSopenharmony_ci}
30719625d8cSopenharmony_ci
30819625d8cSopenharmony_ci#[test]
30919625d8cSopenharmony_cifn require_delims_no_delim() {
31019625d8cSopenharmony_ci    let r = Command::new("mvae")
31119625d8cSopenharmony_ci        .arg(arg!(o: -o [opt] ... "some opt").value_delimiter(','))
31219625d8cSopenharmony_ci        .arg(arg!([file] "some file"))
31319625d8cSopenharmony_ci        .try_get_matches_from(vec!["mvae", "-o", "1", "2", "some"]);
31419625d8cSopenharmony_ci    assert!(r.is_err());
31519625d8cSopenharmony_ci    let err = r.unwrap_err();
31619625d8cSopenharmony_ci    assert_eq!(err.kind(), ErrorKind::UnknownArgument);
31719625d8cSopenharmony_ci}
31819625d8cSopenharmony_ci
31919625d8cSopenharmony_ci#[test]
32019625d8cSopenharmony_cifn require_delims() {
32119625d8cSopenharmony_ci    let r = Command::new("mvae")
32219625d8cSopenharmony_ci        .arg(
32319625d8cSopenharmony_ci            arg!(o: -o <opt> "some opt")
32419625d8cSopenharmony_ci                .value_delimiter(',')
32519625d8cSopenharmony_ci                .required(true),
32619625d8cSopenharmony_ci        )
32719625d8cSopenharmony_ci        .arg(arg!([file] "some file"))
32819625d8cSopenharmony_ci        .try_get_matches_from(vec!["", "-o", "1,2", "some"]);
32919625d8cSopenharmony_ci    assert!(r.is_ok(), "{}", r.unwrap_err());
33019625d8cSopenharmony_ci    let m = r.unwrap();
33119625d8cSopenharmony_ci    assert!(m.contains_id("o"));
33219625d8cSopenharmony_ci    assert_eq!(
33319625d8cSopenharmony_ci        m.get_many::<String>("o")
33419625d8cSopenharmony_ci            .unwrap()
33519625d8cSopenharmony_ci            .map(|v| v.as_str())
33619625d8cSopenharmony_ci            .collect::<Vec<_>>(),
33719625d8cSopenharmony_ci        ["1", "2"]
33819625d8cSopenharmony_ci    );
33919625d8cSopenharmony_ci    assert!(m.contains_id("file"));
34019625d8cSopenharmony_ci    assert_eq!(
34119625d8cSopenharmony_ci        m.get_one::<String>("file").map(|v| v.as_str()).unwrap(),
34219625d8cSopenharmony_ci        "some"
34319625d8cSopenharmony_ci    );
34419625d8cSopenharmony_ci}
34519625d8cSopenharmony_ci
34619625d8cSopenharmony_ci#[test]
34719625d8cSopenharmony_cifn leading_hyphen_pass() {
34819625d8cSopenharmony_ci    let r = Command::new("mvae")
34919625d8cSopenharmony_ci        .arg(
35019625d8cSopenharmony_ci            arg!(o: -o <opt> "some opt")
35119625d8cSopenharmony_ci                .required(true)
35219625d8cSopenharmony_ci                .num_args(1..)
35319625d8cSopenharmony_ci                .allow_hyphen_values(true),
35419625d8cSopenharmony_ci        )
35519625d8cSopenharmony_ci        .try_get_matches_from(vec!["", "-o", "-2", "3"]);
35619625d8cSopenharmony_ci    assert!(r.is_ok(), "{}", r.unwrap_err());
35719625d8cSopenharmony_ci    let m = r.unwrap();
35819625d8cSopenharmony_ci    assert!(m.contains_id("o"));
35919625d8cSopenharmony_ci    assert_eq!(
36019625d8cSopenharmony_ci        m.get_many::<String>("o")
36119625d8cSopenharmony_ci            .unwrap()
36219625d8cSopenharmony_ci            .map(|v| v.as_str())
36319625d8cSopenharmony_ci            .collect::<Vec<_>>(),
36419625d8cSopenharmony_ci        ["-2", "3"]
36519625d8cSopenharmony_ci    );
36619625d8cSopenharmony_ci}
36719625d8cSopenharmony_ci
36819625d8cSopenharmony_ci#[test]
36919625d8cSopenharmony_cifn leading_hyphen_fail() {
37019625d8cSopenharmony_ci    let r = Command::new("mvae")
37119625d8cSopenharmony_ci        .arg(arg!(o: -o <opt> "some opt").required(true))
37219625d8cSopenharmony_ci        .try_get_matches_from(vec!["", "-o", "-2"]);
37319625d8cSopenharmony_ci    assert!(r.is_err());
37419625d8cSopenharmony_ci    let m = r.unwrap_err();
37519625d8cSopenharmony_ci    assert_eq!(m.kind(), ErrorKind::UnknownArgument);
37619625d8cSopenharmony_ci}
37719625d8cSopenharmony_ci
37819625d8cSopenharmony_ci#[test]
37919625d8cSopenharmony_cifn leading_hyphen_with_flag_after() {
38019625d8cSopenharmony_ci    let r = Command::new("mvae")
38119625d8cSopenharmony_ci        .arg(
38219625d8cSopenharmony_ci            arg!(o: -o <opt> "some opt")
38319625d8cSopenharmony_ci                .required(true)
38419625d8cSopenharmony_ci                .num_args(1..)
38519625d8cSopenharmony_ci                .allow_hyphen_values(true),
38619625d8cSopenharmony_ci        )
38719625d8cSopenharmony_ci        .arg(arg!(f: -f "some flag").action(ArgAction::SetTrue))
38819625d8cSopenharmony_ci        .try_get_matches_from(vec!["", "-o", "-2", "-f"]);
38919625d8cSopenharmony_ci    assert!(r.is_ok(), "{}", r.unwrap_err());
39019625d8cSopenharmony_ci    let m = r.unwrap();
39119625d8cSopenharmony_ci    assert!(m.contains_id("o"));
39219625d8cSopenharmony_ci    assert_eq!(
39319625d8cSopenharmony_ci        m.get_many::<String>("o")
39419625d8cSopenharmony_ci            .unwrap()
39519625d8cSopenharmony_ci            .map(|v| v.as_str())
39619625d8cSopenharmony_ci            .collect::<Vec<_>>(),
39719625d8cSopenharmony_ci        ["-2", "-f"]
39819625d8cSopenharmony_ci    );
39919625d8cSopenharmony_ci    assert!(!*m.get_one::<bool>("f").expect("defaulted by clap"));
40019625d8cSopenharmony_ci}
40119625d8cSopenharmony_ci
40219625d8cSopenharmony_ci#[test]
40319625d8cSopenharmony_cifn leading_hyphen_with_flag_before() {
40419625d8cSopenharmony_ci    let r = Command::new("mvae")
40519625d8cSopenharmony_ci        .arg(arg!(o: -o [opt] ... "some opt").allow_hyphen_values(true))
40619625d8cSopenharmony_ci        .arg(arg!(f: -f "some flag").action(ArgAction::SetTrue))
40719625d8cSopenharmony_ci        .try_get_matches_from(vec!["", "-f", "-o", "-2"]);
40819625d8cSopenharmony_ci    assert!(r.is_ok(), "{}", r.unwrap_err());
40919625d8cSopenharmony_ci    let m = r.unwrap();
41019625d8cSopenharmony_ci    assert!(m.contains_id("o"));
41119625d8cSopenharmony_ci    assert_eq!(
41219625d8cSopenharmony_ci        m.get_many::<String>("o")
41319625d8cSopenharmony_ci            .unwrap()
41419625d8cSopenharmony_ci            .map(|v| v.as_str())
41519625d8cSopenharmony_ci            .collect::<Vec<_>>(),
41619625d8cSopenharmony_ci        ["-2"]
41719625d8cSopenharmony_ci    );
41819625d8cSopenharmony_ci    assert!(*m.get_one::<bool>("f").expect("defaulted by clap"));
41919625d8cSopenharmony_ci}
42019625d8cSopenharmony_ci
42119625d8cSopenharmony_ci#[test]
42219625d8cSopenharmony_cifn leading_hyphen_with_only_pos_follows() {
42319625d8cSopenharmony_ci    let r = Command::new("mvae")
42419625d8cSopenharmony_ci        .arg(
42519625d8cSopenharmony_ci            arg!(o: -o [opt] ... "some opt")
42619625d8cSopenharmony_ci                .action(ArgAction::Set)
42719625d8cSopenharmony_ci                .allow_hyphen_values(true),
42819625d8cSopenharmony_ci        )
42919625d8cSopenharmony_ci        .arg(arg!([arg] "some arg"))
43019625d8cSopenharmony_ci        .try_get_matches_from(vec!["", "-o", "-2", "--", "val"]);
43119625d8cSopenharmony_ci    assert!(r.is_ok(), "{:?}", r);
43219625d8cSopenharmony_ci    let m = r.unwrap();
43319625d8cSopenharmony_ci    assert!(m.contains_id("o"));
43419625d8cSopenharmony_ci    assert_eq!(
43519625d8cSopenharmony_ci        m.get_many::<String>("o")
43619625d8cSopenharmony_ci            .unwrap()
43719625d8cSopenharmony_ci            .map(|v| v.as_str())
43819625d8cSopenharmony_ci            .collect::<Vec<_>>(),
43919625d8cSopenharmony_ci        ["-2"]
44019625d8cSopenharmony_ci    );
44119625d8cSopenharmony_ci    assert_eq!(m.get_one::<String>("arg").map(|v| v.as_str()), Some("val"));
44219625d8cSopenharmony_ci}
44319625d8cSopenharmony_ci
44419625d8cSopenharmony_ci#[test]
44519625d8cSopenharmony_ci#[cfg(feature = "suggestions")]
44619625d8cSopenharmony_ci#[cfg(feature = "error-context")]
44719625d8cSopenharmony_cifn did_you_mean() {
44819625d8cSopenharmony_ci    static DYM: &str = "\
44919625d8cSopenharmony_cierror: unexpected argument '--optio' found
45019625d8cSopenharmony_ci
45119625d8cSopenharmony_ci  note: argument '--option' exists
45219625d8cSopenharmony_ci
45319625d8cSopenharmony_ciUsage: clap-test --option <opt>... [positional] [positional2] [positional3]...
45419625d8cSopenharmony_ci
45519625d8cSopenharmony_ciFor more information, try '--help'.
45619625d8cSopenharmony_ci";
45719625d8cSopenharmony_ci
45819625d8cSopenharmony_ci    utils::assert_output(utils::complex_app(), "clap-test --optio=foo", DYM, true);
45919625d8cSopenharmony_ci}
46019625d8cSopenharmony_ci
46119625d8cSopenharmony_ci#[test]
46219625d8cSopenharmony_cifn issue_1047_min_zero_vals_default_val() {
46319625d8cSopenharmony_ci    let m = Command::new("foo")
46419625d8cSopenharmony_ci        .arg(
46519625d8cSopenharmony_ci            Arg::new("del")
46619625d8cSopenharmony_ci                .short('d')
46719625d8cSopenharmony_ci                .long("del")
46819625d8cSopenharmony_ci                .action(ArgAction::Set)
46919625d8cSopenharmony_ci                .require_equals(true)
47019625d8cSopenharmony_ci                .num_args(0..)
47119625d8cSopenharmony_ci                .default_missing_value("default"),
47219625d8cSopenharmony_ci        )
47319625d8cSopenharmony_ci        .try_get_matches_from(vec!["foo", "-d"])
47419625d8cSopenharmony_ci        .unwrap();
47519625d8cSopenharmony_ci    assert_eq!(
47619625d8cSopenharmony_ci        m.get_one::<String>("del").map(|v| v.as_str()),
47719625d8cSopenharmony_ci        Some("default")
47819625d8cSopenharmony_ci    );
47919625d8cSopenharmony_ci}
48019625d8cSopenharmony_ci
48119625d8cSopenharmony_cifn issue_1105_setup(argv: Vec<&'static str>) -> Result<ArgMatches, clap::Error> {
48219625d8cSopenharmony_ci    Command::new("opts")
48319625d8cSopenharmony_ci        .arg(arg!(-o --option <opt> "some option").required(true))
48419625d8cSopenharmony_ci        .arg(arg!(--flag "some flag"))
48519625d8cSopenharmony_ci        .try_get_matches_from(argv)
48619625d8cSopenharmony_ci}
48719625d8cSopenharmony_ci
48819625d8cSopenharmony_ci#[test]
48919625d8cSopenharmony_cifn issue_1105_empty_value_long_fail() {
49019625d8cSopenharmony_ci    let r = issue_1105_setup(vec!["cmd", "--option", "--flag"]);
49119625d8cSopenharmony_ci    assert!(r.is_err());
49219625d8cSopenharmony_ci    assert_eq!(r.unwrap_err().kind(), ErrorKind::InvalidValue);
49319625d8cSopenharmony_ci}
49419625d8cSopenharmony_ci
49519625d8cSopenharmony_ci#[test]
49619625d8cSopenharmony_cifn issue_1105_empty_value_long_explicit() {
49719625d8cSopenharmony_ci    let r = issue_1105_setup(vec!["cmd", "--option", ""]);
49819625d8cSopenharmony_ci    assert!(r.is_ok(), "{}", r.unwrap_err());
49919625d8cSopenharmony_ci    let m = r.unwrap();
50019625d8cSopenharmony_ci    assert_eq!(m.get_one::<String>("option").map(|v| v.as_str()), Some(""));
50119625d8cSopenharmony_ci}
50219625d8cSopenharmony_ci
50319625d8cSopenharmony_ci#[test]
50419625d8cSopenharmony_cifn issue_1105_empty_value_long_equals() {
50519625d8cSopenharmony_ci    let r = issue_1105_setup(vec!["cmd", "--option="]);
50619625d8cSopenharmony_ci    assert!(r.is_ok(), "{}", r.unwrap_err());
50719625d8cSopenharmony_ci    let m = r.unwrap();
50819625d8cSopenharmony_ci    assert_eq!(m.get_one::<String>("option").map(|v| v.as_str()), Some(""));
50919625d8cSopenharmony_ci}
51019625d8cSopenharmony_ci
51119625d8cSopenharmony_ci#[test]
51219625d8cSopenharmony_cifn issue_1105_empty_value_short_fail() {
51319625d8cSopenharmony_ci    let r = issue_1105_setup(vec!["cmd", "-o", "--flag"]);
51419625d8cSopenharmony_ci    assert!(r.is_err());
51519625d8cSopenharmony_ci    assert_eq!(r.unwrap_err().kind(), ErrorKind::InvalidValue);
51619625d8cSopenharmony_ci}
51719625d8cSopenharmony_ci
51819625d8cSopenharmony_ci#[test]
51919625d8cSopenharmony_cifn issue_1105_empty_value_short_explicit() {
52019625d8cSopenharmony_ci    let r = issue_1105_setup(vec!["cmd", "-o", ""]);
52119625d8cSopenharmony_ci    assert!(r.is_ok(), "{}", r.unwrap_err());
52219625d8cSopenharmony_ci    let m = r.unwrap();
52319625d8cSopenharmony_ci    assert_eq!(m.get_one::<String>("option").map(|v| v.as_str()), Some(""));
52419625d8cSopenharmony_ci}
52519625d8cSopenharmony_ci
52619625d8cSopenharmony_ci#[test]
52719625d8cSopenharmony_cifn issue_1105_empty_value_short_equals() {
52819625d8cSopenharmony_ci    let r = issue_1105_setup(vec!["cmd", "-o="]);
52919625d8cSopenharmony_ci    assert!(r.is_ok(), "{}", r.unwrap_err());
53019625d8cSopenharmony_ci    let m = r.unwrap();
53119625d8cSopenharmony_ci    assert_eq!(m.get_one::<String>("option").map(|v| v.as_str()), Some(""));
53219625d8cSopenharmony_ci}
53319625d8cSopenharmony_ci
53419625d8cSopenharmony_ci#[test]
53519625d8cSopenharmony_cifn issue_1105_empty_value_short_explicit_no_space() {
53619625d8cSopenharmony_ci    let r = issue_1105_setup(vec!["cmd", "-o", ""]);
53719625d8cSopenharmony_ci    assert!(r.is_ok(), "{}", r.unwrap_err());
53819625d8cSopenharmony_ci    let m = r.unwrap();
53919625d8cSopenharmony_ci    assert_eq!(m.get_one::<String>("option").map(|v| v.as_str()), Some(""));
54019625d8cSopenharmony_ci}
54119625d8cSopenharmony_ci
54219625d8cSopenharmony_ci#[test]
54319625d8cSopenharmony_ci#[cfg(feature = "suggestions")]
54419625d8cSopenharmony_ci#[cfg(feature = "error-context")]
54519625d8cSopenharmony_cifn issue_1073_suboptimal_flag_suggestion() {
54619625d8cSopenharmony_ci    static DYM_ISSUE_1073: &str = "\
54719625d8cSopenharmony_cierror: unexpected argument '--files-without-matches' found
54819625d8cSopenharmony_ci
54919625d8cSopenharmony_ci  note: argument '--files-without-match' exists
55019625d8cSopenharmony_ci
55119625d8cSopenharmony_ciUsage: ripgrep-616 --files-without-match
55219625d8cSopenharmony_ci
55319625d8cSopenharmony_ciFor more information, try '--help'.
55419625d8cSopenharmony_ci";
55519625d8cSopenharmony_ci
55619625d8cSopenharmony_ci    let cmd = Command::new("ripgrep-616")
55719625d8cSopenharmony_ci        .arg(
55819625d8cSopenharmony_ci            Arg::new("files-with-matches")
55919625d8cSopenharmony_ci                .long("files-with-matches")
56019625d8cSopenharmony_ci                .action(ArgAction::SetTrue),
56119625d8cSopenharmony_ci        )
56219625d8cSopenharmony_ci        .arg(
56319625d8cSopenharmony_ci            Arg::new("files-without-match")
56419625d8cSopenharmony_ci                .long("files-without-match")
56519625d8cSopenharmony_ci                .action(ArgAction::SetTrue),
56619625d8cSopenharmony_ci        );
56719625d8cSopenharmony_ci    utils::assert_output(
56819625d8cSopenharmony_ci        cmd,
56919625d8cSopenharmony_ci        "ripgrep-616 --files-without-matches",
57019625d8cSopenharmony_ci        DYM_ISSUE_1073,
57119625d8cSopenharmony_ci        true,
57219625d8cSopenharmony_ci    );
57319625d8cSopenharmony_ci}
57419625d8cSopenharmony_ci
57519625d8cSopenharmony_ci#[test]
57619625d8cSopenharmony_cifn short_non_ascii_no_space() {
57719625d8cSopenharmony_ci    let matches = Command::new("cmd")
57819625d8cSopenharmony_ci        .arg(arg!(opt: -'磨' <opt>).required(true))
57919625d8cSopenharmony_ci        .try_get_matches_from(["test", "-磨VALUE"])
58019625d8cSopenharmony_ci        .unwrap();
58119625d8cSopenharmony_ci
58219625d8cSopenharmony_ci    assert_eq!(
58319625d8cSopenharmony_ci        "VALUE",
58419625d8cSopenharmony_ci        matches
58519625d8cSopenharmony_ci            .get_one::<String>("opt")
58619625d8cSopenharmony_ci            .map(|v| v.as_str())
58719625d8cSopenharmony_ci            .unwrap()
58819625d8cSopenharmony_ci    );
58919625d8cSopenharmony_ci}
59019625d8cSopenharmony_ci
59119625d8cSopenharmony_ci#[test]
59219625d8cSopenharmony_cifn short_eq_val_starts_with_eq() {
59319625d8cSopenharmony_ci    let matches = Command::new("cmd")
59419625d8cSopenharmony_ci        .arg(arg!(opt: -f <opt>).required(true))
59519625d8cSopenharmony_ci        .try_get_matches_from(["test", "-f==value"])
59619625d8cSopenharmony_ci        .unwrap();
59719625d8cSopenharmony_ci
59819625d8cSopenharmony_ci    assert_eq!(
59919625d8cSopenharmony_ci        "=value",
60019625d8cSopenharmony_ci        matches
60119625d8cSopenharmony_ci            .get_one::<String>("opt")
60219625d8cSopenharmony_ci            .map(|v| v.as_str())
60319625d8cSopenharmony_ci            .unwrap()
60419625d8cSopenharmony_ci    );
60519625d8cSopenharmony_ci}
60619625d8cSopenharmony_ci
60719625d8cSopenharmony_ci#[test]
60819625d8cSopenharmony_cifn long_eq_val_starts_with_eq() {
60919625d8cSopenharmony_ci    let matches = Command::new("cmd")
61019625d8cSopenharmony_ci        .arg(arg!(opt: --foo <opt>).required(true))
61119625d8cSopenharmony_ci        .try_get_matches_from(["test", "--foo==value"])
61219625d8cSopenharmony_ci        .unwrap();
61319625d8cSopenharmony_ci
61419625d8cSopenharmony_ci    assert_eq!(
61519625d8cSopenharmony_ci        "=value",
61619625d8cSopenharmony_ci        matches
61719625d8cSopenharmony_ci            .get_one::<String>("opt")
61819625d8cSopenharmony_ci            .map(|v| v.as_str())
61919625d8cSopenharmony_ci            .unwrap()
62019625d8cSopenharmony_ci    );
62119625d8cSopenharmony_ci}
62219625d8cSopenharmony_ci
62319625d8cSopenharmony_ci#[test]
62419625d8cSopenharmony_cifn issue_2022_get_flags_misuse() {
62519625d8cSopenharmony_ci    let cmd = Command::new("test")
62619625d8cSopenharmony_ci        .next_help_heading(Some("test"))
62719625d8cSopenharmony_ci        .arg(Arg::new("a").long("a").default_value("32"));
62819625d8cSopenharmony_ci    let matches = cmd.try_get_matches_from([""]).unwrap();
62919625d8cSopenharmony_ci    assert!(matches.get_one::<String>("a").map(|v| v.as_str()).is_some())
63019625d8cSopenharmony_ci}
63119625d8cSopenharmony_ci
63219625d8cSopenharmony_ci#[test]
63319625d8cSopenharmony_cifn issue_2279() {
63419625d8cSopenharmony_ci    let before_help_heading = Command::new("cmd")
63519625d8cSopenharmony_ci        .arg(Arg::new("foo").short('f').default_value("bar"))
63619625d8cSopenharmony_ci        .next_help_heading(Some("This causes default_value to be ignored"))
63719625d8cSopenharmony_ci        .try_get_matches_from([""])
63819625d8cSopenharmony_ci        .unwrap();
63919625d8cSopenharmony_ci
64019625d8cSopenharmony_ci    assert_eq!(
64119625d8cSopenharmony_ci        before_help_heading
64219625d8cSopenharmony_ci            .get_one::<String>("foo")
64319625d8cSopenharmony_ci            .map(|v| v.as_str()),
64419625d8cSopenharmony_ci        Some("bar")
64519625d8cSopenharmony_ci    );
64619625d8cSopenharmony_ci
64719625d8cSopenharmony_ci    let after_help_heading = Command::new("cmd")
64819625d8cSopenharmony_ci        .next_help_heading(Some("This causes default_value to be ignored"))
64919625d8cSopenharmony_ci        .arg(Arg::new("foo").short('f').default_value("bar"))
65019625d8cSopenharmony_ci        .try_get_matches_from([""])
65119625d8cSopenharmony_ci        .unwrap();
65219625d8cSopenharmony_ci
65319625d8cSopenharmony_ci    assert_eq!(
65419625d8cSopenharmony_ci        after_help_heading
65519625d8cSopenharmony_ci            .get_one::<String>("foo")
65619625d8cSopenharmony_ci            .map(|v| v.as_str()),
65719625d8cSopenharmony_ci        Some("bar")
65819625d8cSopenharmony_ci    );
65919625d8cSopenharmony_ci}
66019625d8cSopenharmony_ci
66119625d8cSopenharmony_ci#[test]
66219625d8cSopenharmony_cifn infer_long_arg() {
66319625d8cSopenharmony_ci    let cmd = Command::new("test")
66419625d8cSopenharmony_ci        .infer_long_args(true)
66519625d8cSopenharmony_ci        .arg(
66619625d8cSopenharmony_ci            Arg::new("racetrack")
66719625d8cSopenharmony_ci                .long("racetrack")
66819625d8cSopenharmony_ci                .alias("autobahn")
66919625d8cSopenharmony_ci                .action(ArgAction::SetTrue),
67019625d8cSopenharmony_ci        )
67119625d8cSopenharmony_ci        .arg(Arg::new("racecar").long("racecar").action(ArgAction::Set));
67219625d8cSopenharmony_ci
67319625d8cSopenharmony_ci    let matches = cmd
67419625d8cSopenharmony_ci        .clone()
67519625d8cSopenharmony_ci        .try_get_matches_from(["test", "--racec=hello"])
67619625d8cSopenharmony_ci        .unwrap();
67719625d8cSopenharmony_ci    assert!(!*matches
67819625d8cSopenharmony_ci        .get_one::<bool>("racetrack")
67919625d8cSopenharmony_ci        .expect("defaulted by clap"));
68019625d8cSopenharmony_ci    assert_eq!(
68119625d8cSopenharmony_ci        matches.get_one::<String>("racecar").map(|v| v.as_str()),
68219625d8cSopenharmony_ci        Some("hello")
68319625d8cSopenharmony_ci    );
68419625d8cSopenharmony_ci
68519625d8cSopenharmony_ci    let matches = cmd
68619625d8cSopenharmony_ci        .clone()
68719625d8cSopenharmony_ci        .try_get_matches_from(["test", "--racet"])
68819625d8cSopenharmony_ci        .unwrap();
68919625d8cSopenharmony_ci    assert!(*matches
69019625d8cSopenharmony_ci        .get_one::<bool>("racetrack")
69119625d8cSopenharmony_ci        .expect("defaulted by clap"));
69219625d8cSopenharmony_ci    assert_eq!(
69319625d8cSopenharmony_ci        matches.get_one::<String>("racecar").map(|v| v.as_str()),
69419625d8cSopenharmony_ci        None
69519625d8cSopenharmony_ci    );
69619625d8cSopenharmony_ci
69719625d8cSopenharmony_ci    let matches = cmd
69819625d8cSopenharmony_ci        .clone()
69919625d8cSopenharmony_ci        .try_get_matches_from(["test", "--auto"])
70019625d8cSopenharmony_ci        .unwrap();
70119625d8cSopenharmony_ci    assert!(*matches
70219625d8cSopenharmony_ci        .get_one::<bool>("racetrack")
70319625d8cSopenharmony_ci        .expect("defaulted by clap"));
70419625d8cSopenharmony_ci    assert_eq!(
70519625d8cSopenharmony_ci        matches.get_one::<String>("racecar").map(|v| v.as_str()),
70619625d8cSopenharmony_ci        None
70719625d8cSopenharmony_ci    );
70819625d8cSopenharmony_ci
70919625d8cSopenharmony_ci    let cmd = Command::new("test")
71019625d8cSopenharmony_ci        .infer_long_args(true)
71119625d8cSopenharmony_ci        .arg(Arg::new("arg").long("arg").action(ArgAction::SetTrue));
71219625d8cSopenharmony_ci
71319625d8cSopenharmony_ci    let matches = cmd.clone().try_get_matches_from(["test", "--"]).unwrap();
71419625d8cSopenharmony_ci    assert!(!*matches.get_one::<bool>("arg").expect("defaulted by clap"));
71519625d8cSopenharmony_ci
71619625d8cSopenharmony_ci    let matches = cmd.clone().try_get_matches_from(["test", "--a"]).unwrap();
71719625d8cSopenharmony_ci    assert!(*matches.get_one::<bool>("arg").expect("defaulted by clap"));
71819625d8cSopenharmony_ci}
719