From d145b8b166ce0d7ac1c49cda2138d2b5c862e6ea Mon Sep 17 00:00:00 2001 From: Ed Page Date: Thu, 22 Dec 2022 13:08:02 -0600 Subject: [PATCH] test(parser): Demonstrate required-overload bug --- tests/builder/conflicts.rs | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/tests/builder/conflicts.rs b/tests/builder/conflicts.rs index 1644b86f37f..7c898f005af 100644 --- a/tests/builder/conflicts.rs +++ b/tests/builder/conflicts.rs @@ -235,6 +235,33 @@ fn arg_conflicts_with_required_group() { } } +#[test] +fn arg_conflicts_with_group_with_required_memeber() { + let mut cmd = Command::new("group_conflict") + .arg(arg!(-f --flag "some flag").conflicts_with("gr")) + .group(ArgGroup::new("gr").arg("some").arg("other")) + .arg(arg!(--some "some arg").required(true)) + .arg(arg!(--other "other arg")); + + let result = cmd.try_get_matches_from_mut(vec!["myprog", "--other", "-f"]); + assert!(result.is_err()); + let err = result.err().unwrap(); + assert_eq!(err.kind(), ErrorKind::ArgumentConflict); + + let result = cmd.try_get_matches_from_mut(vec!["myprog", "-f", "--some"]); + assert!(result.is_err()); + let err = result.err().unwrap(); + assert_eq!(err.kind(), ErrorKind::ArgumentConflict); + + let result = cmd.try_get_matches_from_mut(vec!["myprog", "--some"]); + if let Err(err) = result { + panic!("{}", err); + } + + let result = cmd.try_get_matches_from_mut(vec!["myprog", "--flag"]); + assert!(result.is_err()); +} + #[test] fn required_group_conflicts_with_arg() { let mut cmd = Command::new("group_conflict")