119625d8cSopenharmony_ciuse clap::{arg, value_parser, Command};
219625d8cSopenharmony_ci#[cfg(debug_assertions)]
319625d8cSopenharmony_ciuse clap::{Arg, ArgAction};
419625d8cSopenharmony_ci
519625d8cSopenharmony_ci#[test]
619625d8cSopenharmony_cifn ids() {
719625d8cSopenharmony_ci    let m = Command::new("test")
819625d8cSopenharmony_ci        .arg(arg!(--color <when>).value_parser(["auto", "always", "never"]))
919625d8cSopenharmony_ci        .arg(arg!(--config <path>).value_parser(value_parser!(std::path::PathBuf)))
1019625d8cSopenharmony_ci        .try_get_matches_from(["test", "--config=config.toml", "--color=auto"])
1119625d8cSopenharmony_ci        .unwrap();
1219625d8cSopenharmony_ci    assert_eq!(
1319625d8cSopenharmony_ci        m.ids().map(|id| id.as_str()).collect::<Vec<_>>(),
1419625d8cSopenharmony_ci        ["config", "color"]
1519625d8cSopenharmony_ci    );
1619625d8cSopenharmony_ci    assert_eq!(m.ids().len(), 2);
1719625d8cSopenharmony_ci}
1819625d8cSopenharmony_ci
1919625d8cSopenharmony_ci#[test]
2019625d8cSopenharmony_cifn ids_ignore_unused() {
2119625d8cSopenharmony_ci    let m = Command::new("test")
2219625d8cSopenharmony_ci        .arg(arg!(--color <when>).value_parser(["auto", "always", "never"]))
2319625d8cSopenharmony_ci        .arg(arg!(--config <path>).value_parser(value_parser!(std::path::PathBuf)))
2419625d8cSopenharmony_ci        .try_get_matches_from(["test", "--config=config.toml"])
2519625d8cSopenharmony_ci        .unwrap();
2619625d8cSopenharmony_ci    assert_eq!(
2719625d8cSopenharmony_ci        m.ids().map(|id| id.as_str()).collect::<Vec<_>>(),
2819625d8cSopenharmony_ci        ["config"]
2919625d8cSopenharmony_ci    );
3019625d8cSopenharmony_ci    assert_eq!(m.ids().len(), 1);
3119625d8cSopenharmony_ci}
3219625d8cSopenharmony_ci
3319625d8cSopenharmony_ci#[test]
3419625d8cSopenharmony_cifn ids_ignore_overridden() {
3519625d8cSopenharmony_ci    let m = Command::new("test")
3619625d8cSopenharmony_ci        .arg(arg!(--color <when>).value_parser(["auto", "always", "never"]))
3719625d8cSopenharmony_ci        .arg(
3819625d8cSopenharmony_ci            arg!(--config <path>)
3919625d8cSopenharmony_ci                .value_parser(value_parser!(std::path::PathBuf))
4019625d8cSopenharmony_ci                .overrides_with("color"),
4119625d8cSopenharmony_ci        )
4219625d8cSopenharmony_ci        .try_get_matches_from(["test", "--config=config.toml", "--color=auto"])
4319625d8cSopenharmony_ci        .unwrap();
4419625d8cSopenharmony_ci    assert_eq!(m.ids().map(|id| id.as_str()).collect::<Vec<_>>(), ["color"]);
4519625d8cSopenharmony_ci    assert_eq!(m.ids().len(), 1);
4619625d8cSopenharmony_ci}
4719625d8cSopenharmony_ci
4819625d8cSopenharmony_ci#[test]
4919625d8cSopenharmony_ci#[cfg(debug_assertions)]
5019625d8cSopenharmony_ci#[should_panic = "Unknown argument or group id.  Make sure you are using the argument id and not the short or long flags"]
5119625d8cSopenharmony_cifn arg_matches_if_present_wrong_arg() {
5219625d8cSopenharmony_ci    let m = Command::new("test")
5319625d8cSopenharmony_ci        .arg(Arg::new("flag").short('f').action(ArgAction::SetTrue))
5419625d8cSopenharmony_ci        .try_get_matches_from(["test", "-f"])
5519625d8cSopenharmony_ci        .unwrap();
5619625d8cSopenharmony_ci
5719625d8cSopenharmony_ci    assert!(*m.get_one::<bool>("flag").expect("defaulted by clap"));
5819625d8cSopenharmony_ci    m.contains_id("f");
5919625d8cSopenharmony_ci}
6019625d8cSopenharmony_ci
6119625d8cSopenharmony_ci#[test]
6219625d8cSopenharmony_ci#[cfg(debug_assertions)]
6319625d8cSopenharmony_ci#[should_panic = "Mismatch between definition and access of `o`. Unknown argument or group id.  Make sure you are using the argument id and not the short or long flags"]
6419625d8cSopenharmony_cifn arg_matches_value_of_wrong_arg() {
6519625d8cSopenharmony_ci    let m = Command::new("test")
6619625d8cSopenharmony_ci        .arg(Arg::new("opt").short('o').action(ArgAction::Set))
6719625d8cSopenharmony_ci        .try_get_matches_from(["test", "-o", "val"])
6819625d8cSopenharmony_ci        .unwrap();
6919625d8cSopenharmony_ci
7019625d8cSopenharmony_ci    assert_eq!(m.get_one::<String>("opt").map(|v| v.as_str()), Some("val"));
7119625d8cSopenharmony_ci    m.get_one::<String>("o").map(|v| v.as_str());
7219625d8cSopenharmony_ci}
7319625d8cSopenharmony_ci
7419625d8cSopenharmony_ci#[test]
7519625d8cSopenharmony_ci#[cfg(debug_assertions)]
7619625d8cSopenharmony_ci#[should_panic = "`seed` is not a name of a subcommand."]
7719625d8cSopenharmony_cifn arg_matches_subcommand_matches_wrong_sub() {
7819625d8cSopenharmony_ci    let m = Command::new("test")
7919625d8cSopenharmony_ci        .subcommand(Command::new("speed"))
8019625d8cSopenharmony_ci        .try_get_matches_from(["test", "speed"])
8119625d8cSopenharmony_ci        .unwrap();
8219625d8cSopenharmony_ci
8319625d8cSopenharmony_ci    assert!(m.subcommand_matches("speed").is_some());
8419625d8cSopenharmony_ci    m.subcommand_matches("seed");
8519625d8cSopenharmony_ci}
86