mirror of
https://github.com/clap-rs/clap
synced 2024-12-14 06:42:33 +00:00
Fixes arg conflicting with group whose arg has default value
This commit is contained in:
parent
8c76556ac4
commit
64a2866b09
2 changed files with 23 additions and 4 deletions
|
@ -283,10 +283,11 @@ impl<'help, 'app, 'parser> Validator<'help, 'app, 'parser> {
|
|||
};
|
||||
let conf_with_arg = || g.conflicts.iter().any(|x| !matcher.is_default_value(x));
|
||||
let arg_conf_with_gr = || {
|
||||
matcher
|
||||
.arg_names()
|
||||
.filter_map(|x| self.p.app.find(x))
|
||||
.any(|x| x.blacklist.iter().any(|c| *c == g.id))
|
||||
!matcher.is_default_value(&g.id)
|
||||
&& matcher
|
||||
.arg_names()
|
||||
.filter_map(|x| self.p.app.find(x))
|
||||
.any(|x| x.blacklist.iter().any(|c| *c == g.id))
|
||||
};
|
||||
conf_with_self() || conf_with_arg() || arg_conf_with_gr()
|
||||
} else if let Some(ma) = matcher.get(name) {
|
||||
|
|
|
@ -267,6 +267,24 @@ fn conflicts_with_alongside_default() {
|
|||
assert!(m.is_present("flag"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn group_in_conflicts_with() {
|
||||
let result = App::new("conflict")
|
||||
.arg(
|
||||
Arg::new("opt")
|
||||
.long("opt")
|
||||
.default_value("default")
|
||||
.group("one"),
|
||||
)
|
||||
.arg(Arg::new("flag").long("flag").conflicts_with("one"))
|
||||
.try_get_matches_from(vec!["myprog", "--flag"]);
|
||||
|
||||
assert!(result.is_ok(), "{:?}", result.unwrap());
|
||||
let m = result.unwrap();
|
||||
|
||||
assert_eq!(m.value_of("opt"), Some("default"));
|
||||
assert!(m.is_present("flag"));
|
||||
}
|
||||
#[test]
|
||||
fn group_conflicts_with_default_arg() {
|
||||
let result = App::new("conflict")
|
||||
|
|
Loading…
Reference in a new issue