2018-01-31 20:15:01 +00:00
|
|
|
use clap::{App, Arg, ArgSettings};
|
2015-08-27 21:03:45 +00:00
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn multiple_occurrences_of_flags_long() {
|
2016-09-10 22:18:43 +00:00
|
|
|
let m = App::new("mo_flags_long")
|
2018-01-31 20:15:01 +00:00
|
|
|
.arg(
|
2018-04-21 18:59:19 +00:00
|
|
|
Arg::from("--multflag 'allowed multiple flag'")
|
2018-01-31 20:15:01 +00:00
|
|
|
.setting(ArgSettings::MultipleOccurrences),
|
|
|
|
)
|
2018-04-21 18:59:19 +00:00
|
|
|
.arg(Arg::from("--flag 'disallowed multiple flag'"))
|
2018-01-25 04:05:05 +00:00
|
|
|
.get_matches_from(vec!["", "--multflag", "--flag", "--multflag"]);
|
2015-08-27 21:03:45 +00:00
|
|
|
assert!(m.is_present("multflag"));
|
|
|
|
assert_eq!(m.occurrences_of("multflag"), 2);
|
|
|
|
assert!(m.is_present("flag"));
|
|
|
|
assert_eq!(m.occurrences_of("flag"), 1)
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn multiple_occurrences_of_flags_short() {
|
2016-09-10 22:18:43 +00:00
|
|
|
let m = App::new("mo_flags_short")
|
2018-01-31 20:15:01 +00:00
|
|
|
.arg(
|
2018-04-21 18:59:19 +00:00
|
|
|
Arg::from("-m --multflag 'allowed multiple flag'")
|
2018-01-31 20:15:01 +00:00
|
|
|
.setting(ArgSettings::MultipleOccurrences),
|
|
|
|
)
|
2018-04-21 18:59:19 +00:00
|
|
|
.arg(Arg::from("-f --flag 'disallowed multiple flag'"))
|
2018-01-25 04:05:05 +00:00
|
|
|
.get_matches_from(vec!["", "-m", "-f", "-m"]);
|
2015-08-27 21:03:45 +00:00
|
|
|
assert!(m.is_present("multflag"));
|
|
|
|
assert_eq!(m.occurrences_of("multflag"), 2);
|
|
|
|
assert!(m.is_present("flag"));
|
|
|
|
assert_eq!(m.occurrences_of("flag"), 1);
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn multiple_occurrences_of_flags_mixed() {
|
2016-09-10 22:18:43 +00:00
|
|
|
let m = App::new("mo_flags_mixed")
|
2018-01-31 20:15:01 +00:00
|
|
|
.arg(
|
2018-04-21 18:59:19 +00:00
|
|
|
Arg::from("-m, --multflag1 'allowed multiple flag'")
|
2018-01-31 20:15:01 +00:00
|
|
|
.setting(ArgSettings::MultipleOccurrences),
|
|
|
|
)
|
|
|
|
.arg(
|
2018-04-21 18:59:19 +00:00
|
|
|
Arg::from("-n, --multflag2 'another allowed multiple flag'")
|
2018-01-31 20:15:01 +00:00
|
|
|
.setting(ArgSettings::MultipleOccurrences),
|
|
|
|
)
|
2018-04-21 18:59:19 +00:00
|
|
|
.arg(Arg::from("-f, --flag 'disallowed multiple flag'"))
|
2018-01-25 04:05:05 +00:00
|
|
|
.get_matches_from(vec![
|
|
|
|
"",
|
|
|
|
"-m",
|
|
|
|
"-f",
|
|
|
|
"-n",
|
|
|
|
"--multflag1",
|
|
|
|
"-m",
|
|
|
|
"--multflag2",
|
|
|
|
]);
|
2015-08-27 21:03:45 +00:00
|
|
|
assert!(m.is_present("multflag1"));
|
|
|
|
assert_eq!(m.occurrences_of("multflag1"), 3);
|
|
|
|
assert!(m.is_present("multflag2"));
|
|
|
|
assert_eq!(m.occurrences_of("multflag2"), 2);
|
|
|
|
assert!(m.is_present("flag"));
|
|
|
|
assert_eq!(m.occurrences_of("flag"), 1);
|
2016-02-02 17:57:02 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn multiple_occurrences_of_flags_large_quantity() {
|
2018-01-25 04:05:05 +00:00
|
|
|
let args: Vec<&str> = vec![""]
|
|
|
|
.into_iter()
|
|
|
|
.chain(vec!["-m"; 1024].into_iter())
|
|
|
|
.collect();
|
2016-09-10 22:18:43 +00:00
|
|
|
let m = App::new("mo_flags_larg_qty")
|
2018-01-31 20:15:01 +00:00
|
|
|
.arg(
|
2018-04-21 18:59:19 +00:00
|
|
|
Arg::from("-m --multflag 'allowed multiple flag'")
|
2018-01-31 20:15:01 +00:00
|
|
|
.setting(ArgSettings::MultipleOccurrences),
|
|
|
|
)
|
2018-01-25 04:05:05 +00:00
|
|
|
.get_matches_from(args);
|
2016-02-02 17:57:02 +00:00
|
|
|
assert!(m.is_present("multflag"));
|
|
|
|
assert_eq!(m.occurrences_of("multflag"), 1024);
|
|
|
|
}
|
2019-12-22 17:33:23 +00:00
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn multiple_occurrences_of_before_env() {
|
|
|
|
let app = App::new("mo_before_env").arg(
|
|
|
|
Arg::with_name("verbose")
|
|
|
|
.env("VERBOSE")
|
|
|
|
.short('v')
|
|
|
|
.long("verbose")
|
|
|
|
.takes_value(false)
|
|
|
|
.multiple_occurrences(true),
|
|
|
|
);
|
|
|
|
|
|
|
|
let m = app.clone().try_get_matches_from(vec![""]);
|
|
|
|
assert!(m.is_ok(), "{}", m.unwrap_err().message);
|
|
|
|
assert_eq!(m.unwrap().occurrences_of("verbose"), 0);
|
|
|
|
|
|
|
|
let m = app.clone().try_get_matches_from(vec!["", "-v"]);
|
|
|
|
assert!(m.is_ok(), "{}", m.unwrap_err().message);
|
|
|
|
assert_eq!(m.unwrap().occurrences_of("verbose"), 1);
|
|
|
|
|
|
|
|
let m = app.clone().try_get_matches_from(vec!["", "-vv"]);
|
|
|
|
assert!(m.is_ok(), "{}", m.unwrap_err().message);
|
|
|
|
assert_eq!(m.unwrap().occurrences_of("verbose"), 2);
|
|
|
|
let m = app.clone().try_get_matches_from(vec!["", "-vvv"]);
|
|
|
|
assert!(m.is_ok(), "{}", m.unwrap_err().message);
|
|
|
|
assert_eq!(m.unwrap().occurrences_of("verbose"), 3);
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn multiple_occurrences_of_after_env() {
|
|
|
|
let app = App::new("mo_after_env").arg(
|
|
|
|
Arg::with_name("verbose")
|
|
|
|
.short('v')
|
|
|
|
.long("verbose")
|
|
|
|
.takes_value(false)
|
|
|
|
.multiple_occurrences(true)
|
|
|
|
.env("VERBOSE"),
|
|
|
|
);
|
|
|
|
|
|
|
|
let m = app.clone().try_get_matches_from(vec![""]);
|
|
|
|
assert!(m.is_ok(), "{}", m.unwrap_err().message);
|
|
|
|
assert_eq!(m.unwrap().occurrences_of("verbose"), 0);
|
|
|
|
|
|
|
|
let m = app.clone().try_get_matches_from(vec!["", "-v"]);
|
|
|
|
assert!(m.is_ok(), "{}", m.unwrap_err().message);
|
|
|
|
assert_eq!(m.unwrap().occurrences_of("verbose"), 1);
|
|
|
|
|
|
|
|
let m = app.clone().try_get_matches_from(vec!["", "-vv"]);
|
|
|
|
assert!(m.is_ok(), "{}", m.unwrap_err().message);
|
|
|
|
assert_eq!(m.unwrap().occurrences_of("verbose"), 2);
|
|
|
|
let m = app.clone().try_get_matches_from(vec!["", "-vvv"]);
|
|
|
|
assert!(m.is_ok(), "{}", m.unwrap_err().message);
|
|
|
|
assert_eq!(m.unwrap().occurrences_of("verbose"), 3);
|
|
|
|
}
|