Skip to content

Commit

Permalink
test: add coverage for help flag hints
Browse files Browse the repository at this point in the history
  • Loading branch information
zanieb committed Jul 8, 2024
1 parent 866d7d1 commit e37a8b7
Show file tree
Hide file tree
Showing 2 changed files with 171 additions and 10 deletions.
160 changes: 156 additions & 4 deletions tests/builder/help.rs
Original file line number Diff line number Diff line change
Expand Up @@ -81,14 +81,17 @@ fn help_multi_subcommand_error() {
.try_get_matches_from(["ctest", "help", "subcmd", "multi", "foo"])
.unwrap_err();

assert_data_eq!(err.to_string(), str![[r#"
assert_data_eq!(
err.to_string(),
str![[r#"
error: unrecognized subcommand 'foo'
Usage: ctest subcmd multi [OPTIONS]
For more information, try '--help'.
"#]]);
"#]]
);
}

#[test]
Expand Down Expand Up @@ -351,6 +354,152 @@ Options:
utils::assert_output(cmd, "ctest --help", DEFAULT_HELP, false);
}

#[test]
fn try_help_default() {
static DEFAULT_HELP: &str = "\
error: unexpected argument 'bar' found
Usage: ctest
For more information, try '--help'.
";

let cmd = Command::new("ctest").version("1.0").term_width(0);
utils::assert_output(cmd, "ctest bar", DEFAULT_HELP, true);
}

#[test]
fn try_help_custom_flag() {
static EXPECTED_HELP: &str = "\
error: unexpected argument 'bar' found
Usage: ctest
";

let cmd = Command::new("ctest")
.version("1.0")
.disable_help_flag(true)
.arg(
Arg::new("help")
.long("help")
.short('h')
.action(ArgAction::Help),
)
.term_width(0);
utils::assert_output(cmd, "ctest bar", EXPECTED_HELP, true);
}

#[test]
fn try_help_custom_flag_short() {
static EXPECTED_HELP: &str = "\
error: unexpected argument 'bar' found
Usage: ctest
";

let cmd = Command::new("ctest")
.version("1.0")
.disable_help_flag(true)
.arg(Arg::new("help").short('h').action(ArgAction::HelpShort))
.term_width(0);
utils::assert_output(cmd, "ctest bar", EXPECTED_HELP, true);
}

#[test]
fn try_help_custom_flag_long() {
static EXPECTED_HELP: &str = "\
error: unexpected argument 'bar' found
Usage: ctest
";

let cmd = Command::new("ctest")
.version("1.0")
.disable_help_flag(true)
.arg(Arg::new("help").long("help").action(ArgAction::HelpShort))
.term_width(0);
utils::assert_output(cmd, "ctest bar", EXPECTED_HELP, true);
}

#[test]
fn try_help_custom_flag_no_action() {
static EXPECTED_HELP: &str = "\
error: unexpected argument 'bar' found
Usage: ctest
";

let cmd = Command::new("ctest")
.version("1.0")
.disable_help_flag(true)
// Note `ArgAction::Help` is excluded
.arg(Arg::new("help").long("help").global(true))
.term_width(0);
utils::assert_output(cmd, "ctest bar", EXPECTED_HELP, true);
}

#[test]
fn try_help_subcommand_default() {
static DEFAULT_HELP: &str = "\
error: unrecognized subcommand 'bar'
Usage: ctest [COMMAND]
For more information, try '--help'.
";

let cmd = Command::new("ctest")
.version("1.0")
.subcommand(Command::new("foo"))
.term_width(0);
utils::assert_output(cmd, "ctest bar", DEFAULT_HELP, true);
}

#[test]
fn try_help_subcommand_custom_flag() {
static EXPECTED_HELP: &str = "\
error: unrecognized subcommand 'bar'
Usage: ctest [COMMAND]
For more information, try 'help'.
";

let cmd = Command::new("ctest")
.version("1.0")
.disable_help_flag(true)
.arg(
Arg::new("help")
.long("help")
.short('h')
.action(ArgAction::Help)
.global(true),
)
.subcommand(Command::new("foo"))
.term_width(0);
utils::assert_output(cmd, "ctest bar", EXPECTED_HELP, true);
}

#[test]
fn try_help_subcommand_custom_flag_no_action() {
static EXPECTED_HELP: &str = "\
error: unrecognized subcommand 'bar'
Usage: ctest [COMMAND]
For more information, try 'help'.
";

let cmd = Command::new("ctest")
.version("1.0")
.disable_help_flag(true)
// Note `ArgAction::Help` is excluded
.arg(Arg::new("help").long("help").global(true))
.subcommand(Command::new("foo"))
.term_width(0);
utils::assert_output(cmd, "ctest bar", EXPECTED_HELP, true);
}

#[test]
#[cfg(feature = "wrap_help")]
fn wrapped_help() {
Expand Down Expand Up @@ -2861,15 +3010,18 @@ fn parent_cmd_req_in_usage_with_render_help() {
let subcmd = cmd.find_subcommand_mut("test").unwrap();

let help = subcmd.render_help().to_string();
assert_data_eq!(help, str![[r#"
assert_data_eq!(
help,
str![[r#"
some
Usage: parent <TARGET> <ARGS> test
Options:
-h, --help Print help
"#]]);
"#]]
);
}

#[test]
Expand Down
21 changes: 15 additions & 6 deletions tests/builder/subcommands.rs
Original file line number Diff line number Diff line change
Expand Up @@ -487,20 +487,25 @@ fn bad_multicall_command_error() {

let err = cmd.clone().try_get_matches_from(["world"]).unwrap_err();
assert_eq!(err.kind(), ErrorKind::InvalidSubcommand);
assert_data_eq!(err.to_string(), str![[r#"
assert_data_eq!(
err.to_string(),
str![[r#"
error: unrecognized subcommand 'world'
Usage: <COMMAND>
For more information, try 'help'.
"#]]);
"#]]
);

#[cfg(feature = "suggestions")]
{
let err = cmd.clone().try_get_matches_from(["baz"]).unwrap_err();
assert_eq!(err.kind(), ErrorKind::InvalidSubcommand);
assert_data_eq!(err.to_string(), str![[r#"
assert_data_eq!(
err.to_string(),
str![[r#"
error: unrecognized subcommand 'baz'
tip: a similar subcommand exists: 'bar'
Expand All @@ -509,7 +514,8 @@ Usage: <COMMAND>
For more information, try 'help'.
"#]]);
"#]]
);
}

// Verify whatever we did to get the above to work didn't disable `--help` and `--version`.
Expand Down Expand Up @@ -600,7 +606,9 @@ fn multicall_render_help() {
let subcmd = subcmd.find_subcommand_mut("bar").unwrap();

let help = subcmd.render_help().to_string();
assert_data_eq!(help, str![[r#"
assert_data_eq!(
help,
str![[r#"
Usage: foo bar [value]
Arguments:
Expand All @@ -610,7 +618,8 @@ Options:
-h, --help Print help
-V, --version Print version
"#]]);
"#]]
);
}

#[test]
Expand Down

0 comments on commit e37a8b7

Please sign in to comment.