clap/tests/builder/arg_aliases.rs

257 lines
7.4 KiB
Rust
Raw Normal View History

use super::utils;
use clap::{arg, Arg, ArgAction, Command};
#[test]
fn single_alias_of_option() {
2022-02-12 03:48:29 +00:00
let a = Command::new("single_alias")
2018-01-25 04:05:05 +00:00
.arg(
Arg::new("alias")
2018-01-25 04:05:05 +00:00
.long("alias")
.action(ArgAction::Set)
.help("single alias")
2018-01-25 04:05:05 +00:00
.alias("new-opt"),
)
.try_get_matches_from(vec!["", "--new-opt", "cool"]);
2021-12-27 19:57:38 +00:00
assert!(a.is_ok(), "{}", a.unwrap_err());
let a = a.unwrap();
assert!(a.contains_id("alias"));
assert_eq!(
a.get_one::<String>("alias").map(|v| v.as_str()).unwrap(),
"cool"
);
}
#[test]
fn multiple_aliases_of_option() {
2022-02-12 03:48:29 +00:00
let a = Command::new("multiple_aliases").arg(
Arg::new("aliases")
.long("aliases")
.action(ArgAction::Set)
.help("multiple aliases")
.aliases(["alias1", "alias2", "alias3"]),
2018-01-25 04:05:05 +00:00
);
2018-08-02 03:13:51 +00:00
let long = a
.clone()
.try_get_matches_from(vec!["", "--aliases", "value"]);
2021-12-27 19:57:38 +00:00
assert!(long.is_ok(), "{}", long.unwrap_err());
let long = long.unwrap();
2018-08-02 03:13:51 +00:00
let als1 = a
.clone()
.try_get_matches_from(vec!["", "--alias1", "value"]);
2021-12-27 19:57:38 +00:00
assert!(als1.is_ok(), "{}", als1.unwrap_err());
let als1 = als1.unwrap();
2018-08-02 03:13:51 +00:00
let als2 = a
.clone()
.try_get_matches_from(vec!["", "--alias2", "value"]);
2021-12-27 19:57:38 +00:00
assert!(als2.is_ok(), "{}", als2.unwrap_err());
let als2 = als2.unwrap();
2018-08-02 03:13:51 +00:00
let als3 = a
.clone()
.try_get_matches_from(vec!["", "--alias3", "value"]);
2021-12-27 19:57:38 +00:00
assert!(als3.is_ok(), "{}", als3.unwrap_err());
let als3 = als3.unwrap();
assert!(long.contains_id("aliases"));
assert!(als1.contains_id("aliases"));
assert!(als2.contains_id("aliases"));
assert!(als3.contains_id("aliases"));
assert_eq!(
long.get_one::<String>("aliases")
.map(|v| v.as_str())
.unwrap(),
"value"
);
assert_eq!(
als1.get_one::<String>("aliases")
.map(|v| v.as_str())
.unwrap(),
"value"
);
assert_eq!(
als2.get_one::<String>("aliases")
.map(|v| v.as_str())
.unwrap(),
"value"
);
assert_eq!(
als3.get_one::<String>("aliases")
.map(|v| v.as_str())
.unwrap(),
"value"
);
}
#[test]
fn get_aliases() {
let a = Arg::new("aliases")
.long("aliases")
.action(ArgAction::Set)
.help("multiple aliases")
.aliases(["alias1", "alias2", "alias3"])
.short_aliases(['a', 'b', 'c'])
.visible_aliases(["alias4", "alias5", "alias6"])
.visible_short_aliases(['d', 'e', 'f']);
assert!(a.get_short_and_visible_aliases().is_none());
assert_eq!(
a.get_long_and_visible_aliases().unwrap(),
2022-11-24 13:54:25 +00:00
["aliases", "alias4", "alias5", "alias6"]
);
assert_eq!(
a.get_visible_aliases().unwrap(),
2022-11-24 13:54:25 +00:00
["alias4", "alias5", "alias6"]
);
assert_eq!(
a.get_all_aliases().unwrap(),
2022-11-24 13:54:25 +00:00
["alias1", "alias2", "alias3", "alias4", "alias5", "alias6"]
);
assert_eq!(a.get_visible_short_aliases().unwrap(), vec!['d', 'e', 'f']);
assert_eq!(
a.get_all_short_aliases().unwrap(),
vec!['a', 'b', 'c', 'd', 'e', 'f']
);
}
#[test]
fn single_alias_of_flag() {
2022-02-12 03:48:29 +00:00
let a = Command::new("test")
.arg(
Arg::new("flag")
.long("flag")
.alias("alias")
.action(ArgAction::SetTrue),
)
.try_get_matches_from(vec!["", "--alias"]);
2021-12-27 19:57:38 +00:00
assert!(a.is_ok(), "{}", a.unwrap_err());
let a = a.unwrap();
assert!(*a.get_one::<bool>("flag").expect("defaulted by clap"));
}
#[test]
fn multiple_aliases_of_flag() {
let a = Command::new("test").arg(
Arg::new("flag")
.long("flag")
.aliases(["invisible", "set", "of", "cool", "aliases"])
.action(ArgAction::SetTrue),
);
let flag = a.clone().try_get_matches_from(vec!["", "--flag"]);
2021-12-27 19:57:38 +00:00
assert!(flag.is_ok(), "{}", flag.unwrap_err());
let flag = flag.unwrap();
let inv = a.clone().try_get_matches_from(vec!["", "--invisible"]);
2021-12-27 19:57:38 +00:00
assert!(inv.is_ok(), "{}", inv.unwrap_err());
let inv = inv.unwrap();
let cool = a.clone().try_get_matches_from(vec!["", "--cool"]);
2021-12-27 19:57:38 +00:00
assert!(cool.is_ok(), "{}", cool.unwrap_err());
let cool = cool.unwrap();
let als = a.clone().try_get_matches_from(vec!["", "--aliases"]);
2021-12-27 19:57:38 +00:00
assert!(als.is_ok(), "{}", als.unwrap_err());
let als = als.unwrap();
assert!(*flag.get_one::<bool>("flag").expect("defaulted by clap"));
assert!(*inv.get_one::<bool>("flag").expect("defaulted by clap"));
assert!(*cool.get_one::<bool>("flag").expect("defaulted by clap"));
assert!(*als.get_one::<bool>("flag").expect("defaulted by clap"));
}
#[test]
fn alias_on_a_subcommand_option() {
2022-02-12 03:48:29 +00:00
let m = Command::new("test")
2018-01-25 04:05:05 +00:00
.subcommand(
2022-02-12 03:48:29 +00:00
Command::new("some").arg(
Arg::new("test")
.short('t')
2018-01-25 04:05:05 +00:00
.long("test")
.action(ArgAction::Set)
2018-01-25 04:05:05 +00:00
.alias("opt")
.help("testing testing"),
2018-01-25 04:05:05 +00:00
),
)
.arg(Arg::new("other").long("other").aliases(["o1", "o2", "o3"]))
.try_get_matches_from(vec!["test", "some", "--opt", "awesome"])
.unwrap();
assert!(m.subcommand_matches("some").is_some());
let sub_m = m.subcommand_matches("some").unwrap();
assert!(sub_m.contains_id("test"));
assert_eq!(
sub_m.get_one::<String>("test").map(|v| v.as_str()).unwrap(),
"awesome"
);
}
#[test]
fn invisible_arg_aliases_help_output() {
static SC_INVISIBLE_ALIAS_HELP: &str = "\
Some help
Usage: ct test [OPTIONS]
Options:
-o, --opt <opt>
-f, --flag
-h, --help Print help information
-V, --version Print version information
";
2022-02-14 21:47:20 +00:00
let cmd = Command::new("ct").author("Salim Afiune").subcommand(
2022-02-12 03:48:29 +00:00
Command::new("test")
.about("Some help")
.version("1.2")
2018-01-25 04:05:05 +00:00
.arg(
Arg::new("opt")
2018-01-25 04:05:05 +00:00
.long("opt")
.short('o')
.action(ArgAction::Set)
.aliases(["invisible", "als1", "more"]),
2018-01-25 04:05:05 +00:00
)
.arg(arg!(-f - -flag).aliases(["unseeable", "flg1", "anyway"])),
2018-01-25 04:05:05 +00:00
);
2022-04-29 20:32:25 +00:00
utils::assert_output(cmd, "ct test --help", SC_INVISIBLE_ALIAS_HELP, false);
}
#[test]
fn visible_arg_aliases_help_output() {
static SC_VISIBLE_ALIAS_HELP: &str = "\
Some help
Usage: ct test [OPTIONS]
Options:
-o, --opt <opt> [aliases: visible]
-f, --flag [aliases: v_flg, flag2, flg3]
-h, --help Print help information
-V, --version Print version information
";
2022-02-14 21:47:20 +00:00
let cmd = Command::new("ct").author("Salim Afiune").subcommand(
2022-02-12 03:48:29 +00:00
Command::new("test")
.about("Some help")
.version("1.2")
2018-01-25 04:05:05 +00:00
.arg(
Arg::new("opt")
2018-01-25 04:05:05 +00:00
.long("opt")
.short('o')
.action(ArgAction::Set)
2018-01-25 04:05:05 +00:00
.alias("invisible")
.visible_alias("visible"),
)
.arg(
Arg::new("flg")
2018-01-25 04:05:05 +00:00
.long("flag")
.short('f')
.action(ArgAction::SetTrue)
.visible_aliases(["v_flg", "flag2", "flg3"]),
2018-01-25 04:05:05 +00:00
),
);
2022-04-29 20:32:25 +00:00
utils::assert_output(cmd, "ct test --help", SC_VISIBLE_ALIAS_HELP, false);
}