mirror of
https://github.com/clap-rs/clap
synced 2024-12-13 14:22:34 +00:00
test(derive): Verify derive-genned errors are formatted
This is to help verify behavior added in #2943. We separated the error raising site from the error formatting site and this verifies that the formatting actually happens.
This commit is contained in:
parent
7ce5d79de3
commit
93c26dd420
1 changed files with 43 additions and 1 deletions
|
@ -1,4 +1,4 @@
|
|||
use clap::{Args, IntoApp, Parser, Subcommand};
|
||||
use clap::{AppSettings, Args, ColorChoice, IntoApp, Parser, Subcommand};
|
||||
|
||||
#[test]
|
||||
fn arg_help_heading_applied() {
|
||||
|
@ -183,3 +183,45 @@ fn flatten_field_with_help_heading() {
|
|||
.unwrap();
|
||||
assert_eq!(should_be_in_section_a.get_help_heading(), Some("HEADING A"));
|
||||
}
|
||||
|
||||
// The challenge with this test is creating an error situation not caught by `clap`'s error checking
|
||||
// but by the code that `clap_derive` generates.
|
||||
//
|
||||
// Ultimately, the easiest way to confirm is to put a debug statement in the desired error path.
|
||||
#[test]
|
||||
fn derive_generated_error_has_full_context() {
|
||||
#[derive(Debug, Parser)]
|
||||
#[clap(setting(AppSettings::SubcommandsNegateReqs), color = ColorChoice::Never)]
|
||||
struct Opts {
|
||||
#[clap(long)]
|
||||
req_str: String,
|
||||
|
||||
#[clap(subcommand)]
|
||||
cmd: Option<SubCommands>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Parser)]
|
||||
enum SubCommands {
|
||||
Sub {
|
||||
#[clap(short, long, parse(from_occurrences))]
|
||||
verbose: u8,
|
||||
},
|
||||
}
|
||||
|
||||
let result = Opts::try_parse_from(&["test", "sub"]);
|
||||
assert!(
|
||||
result.is_err(),
|
||||
"`SubcommandsNegateReqs` with non-optional `req_str` should fail: {:?}",
|
||||
result.unwrap()
|
||||
);
|
||||
|
||||
let expected = r#"error: The following required argument was not provided: req-str
|
||||
|
||||
USAGE:
|
||||
clap_derive --req-str <REQ_STR>
|
||||
clap_derive <SUBCOMMAND>
|
||||
|
||||
For more information try --help
|
||||
"#;
|
||||
assert_eq!(result.unwrap_err().to_string(), expected);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue