diff options
Diffstat (limited to 'clap/tests/conflicts.rs')
-rw-r--r-- | clap/tests/conflicts.rs | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/clap/tests/conflicts.rs b/clap/tests/conflicts.rs new file mode 100644 index 0000000..72a9e05 --- /dev/null +++ b/clap/tests/conflicts.rs @@ -0,0 +1,102 @@ +extern crate clap; +extern crate regex; + +include!("../clap-test.rs"); + +use clap::{App, Arg, ErrorKind, ArgGroup}; + +static CONFLICT_ERR: &'static str = "error: The argument '-F' cannot be used with '--flag' + +USAGE: + clap-test <positional> <positional2> --flag --long-option-2 <option2> + +For more information try --help"; + +static CONFLICT_ERR_REV: &'static str = "error: The argument '--flag' cannot be used with '-F' + +USAGE: + clap-test <positional> <positional2> -F --long-option-2 <option2> + +For more information try --help"; + +#[test] +fn flag_conflict() { + let result = App::new("flag_conflict") + .arg(Arg::from_usage("-f, --flag 'some flag'") + .conflicts_with("other")) + .arg(Arg::from_usage("-o, --other 'some flag'")) + .get_matches_from_safe(vec!["myprog", "-f", "-o"]); + assert!(result.is_err()); + let err = result.err().unwrap(); + assert_eq!(err.kind, ErrorKind::ArgumentConflict); +} + +#[test] +fn flag_conflict_2() { + let result = App::new("flag_conflict") + .arg(Arg::from_usage("-f, --flag 'some flag'") + .conflicts_with("other")) + .arg(Arg::from_usage("-o, --other 'some flag'")) + .get_matches_from_safe(vec!["myprog", "-o", "-f"]); + assert!(result.is_err()); + let err = result.err().unwrap(); + assert_eq!(err.kind, ErrorKind::ArgumentConflict); +} + +#[test] +fn group_conflict() { + let result = App::new("group_conflict") + .arg(Arg::from_usage("-f, --flag 'some flag'") + .conflicts_with("gr")) + .group(ArgGroup::with_name("gr") + .required(true) + .arg("some") + .arg("other")) + .arg(Arg::from_usage("--some 'some arg'")) + .arg(Arg::from_usage("--other 'other arg'")) + .get_matches_from_safe(vec!["myprog", "--other", "-f"]); + assert!(result.is_err()); + let err = result.err().unwrap(); + assert_eq!(err.kind, ErrorKind::ArgumentConflict); +} + +#[test] +fn group_conflict_2() { + let result = App::new("group_conflict") + .arg(Arg::from_usage("-f, --flag 'some flag'") + .conflicts_with("gr")) + .group(ArgGroup::with_name("gr") + .required(true) + .arg("some") + .arg("other")) + .arg(Arg::from_usage("--some 'some arg'")) + .arg(Arg::from_usage("--other 'other arg'")) + .get_matches_from_safe(vec!["myprog", "-f", "--some"]); + assert!(result.is_err()); + let err = result.err().unwrap(); + assert_eq!(err.kind, ErrorKind::ArgumentConflict); +} + +#[test] +fn conflict_output() { + test::compare_output(test::complex_app(), "clap-test val1 --flag --long-option-2 val2 -F", CONFLICT_ERR, true); +} + +#[test] +fn conflict_output_rev() { + test::compare_output(test::complex_app(), "clap-test val1 -F --long-option-2 val2 --flag", CONFLICT_ERR_REV, true); +} + +#[test] +fn conflict_with_unused_default_value() { + let result = App::new("conflict") + .arg(Arg::from_usage("-o, --opt=[opt] 'some opt'") + .default_value("default")) + .arg(Arg::from_usage("-f, --flag 'some flag'") + .conflicts_with("opt")) + .get_matches_from_safe(vec!["myprog", "-f"]); + assert!(result.is_ok()); + let m = result.unwrap(); + assert_eq!(m.value_of("opt"), Some("default")); + assert!(m.is_present("flag")); +} |