mirror of
https://github.com/clap-rs/clap
synced 2024-12-14 06:42:33 +00:00
42c943844c
In switching to title case for help headings (#4123), it caused me to look at "subcommand" in a fresh light. I can't quite put my finger on it but "Subcommand" looks a bit sloppy. I also have recently been surveying other CLIs and they just use "command" as well. All of them are commands anyways, just some are children of others (subcommands) while others are not (root or top-level commands, or just command). Context is good enough for clarifying subcommands from root commands. This is part of #4132
336 lines
9 KiB
Rust
336 lines
9 KiB
Rust
use super::utils;
|
|
|
|
use std::str;
|
|
|
|
use clap::{Arg, ArgAction, Command};
|
|
|
|
#[test]
|
|
fn no_derive_order() {
|
|
static NO_DERIVE_ORDER: &str = "test 1.2
|
|
|
|
Usage:
|
|
test [OPTIONS]
|
|
|
|
Options:
|
|
--flag_a second flag
|
|
--flag_b first flag
|
|
-h, --help Print help information
|
|
--option_a <option_a> second option
|
|
--option_b <option_b> first option
|
|
-V, --version Print version information
|
|
";
|
|
|
|
let cmd = Command::new("test")
|
|
.version("1.2")
|
|
.next_display_order(None)
|
|
.args(&[
|
|
Arg::new("flag_b")
|
|
.long("flag_b")
|
|
.help("first flag")
|
|
.action(ArgAction::SetTrue),
|
|
Arg::new("option_b")
|
|
.long("option_b")
|
|
.action(ArgAction::Set)
|
|
.help("first option"),
|
|
Arg::new("flag_a")
|
|
.long("flag_a")
|
|
.help("second flag")
|
|
.action(ArgAction::SetTrue),
|
|
Arg::new("option_a")
|
|
.long("option_a")
|
|
.action(ArgAction::Set)
|
|
.help("second option"),
|
|
]);
|
|
|
|
utils::assert_output(cmd, "test --help", NO_DERIVE_ORDER, false);
|
|
}
|
|
|
|
#[test]
|
|
fn derive_order() {
|
|
static UNIFIED_HELP_AND_DERIVE: &str = "test 1.2
|
|
|
|
Usage:
|
|
test [OPTIONS]
|
|
|
|
Options:
|
|
--flag_b first flag
|
|
--option_b <option_b> first option
|
|
--flag_a second flag
|
|
--option_a <option_a> second option
|
|
-h, --help Print help information
|
|
-V, --version Print version information
|
|
";
|
|
|
|
let cmd = Command::new("test").version("1.2").args(&[
|
|
Arg::new("flag_b")
|
|
.long("flag_b")
|
|
.help("first flag")
|
|
.action(ArgAction::SetTrue),
|
|
Arg::new("option_b")
|
|
.long("option_b")
|
|
.action(ArgAction::Set)
|
|
.help("first option"),
|
|
Arg::new("flag_a")
|
|
.long("flag_a")
|
|
.help("second flag")
|
|
.action(ArgAction::SetTrue),
|
|
Arg::new("option_a")
|
|
.long("option_a")
|
|
.action(ArgAction::Set)
|
|
.help("second option"),
|
|
]);
|
|
|
|
utils::assert_output(cmd, "test --help", UNIFIED_HELP_AND_DERIVE, false);
|
|
}
|
|
|
|
#[test]
|
|
fn derive_order_next_order() {
|
|
static HELP: &str = "test 1.2
|
|
|
|
Usage:
|
|
test [OPTIONS]
|
|
|
|
Options:
|
|
--flag_b first flag
|
|
--option_b <option_b> first option
|
|
-h, --help Print help information
|
|
-V, --version Print version information
|
|
--flag_a second flag
|
|
--option_a <option_a> second option
|
|
";
|
|
|
|
let cmd = Command::new("test")
|
|
.version("1.2")
|
|
.next_display_order(10000)
|
|
.arg(
|
|
Arg::new("flag_a")
|
|
.long("flag_a")
|
|
.help("second flag")
|
|
.action(ArgAction::SetTrue),
|
|
)
|
|
.arg(
|
|
Arg::new("option_a")
|
|
.long("option_a")
|
|
.action(ArgAction::Set)
|
|
.help("second option"),
|
|
)
|
|
.next_display_order(10)
|
|
.arg(
|
|
Arg::new("flag_b")
|
|
.long("flag_b")
|
|
.help("first flag")
|
|
.action(ArgAction::SetTrue),
|
|
)
|
|
.arg(
|
|
Arg::new("option_b")
|
|
.long("option_b")
|
|
.action(ArgAction::Set)
|
|
.help("first option"),
|
|
);
|
|
|
|
utils::assert_output(cmd, "test --help", HELP, false);
|
|
}
|
|
|
|
#[test]
|
|
fn derive_order_no_next_order() {
|
|
static HELP: &str = "test 1.2
|
|
|
|
Usage:
|
|
test [OPTIONS]
|
|
|
|
Options:
|
|
--flag_a first flag
|
|
--flag_b second flag
|
|
-h, --help Print help information
|
|
--option_a <option_a> first option
|
|
--option_b <option_b> second option
|
|
-V, --version Print version information
|
|
";
|
|
|
|
let cmd = Command::new("test")
|
|
.version("1.2")
|
|
.next_display_order(None)
|
|
.arg(
|
|
Arg::new("flag_a")
|
|
.long("flag_a")
|
|
.help("first flag")
|
|
.action(ArgAction::SetTrue),
|
|
)
|
|
.arg(
|
|
Arg::new("option_a")
|
|
.long("option_a")
|
|
.action(ArgAction::Set)
|
|
.help("first option"),
|
|
)
|
|
.arg(
|
|
Arg::new("flag_b")
|
|
.long("flag_b")
|
|
.help("second flag")
|
|
.action(ArgAction::SetTrue),
|
|
)
|
|
.arg(
|
|
Arg::new("option_b")
|
|
.long("option_b")
|
|
.action(ArgAction::Set)
|
|
.help("second option"),
|
|
);
|
|
|
|
utils::assert_output(cmd, "test --help", HELP, false);
|
|
}
|
|
|
|
#[test]
|
|
fn derive_order_subcommand_propagate() {
|
|
static UNIFIED_DERIVE_SC_PROP: &str = "test-sub 1.2
|
|
|
|
Usage:
|
|
test sub [OPTIONS]
|
|
|
|
Options:
|
|
--flag_b first flag
|
|
--option_b <option_b> first option
|
|
--flag_a second flag
|
|
--option_a <option_a> second option
|
|
-h, --help Print help information
|
|
-V, --version Print version information
|
|
";
|
|
|
|
let cmd = Command::new("test").subcommand(
|
|
Command::new("sub").version("1.2").args(&[
|
|
Arg::new("flag_b")
|
|
.long("flag_b")
|
|
.help("first flag")
|
|
.action(ArgAction::SetTrue),
|
|
Arg::new("option_b")
|
|
.long("option_b")
|
|
.action(ArgAction::Set)
|
|
.help("first option"),
|
|
Arg::new("flag_a")
|
|
.long("flag_a")
|
|
.help("second flag")
|
|
.action(ArgAction::SetTrue),
|
|
Arg::new("option_a")
|
|
.long("option_a")
|
|
.action(ArgAction::Set)
|
|
.help("second option"),
|
|
]),
|
|
);
|
|
|
|
utils::assert_output(cmd, "test sub --help", UNIFIED_DERIVE_SC_PROP, false);
|
|
}
|
|
|
|
#[test]
|
|
fn derive_order_subcommand_propagate_with_explicit_display_order() {
|
|
static UNIFIED_DERIVE_SC_PROP_EXPLICIT_ORDER: &str = "test-sub 1.2
|
|
|
|
Usage:
|
|
test sub [OPTIONS]
|
|
|
|
Options:
|
|
--flag_a second flag
|
|
--flag_b first flag
|
|
--option_b <option_b> first option
|
|
--option_a <option_a> second option
|
|
-h, --help Print help information
|
|
-V, --version Print version information
|
|
";
|
|
|
|
let cmd = Command::new("test").subcommand(
|
|
Command::new("sub").version("1.2").args(&[
|
|
Arg::new("flag_b")
|
|
.long("flag_b")
|
|
.help("first flag")
|
|
.action(ArgAction::SetTrue),
|
|
Arg::new("option_b")
|
|
.long("option_b")
|
|
.action(ArgAction::Set)
|
|
.help("first option"),
|
|
Arg::new("flag_a")
|
|
.long("flag_a")
|
|
.help("second flag")
|
|
.display_order(0)
|
|
.action(ArgAction::SetTrue),
|
|
Arg::new("option_a")
|
|
.long("option_a")
|
|
.action(ArgAction::Set)
|
|
.help("second option"),
|
|
]),
|
|
);
|
|
|
|
utils::assert_output(
|
|
cmd,
|
|
"test sub --help",
|
|
UNIFIED_DERIVE_SC_PROP_EXPLICIT_ORDER,
|
|
false,
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn subcommand_sorted_display_order() {
|
|
static SUBCMD_ALPHA_ORDER: &str = "test 1
|
|
|
|
Usage:
|
|
test [COMMAND]
|
|
|
|
Commands:
|
|
a1 blah a1
|
|
b1 blah b1
|
|
help Print this message or the help of the given subcommand(s)
|
|
|
|
Options:
|
|
-h, --help Print help information
|
|
-V, --version Print version information
|
|
";
|
|
|
|
let app_subcmd_alpha_order = Command::new("test")
|
|
.version("1")
|
|
.next_display_order(None)
|
|
.subcommands(vec![
|
|
Command::new("b1")
|
|
.about("blah b1")
|
|
.arg(Arg::new("test").short('t').action(ArgAction::SetTrue)),
|
|
Command::new("a1")
|
|
.about("blah a1")
|
|
.arg(Arg::new("roster").short('r').action(ArgAction::SetTrue)),
|
|
]);
|
|
|
|
utils::assert_output(
|
|
app_subcmd_alpha_order,
|
|
"test --help",
|
|
SUBCMD_ALPHA_ORDER,
|
|
false,
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn subcommand_derived_display_order() {
|
|
static SUBCMD_DECL_ORDER: &str = "test 1
|
|
|
|
Usage:
|
|
test [COMMAND]
|
|
|
|
Commands:
|
|
b1 blah b1
|
|
a1 blah a1
|
|
help Print this message or the help of the given subcommand(s)
|
|
|
|
Options:
|
|
-h, --help Print help information
|
|
-V, --version Print version information
|
|
";
|
|
|
|
let app_subcmd_decl_order = Command::new("test").version("1").subcommands(vec![
|
|
Command::new("b1")
|
|
.about("blah b1")
|
|
.arg(Arg::new("test").short('t').action(ArgAction::SetTrue)),
|
|
Command::new("a1")
|
|
.about("blah a1")
|
|
.arg(Arg::new("roster").short('r').action(ArgAction::SetTrue)),
|
|
]);
|
|
|
|
utils::assert_output(
|
|
app_subcmd_decl_order,
|
|
"test --help",
|
|
SUBCMD_DECL_ORDER,
|
|
false,
|
|
);
|
|
}
|