fix(ArgGroup) added asserts to help users to configure clap properly

Also I've added tests for this change
This commit is contained in:
Alexander Kuvaev 2015-09-21 22:23:28 +03:00
parent 5b7a4a03bb
commit a87c5cd660
3 changed files with 36 additions and 1 deletions

View file

@ -1330,6 +1330,7 @@ impl<'a, 'v, 'ab, 'u, 'h, 'ar> App<'a, 'v, 'ab, 'u, 'h, 'ar>{
}
}
}
assert!(args.len() > 0, "ArgGroup '{}' doesn't contain any args", group);
args.dedup();
args.iter().map(ToOwned::to_owned).collect()
}
@ -1362,6 +1363,7 @@ impl<'a, 'v, 'ab, 'u, 'h, 'ar> App<'a, 'v, 'ab, 'u, 'h, 'ar>{
}
}
}
assert!(args.len() > 0, "ArgGroup '{}' doesn't contain any args", group);
args.dedup();
args.iter().map(|s| *s).collect()
}

View file

@ -143,6 +143,7 @@ impl<'n, 'ar> ArgGroup<'n, 'ar> {
pub fn add(mut self,
n: &'ar str)
-> Self {
assert!(self.name != n, "ArgGroup '{}' can not have same name as arg inside it", self.name);
self.args.push(n);
self
}

View file

@ -1,6 +1,6 @@
use std::collections::HashSet;
use super::{App, Arg, SubCommand};
use super::{App, Arg, ArgGroup, SubCommand};
use std::vec::Vec;
arg_enum!{
@ -909,3 +909,35 @@ fn create_multiple_subcommands() {
.arg(Arg::with_name("other").long("other"))
.get_matches();
}
#[test]
#[should_panic]
fn empty_group() {
let _ = App::new("empty_group")
.arg(Arg::from_usage("-f, --flag 'some flag'"))
.arg_group(ArgGroup::with_name("vers")
.required(true))
.get_matches();
}
#[test]
#[should_panic]
fn empty_group_2() {
let _ = App::new("empty_group")
.arg(Arg::from_usage("-f, --flag 'some flag'"))
.arg_group(ArgGroup::with_name("vers")
.required(true)
.add_all(&["ver", "major"]))
.get_matches();
}
#[test]
#[should_panic]
fn errous_group() {
let _ = App::new("errous_group")
.arg(Arg::from_usage("-f, --flag 'some flag'"))
.arg_group(ArgGroup::with_name("vers")
.add("vers")
.required(true))
.get_matches();
}