tests: adds tests for required_unless settings
diff --git a/tests/require.rs b/tests/require.rs
index 7bf5a9f..b01d64e 100644
--- a/tests/require.rs
+++ b/tests/require.rs
@@ -168,3 +168,130 @@
assert!(m.is_present("other"));
assert!(m.is_present("flag"));
}
+
+// REQUIRED_UNLESS
+
+#[test]
+fn required_unless() {
+ let res = App::new("unlesstest")
+ .arg(Arg::with_name("cfg")
+ .required_unless("dbg")
+ .takes_value(true)
+ .long("config"))
+ .arg(Arg::with_name("dbg")
+ .long("debug"))
+ .get_matches_from_safe(vec![
+ "unlesstest", "--debug"
+ ]);
+
+ assert!(res.is_ok());
+ let m = res.unwrap();
+ assert!(m.is_present("dbg"));
+ assert!(!m.is_present("cfg"));
+}
+
+#[test]
+fn required_unless_err() {
+ let res = App::new("unlesstest")
+ .arg(Arg::with_name("cfg")
+ .required_unless("dbg")
+ .takes_value(true)
+ .long("config"))
+ .arg(Arg::with_name("dbg")
+ .long("debug"))
+ .get_matches_from_safe(vec![
+ "unlesstest"
+ ]);
+
+ assert!(res.is_err());
+ assert_eq!(res.unwrap_err().kind, ErrorKind::MissingRequiredArgument);
+}
+
+// REQUIRED_UNLESS_ALL
+
+#[test]
+fn required_unless_all() {
+ let res = App::new("unlessall")
+ .arg(Arg::with_name("cfg")
+ .required_unless_all(&["dbg", "infile"])
+ .takes_value(true)
+ .long("config"))
+ .arg(Arg::with_name("dbg")
+ .long("debug"))
+ .arg(Arg::with_name("infile")
+ .short("i")
+ .takes_value(true))
+ .get_matches_from_safe(vec![
+ "unlessall", "--debug", "-i", "file"
+ ]);
+
+ assert!(res.is_ok());
+ let m = res.unwrap();
+ assert!(m.is_present("dbg"));
+ assert!(m.is_present("infile"));
+ assert!(!m.is_present("cfg"));
+}
+
+#[test]
+fn required_unless_all_err() {
+ let res = App::new("unlessall")
+ .arg(Arg::with_name("cfg")
+ .required_unless_all(&["dbg", "infile"])
+ .takes_value(true)
+ .long("config"))
+ .arg(Arg::with_name("dbg")
+ .long("debug"))
+ .arg(Arg::with_name("infile")
+ .short("i")
+ .takes_value(true))
+ .get_matches_from_safe(vec![
+ "unlessall", "--debug"
+ ]);
+
+ assert!(res.is_err());
+ assert_eq!(res.unwrap_err().kind, ErrorKind::MissingRequiredArgument);
+}
+
+// REQUIRED_UNLESS_ONE
+
+#[test]
+fn required_unless_one() {
+ let res = App::new("unlessone")
+ .arg(Arg::with_name("cfg")
+ .required_unless_one(&["dbg", "infile"])
+ .takes_value(true)
+ .long("config"))
+ .arg(Arg::with_name("dbg")
+ .long("debug"))
+ .arg(Arg::with_name("infile")
+ .short("i")
+ .takes_value(true))
+ .get_matches_from_safe(vec![
+ "unlessone", "--debug"
+ ]);
+
+ assert!(res.is_ok());
+ let m = res.unwrap();
+ assert!(m.is_present("dbg"));
+ assert!(!m.is_present("cfg"));
+}
+
+#[test]
+fn required_unless_one_err() {
+ let res = App::new("unlessone")
+ .arg(Arg::with_name("cfg")
+ .required_unless_one(&["dbg", "infile"])
+ .takes_value(true)
+ .long("config"))
+ .arg(Arg::with_name("dbg")
+ .long("debug"))
+ .arg(Arg::with_name("infile")
+ .short("i")
+ .takes_value(true))
+ .get_matches_from_safe(vec![
+ "unlessone"
+ ]);
+
+ assert!(res.is_err());
+ assert_eq!(res.unwrap_err().kind, ErrorKind::MissingRequiredArgument);
+}