From b24deb101f7e12660b8b19d6b3979df87ffe065d Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Mon, 8 Jul 2024 17:15:54 -0500 Subject: [PATCH] test: Add coverage for help flag hints --- tests/builder/help.rs | 150 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 149 insertions(+), 1 deletion(-) diff --git a/tests/builder/help.rs b/tests/builder/help.rs index a66f5f0d8d5..0f722bb19b4 100644 --- a/tests/builder/help.rs +++ b/tests/builder/help.rs @@ -81,7 +81,9 @@ 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] @@ -351,6 +353,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() {