mirror of
https://github.com/clap-rs/clap
synced 2024-12-14 23:02:31 +00:00
Added tests and fixed display of conflicted flags
This commit is contained in:
parent
444bce2471
commit
c34a0fdae9
2 changed files with 54 additions and 2 deletions
|
@ -170,14 +170,14 @@ impl<'b, 'c, 'z> Validator<'b, 'c, 'z> {
|
||||||
fn build_conflict_err(&self, name: Id, matcher: &ArgMatcher) -> ClapResult<()> {
|
fn build_conflict_err(&self, name: Id, matcher: &ArgMatcher) -> ClapResult<()> {
|
||||||
debugln!("build_err!: name={}", name);
|
debugln!("build_err!: name={}", name);
|
||||||
let usg = Usage::new(self.p).create_usage_with_title(&[]);
|
let usg = Usage::new(self.p).create_usage_with_title(&[]);
|
||||||
if self.p.app.find(name).is_some() {
|
if let Some(other_arg) = self.p.app.find(name) {
|
||||||
for &k in matcher.arg_names() {
|
for &k in matcher.arg_names() {
|
||||||
if let Some(a) = self.p.app.find(k) {
|
if let Some(a) = self.p.app.find(k) {
|
||||||
if let Some(ref v) = a.blacklist {
|
if let Some(ref v) = a.blacklist {
|
||||||
if v.contains(&name) {
|
if v.contains(&name) {
|
||||||
return Err(Error::argument_conflict(
|
return Err(Error::argument_conflict(
|
||||||
a,
|
a,
|
||||||
Some(name.to_string()),
|
Some(other_arg.to_string()),
|
||||||
&*usg,
|
&*usg,
|
||||||
self.p.app.color(),
|
self.p.app.color(),
|
||||||
));
|
));
|
||||||
|
|
52
tests/arg_conflicts.rs
Normal file
52
tests/arg_conflicts.rs
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
use clap::{App, Arg};
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn two_conflicting_arguments() {
|
||||||
|
let a = App::new("two_conflicting_arguments")
|
||||||
|
.arg(
|
||||||
|
Arg::with_name("develop")
|
||||||
|
.long("develop")
|
||||||
|
.conflicts_with("production"),
|
||||||
|
)
|
||||||
|
.arg(
|
||||||
|
Arg::with_name("production")
|
||||||
|
.long("production")
|
||||||
|
.conflicts_with("develop"),
|
||||||
|
)
|
||||||
|
.try_get_matches_from(vec!["", "--develop", "--production"]);
|
||||||
|
|
||||||
|
assert!(a.is_err());
|
||||||
|
let a = a.unwrap_err();
|
||||||
|
assert_eq!(
|
||||||
|
a.cause,
|
||||||
|
"The argument \'--develop\' cannot be used with \'--production\'"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn three_conflicting_arguments() {
|
||||||
|
let a = App::new("two_conflicting_arguments")
|
||||||
|
.arg(
|
||||||
|
Arg::with_name("one")
|
||||||
|
.long("one")
|
||||||
|
.conflicts_with_all(&["two", "three"]),
|
||||||
|
)
|
||||||
|
.arg(
|
||||||
|
Arg::with_name("two")
|
||||||
|
.long("two")
|
||||||
|
.conflicts_with_all(&["one", "three"]),
|
||||||
|
)
|
||||||
|
.arg(
|
||||||
|
Arg::with_name("three")
|
||||||
|
.long("three")
|
||||||
|
.conflicts_with_all(&["one", "two"]),
|
||||||
|
)
|
||||||
|
.try_get_matches_from(vec!["", "--one", "--two", "--three"]);
|
||||||
|
|
||||||
|
assert!(a.is_err());
|
||||||
|
let a = a.unwrap_err();
|
||||||
|
assert_eq!(
|
||||||
|
a.cause,
|
||||||
|
"The argument \'--one\' cannot be used with \'--two\'"
|
||||||
|
);
|
||||||
|
}
|
Loading…
Reference in a new issue