// OptParseError
mod test_0 {
use flood_tide::err::OptParseError;
#[cfg(feature = "option_argument")]
use flood_tide::err::OptParseErrorKind;
//
#[test]
fn test_help_message() {
let err = OptParseError::help_message("[usage] foofoo --opt arg1");
let thing = format!("{}", err);
let expect = "[usage] foofoo --opt arg1";
assert_eq!(thing, expect);
}
#[test]
fn test_version_message() {
let err = OptParseError::version_message("foofoo version 0.1.0");
let thing = format!("{}", err);
let expect = "foofoo version 0.1.0";
assert_eq!(thing, expect);
}
//
#[test]
fn test_invalid_option() {
let err = OptParseError::invalid_option("--abc");
let thing = format!("{}", err);
let expect = "Invalid option: --abc";
assert_eq!(thing, expect);
}
#[test]
fn test_missing_option() {
let err = OptParseError::missing_option("--abc");
let thing = format!("{}", err);
let expect = "Missing option: --abc";
assert_eq!(thing, expect);
}
//
#[cfg(feature = "option_argument")]
#[test]
fn test_attr() {
let err = OptParseError::unexpected_option_argument("--abc", "defg");
assert_eq!(err.kind(), OptParseErrorKind::UnexpectedOptionArgument);
assert_eq!(err.desc1_str(), "--abc");
assert_eq!(err.to_string(), "Unexpected option argument: --abc: defg");
}
#[cfg(feature = "option_argument")]
#[test]
fn test_invalid_option_argument() {
let err = OptParseError::invalid_option_argument("--abc", "invalid float literal");
let thing = format!("{}", err);
let expect = "Invalid option argument: --abc: invalid float literal";
assert_eq!(thing, expect);
}
#[cfg(feature = "option_argument")]
#[test]
fn test_unexpected_option_argument() {
let err = OptParseError::unexpected_option_argument("--abc", "defg");
let thing = format!("{}", err);
let expect = "Unexpected option argument: --abc: defg";
assert_eq!(thing, expect);
}
#[cfg(feature = "option_argument")]
#[test]
fn test_missing_option_argument() {
let err = OptParseError::missing_option_argument("--abc");
let thing = format!("{}", err);
let expect = "Missing option argument: --abc";
assert_eq!(thing, expect);
}
//
#[cfg(feature = "argument")]
#[test]
fn test_missing_argument() {
let err = OptParseError::missing_argument("");
let thing = format!("{}", err);
let expect = "Missing argument: ";
assert_eq!(thing, expect);
}
#[cfg(feature = "argument")]
#[test]
fn test_unexpected_argument() {
let err = OptParseError::unexpected_argument("xyz");
let thing = format!("{}", err);
let expect = "Unexpected argument: xyz";
assert_eq!(thing, expect);
}
//
#[cfg(feature = "subcommand")]
#[test]
fn test_invalid_subcommand() {
let err = OptParseError::invalid_subcommand("new");
let thing = format!("{}", err);
let expect = "Invalid subcommand: new";
assert_eq!(thing, expect);
}
#[cfg(feature = "subcommand")]
#[test]
fn test_missing_subcommand() {
let err = OptParseError::missing_subcommand("");
let thing = format!("{}", err);
let expect = "Missing subcommand: ";
assert_eq!(thing, expect);
}
//
#[test]
#[cfg(feature = "abbreviate")]
fn test_ambiguous_option() {
let err = OptParseError::ambiguous_option("--abc", "abcd, abce");
let thing = format!("{}", err);
let expect = "Ambiguous option: --abc: abcd, abce";
assert_eq!(thing, expect);
}
#[test]
#[cfg(all(feature = "abbreviate", feature = "subcommand"))]
fn test_ambiguous_subcommand() {
let err = OptParseError::ambiguous_subcommand("new", "new-first, new-second");
let thing = format!("{}", err);
let expect = "Ambiguous subcommand: new: new-first, new-second";
assert_eq!(thing, expect);
}
}
// OptParseErrors
mod test_1 {
use flood_tide::err::OptParseError;
use flood_tide::err::OptParseErrors;
//
#[test]
fn test_errors() {
let mut errs = OptParseErrors::new();
assert!(errs.is_empty());
assert_eq!(errs.len(), 0);
//
errs.push(OptParseError::invalid_option("--abc"));
errs.push(OptParseError::missing_option("--abc"));
#[cfg(feature = "option_argument")]
{
errs.push(OptParseError::invalid_option_argument(
"--abc",
"invalid float literal",
));
errs.push(OptParseError::unexpected_option_argument("--abc", "defg"));
errs.push(OptParseError::missing_option_argument("--abc"));
}
#[cfg(feature = "argument")]
{
errs.push(OptParseError::missing_argument(""));
errs.push(OptParseError::unexpected_argument("xyz"));
}
#[cfg(feature = "subcommand")]
{
errs.push(OptParseError::invalid_subcommand("new"));
errs.push(OptParseError::missing_subcommand(""));
}
#[cfg(feature = "abbreviate")]
errs.push(OptParseError::ambiguous_option("--abc", "abcd, abce"));
#[cfg(all(feature = "abbreviate", feature = "subcommand"))]
errs.push(OptParseError::ambiguous_subcommand(
"new",
"new-first, new-second",
));
//
assert!(!errs.is_empty());
//
let len = 2;
#[cfg(feature = "option_argument")]
let len = len + 3;
#[cfg(feature = "argument")]
let len = len + 2;
#[cfg(feature = "abbreviate")]
let len = len + 1;
#[cfg(all(feature = "abbreviate", feature = "subcommand"))]
let len = len + 1;
#[cfg(feature = "subcommand")]
let len = len + 2;
assert_eq!(errs.len(), len);
//
let thing = format!("{}", errs);
let expect = concat!("Invalid option: --abc\n", "Missing option: --abc",).to_string();
#[cfg(feature = "option_argument")]
let expect = expect
+ concat!(
"\n",
"Invalid option argument: --abc: invalid float literal\n",
"Unexpected option argument: --abc: defg\n",
"Missing option argument: --abc",
);
#[cfg(feature = "argument")]
let expect = expect
+ concat!(
"\n",
"Missing argument: \n",
"Unexpected argument: xyz",
);
#[cfg(feature = "subcommand")]
let expect = expect
+ concat!(
"\n",
"Invalid subcommand: new\n",
"Missing subcommand: ",
);
#[cfg(feature = "abbreviate")]
let expect = expect + concat!("\n", "Ambiguous option: --abc: abcd, abce",);
#[cfg(all(feature = "abbreviate", feature = "subcommand"))]
let expect = expect + concat!("\n", "Ambiguous subcommand: new: new-first, new-second",);
assert_eq!(thing, expect);
}
#[test]
fn test_errors_append() {
let mut errs = OptParseErrors::new();
errs.push(OptParseError::invalid_option("--abc"));
errs.push(OptParseError::missing_option("--abc"));
#[cfg(feature = "option_argument")]
{
errs.push(OptParseError::invalid_option_argument(
"--abc",
"invalid float literal",
));
errs.push(OptParseError::unexpected_option_argument("--abc", "defg"));
}
#[cfg(feature = "abbreviate")]
errs.push(OptParseError::ambiguous_option("--abc", "abcd, abce"));
//
let mut errs2 = OptParseErrors::new();
errs2.push(OptParseError::invalid_option("--abcd"));
errs2.push(OptParseError::missing_option("--abcd"));
#[cfg(feature = "option_argument")]
errs2.push(OptParseError::missing_option_argument("--abc"));
#[cfg(feature = "argument")]
{
errs2.push(OptParseError::missing_argument(""));
errs2.push(OptParseError::unexpected_argument("xyz"));
}
#[cfg(feature = "subcommand")]
{
errs2.push(OptParseError::invalid_subcommand("new"));
errs2.push(OptParseError::missing_subcommand(""));
}
#[cfg(all(feature = "abbreviate", feature = "subcommand"))]
errs2.push(OptParseError::ambiguous_subcommand(
"new",
"new-first, new-second",
));
//
errs.append(errs2);
//
let thing = format!("{}", errs);
let expect1 = concat!("Invalid option: --abc\n", "Missing option: --abc\n",).to_string();
#[cfg(feature = "option_argument")]
let expect1 = expect1
+ concat!(
"Invalid option argument: --abc: invalid float literal\n",
"Unexpected option argument: --abc: defg\n",
);
#[cfg(feature = "abbreviate")]
let expect1 = expect1 + concat!("Ambiguous option: --abc: abcd, abce\n",);
let expect2 = concat!("Invalid option: --abcd\n", "Missing option: --abcd\n",).to_string();
#[cfg(feature = "option_argument")]
let expect2 = expect2 + "Missing option argument: --abc\n";
#[cfg(feature = "argument")]
let expect2 =
expect2 + concat!("Missing argument: \n", "Unexpected argument: xyz\n",);
#[cfg(feature = "subcommand")]
let expect2 = expect2
+ concat!(
"Invalid subcommand: new\n",
"Missing subcommand: \n",
);
#[cfg(all(feature = "abbreviate", feature = "subcommand"))]
let expect2 = expect2 + concat!("Ambiguous subcommand: new: new-first, new-second\n",);
let expect = expect1 + &expect2;
assert_eq!(thing + "\n", expect);
}
#[test]
fn test_errors_iter() {
let mut errs = OptParseErrors::new();
errs.push(OptParseError::invalid_option("--abc"));
errs.push(OptParseError::missing_option("--abc"));
#[cfg(feature = "option_argument")]
{
errs.push(OptParseError::invalid_option_argument(
"--abc",
"invalid float literal",
));
errs.push(OptParseError::unexpected_option_argument("--abc", "defg"));
errs.push(OptParseError::missing_option_argument("--abc"));
}
#[cfg(feature = "argument")]
{
errs.push(OptParseError::missing_argument(""));
errs.push(OptParseError::unexpected_argument("xyz"));
}
#[cfg(feature = "subcommand")]
{
errs.push(OptParseError::invalid_subcommand("new"));
errs.push(OptParseError::missing_subcommand(""));
}
#[cfg(feature = "abbreviate")]
errs.push(OptParseError::ambiguous_option("--abc", "abcd, abce"));
#[cfg(all(feature = "abbreviate", feature = "subcommand"))]
errs.push(OptParseError::ambiguous_subcommand(
"new",
"new-first, new-second",
));
//
let thing = {
let mut s = String::new();
let it = errs.iter();
for err in it {
let ss = format!("{}\n", err);
s.push_str(ss.as_str());
}
s
};
let expect = concat!("Invalid option: --abc\n", "Missing option: --abc\n",).to_string();
#[cfg(feature = "option_argument")]
let expect = expect
+ concat!(
"Invalid option argument: --abc: invalid float literal\n",
"Unexpected option argument: --abc: defg\n",
"Missing option argument: --abc\n",
);
#[cfg(feature = "argument")]
let expect = expect + concat!("Missing argument: \n", "Unexpected argument: xyz\n",);
#[cfg(feature = "subcommand")]
let expect = expect
+ concat!(
"Invalid subcommand: new\n",
"Missing subcommand: \n",
);
#[cfg(feature = "abbreviate")]
let expect = expect + concat!("Ambiguous option: --abc: abcd, abce\n",);
#[cfg(all(feature = "abbreviate", feature = "subcommand"))]
let expect = expect + concat!("Ambiguous subcommand: new: new-first, new-second\n",);
assert_eq!(thing, expect);
}
}