clap/tests/builder/hidden_args.rs
Ed Page c9eef44213 fix: Make arg!(--flag <value>) optional by default
This was ported over from the usage parser which modeled after docopt.
We just never got around to implementing the rest of the syntax.

However, when considering this as a standalone feature, an
`arg!(--flag <value>)`, outside of other context, should be optional.
This is how the help would display it.

Fixes #4206
2022-09-12 17:10:01 -05:00

280 lines
7 KiB
Rust

use super::utils;
use clap::{arg, Arg, ArgAction, Command};
static HIDDEN_ARGS: &str = "\
tests stuff
Usage: test [OPTIONS]
Options:
-F, --flag2 some other flag
--option <opt> some option
-h, --help Print help information
-V, --version Print version information
";
#[test]
fn hide_args() {
let cmd = Command::new("test")
.author("Kevin K.")
.about("tests stuff")
.version("1.4")
.args(&[
arg!(-f --flag "some flag").hide(true),
arg!(-F --flag2 "some other flag"),
arg!(--option <opt> "some option"),
Arg::new("DUMMY").hide(true),
]);
utils::assert_output(cmd, "test --help", HIDDEN_ARGS, false);
}
static HIDDEN_SHORT_ARGS: &str = "\
hides short args
Usage: test [OPTIONS]
Options:
-v, --visible This text should be visible
-h, --help Print help information (use `--help` for more detail)
-V, --version Print version information
";
/// Ensure hide with short option
#[test]
fn hide_short_args() {
let cmd = Command::new("test")
.about("hides short args")
.author("Steve P.")
.version("2.31.2")
.args(&[
Arg::new("cfg")
.short('c')
.long("config")
.hide_short_help(true)
.action(ArgAction::SetTrue)
.help("Some help text describing the --config arg"),
Arg::new("visible")
.short('v')
.long("visible")
.action(ArgAction::SetTrue)
.help("This text should be visible"),
]);
utils::assert_output(cmd, "test -h", HIDDEN_SHORT_ARGS, false);
}
/// Ensure visible with opposite option
#[test]
fn hide_short_args_long_help() {
static HIDDEN_SHORT_ARGS_LONG_HELP: &str = "\
hides short args
Usage: test [OPTIONS]
Options:
-c, --config
Some help text describing the --config arg
-v, --visible
This text should be visible
-h, --help
Print help information (use `-h` for a summary)
-V, --version
Print version information
";
let cmd = Command::new("test")
.about("hides short args")
.author("Steve P.")
.version("2.31.2")
.args(&[
Arg::new("cfg")
.short('c')
.long("config")
.hide_short_help(true)
.action(ArgAction::SetTrue)
.help("Some help text describing the --config arg"),
Arg::new("visible")
.short('v')
.long("visible")
.action(ArgAction::SetTrue)
.help("This text should be visible"),
]);
utils::assert_output(cmd, "test --help", HIDDEN_SHORT_ARGS_LONG_HELP, false);
}
static HIDDEN_LONG_ARGS: &str = "\
hides long args
Usage: test [OPTIONS]
Options:
-v, --visible
This text should be visible
-h, --help
Print help information (use `-h` for a summary)
-V, --version
Print version information
";
#[test]
fn hide_long_args() {
let cmd = Command::new("test")
.about("hides long args")
.author("Steve P.")
.version("2.31.2")
.args(&[
Arg::new("cfg")
.short('c')
.long("config")
.hide_long_help(true)
.action(ArgAction::SetTrue)
.help("Some help text describing the --config arg"),
Arg::new("visible")
.short('v')
.long("visible")
.action(ArgAction::SetTrue)
.help("This text should be visible"),
]);
utils::assert_output(cmd, "test --help", HIDDEN_LONG_ARGS, false);
}
static HIDDEN_LONG_ARGS_SHORT_HELP: &str = "\
hides long args
Usage: test [OPTIONS]
Options:
-c, --config Some help text describing the --config arg
-v, --visible This text should be visible
-h, --help Print help information (use `--help` for more detail)
-V, --version Print version information
";
#[test]
fn hide_long_args_short_help() {
let cmd = Command::new("test")
.about("hides long args")
.author("Steve P.")
.version("2.31.2")
.args(&[
Arg::new("cfg")
.short('c')
.long("config")
.hide_long_help(true)
.action(ArgAction::SetTrue)
.help("Some help text describing the --config arg"),
Arg::new("visible")
.short('v')
.long("visible")
.action(ArgAction::SetTrue)
.help("This text should be visible"),
]);
utils::assert_output(cmd, "test -h", HIDDEN_LONG_ARGS_SHORT_HELP, false);
}
static HIDDEN_POS_ARGS: &str = "\
Usage: test [another]
Arguments:
[another] another pos
Options:
-h, --help Print help information
-V, --version Print version information
";
#[test]
fn hide_pos_args() {
let cmd = Command::new("test").version("1.4").args(&[
Arg::new("pos").help("some pos").hide(true),
Arg::new("another").help("another pos"),
]);
utils::assert_output(cmd, "test --help", HIDDEN_POS_ARGS, false);
}
static HIDDEN_SUBCMDS: &str = "\
Usage: test
Options:
-h, --help Print help information
-V, --version Print version information
";
#[test]
fn hide_subcmds() {
let cmd = Command::new("test")
.version("1.4")
.subcommand(Command::new("sub").hide(true));
utils::assert_output(cmd, "test --help", HIDDEN_SUBCMDS, false);
}
static HIDDEN_OPT_ARGS_ONLY: &str = "\
Usage: test
After help
";
#[test]
fn hide_opt_args_only() {
let cmd = Command::new("test")
.version("1.4")
.after_help("After help")
.disable_help_flag(true)
.disable_version_flag(true)
.arg(arg!(-h - -help).action(ArgAction::Help).hide(true))
.arg(arg!(-v - -version).hide(true))
.arg(arg!(--option <opt> "some option").hide(true));
utils::assert_output(cmd, "test --help", HIDDEN_OPT_ARGS_ONLY, false);
}
static HIDDEN_POS_ARGS_ONLY: &str = "\
Usage: test
After help
";
#[test]
fn hide_pos_args_only() {
let cmd = Command::new("test")
.version("1.4")
.after_help("After help")
.disable_help_flag(true)
.disable_version_flag(true)
.arg(arg!(-h - -help).action(ArgAction::Help).hide(true))
.arg(arg!(-v - -version).hide(true))
.args(&[Arg::new("pos").help("some pos").hide(true)]);
utils::assert_output(cmd, "test --help", HIDDEN_POS_ARGS_ONLY, false);
}
static HIDDEN_SUBCMDS_ONLY: &str = "\
Usage: test
After help
";
#[test]
fn hide_subcmds_only() {
let cmd = Command::new("test")
.version("1.4")
.after_help("After help")
.disable_help_flag(true)
.disable_version_flag(true)
.arg(arg!(-h - -help).action(ArgAction::Help).hide(true))
.arg(arg!(-v - -version).hide(true))
.subcommand(Command::new("sub").hide(true));
utils::assert_output(cmd, "test --help", HIDDEN_SUBCMDS_ONLY, false);
}