aboutsummaryrefslogtreecommitdiff
path: root/clap/tests/help.rs
diff options
context:
space:
mode:
Diffstat (limited to 'clap/tests/help.rs')
-rw-r--r--clap/tests/help.rs1205
1 files changed, 1205 insertions, 0 deletions
diff --git a/clap/tests/help.rs b/clap/tests/help.rs
new file mode 100644
index 0000000..4b15281
--- /dev/null
+++ b/clap/tests/help.rs
@@ -0,0 +1,1205 @@
+#[macro_use]
+extern crate clap;
+extern crate regex;
+
+include!("../clap-test.rs");
+
+use clap::{App, AppSettings, SubCommand, ErrorKind, Arg};
+
+static REQUIRE_DELIM_HELP: &'static str = "test 1.3
+Kevin K.
+tests stuff
+
+USAGE:
+ test --fake <some>:<val>
+
+FLAGS:
+ -h, --help Prints help information
+ -V, --version Prints version information
+
+OPTIONS:
+ -f, --fake <some>:<val> some help";
+
+static HELP: &'static str = "clap-test v1.4.8
+Kevin K. <kbknapp@gmail.com>
+tests clap library
+
+USAGE:
+ clap-test [FLAGS] [OPTIONS] [ARGS] [SUBCOMMAND]
+
+FLAGS:
+ -f, --flag tests flags
+ -F tests flags with exclusions
+ -h, --help Prints help information
+ -V, --version Prints version information
+
+OPTIONS:
+ -O, --Option <option3> specific vals [possible values: fast, slow]
+ --long-option-2 <option2> tests long options with exclusions
+ --maxvals3 <maxvals>... Tests 3 max vals
+ --minvals2 <minvals>... Tests 2 min vals
+ --multvals <one> <two> Tests multiple values, not mult occs
+ --multvalsmo <one> <two> Tests multiple values, and mult occs
+ -o, --option <opt>... tests options
+
+ARGS:
+ <positional> tests positionals
+ <positional2> tests positionals with exclusions
+ <positional3>... tests specific values [possible values: vi, emacs]
+
+SUBCOMMANDS:
+ help Prints this message or the help of the given subcommand(s)
+ subcmd tests subcommands";
+
+static SC_NEGATES_REQS: &'static str = "prog 1.0
+
+USAGE:
+ prog --opt <FILE> [PATH]
+ prog [PATH] <SUBCOMMAND>
+
+FLAGS:
+ -h, --help Prints help information
+ -V, --version Prints version information
+
+OPTIONS:
+ -o, --opt <FILE> tests options
+
+ARGS:
+ <PATH> help
+
+SUBCOMMANDS:
+ help Prints this message or the help of the given subcommand(s)
+ test";
+
+static ARGS_NEGATE_SC: &'static str = "prog 1.0
+
+USAGE:
+ prog [FLAGS] [OPTIONS] [PATH]
+ prog <SUBCOMMAND>
+
+FLAGS:
+ -f, --flag testing flags
+ -h, --help Prints help information
+ -V, --version Prints version information
+
+OPTIONS:
+ -o, --opt <FILE> tests options
+
+ARGS:
+ <PATH> help
+
+SUBCOMMANDS:
+ help Prints this message or the help of the given subcommand(s)
+ test";
+
+static AFTER_HELP: &'static str = "some text that comes before the help
+
+clap-test v1.4.8
+tests clap library
+
+USAGE:
+ clap-test
+
+FLAGS:
+ -h, --help Prints help information
+ -V, --version Prints version information
+
+some text that comes after the help";
+
+static HIDDEN_ARGS: &'static str = "prog 1.0
+
+USAGE:
+ prog [FLAGS] [OPTIONS]
+
+FLAGS:
+ -f, --flag testing flags
+ -h, --help Prints help information
+ -V, --version Prints version information
+
+OPTIONS:
+ -o, --opt <FILE> tests options";
+
+static SC_HELP: &'static str = "clap-test-subcmd 0.1
+Kevin K. <kbknapp@gmail.com>
+tests subcommands
+
+USAGE:
+ clap-test subcmd [FLAGS] [OPTIONS] [--] [scpositional]
+
+FLAGS:
+ -f, --flag tests flags
+ -h, --help Prints help information
+ -V, --version Prints version information
+
+OPTIONS:
+ -o, --option <scoption>... tests options
+ -s, --subcmdarg <subcmdarg> tests other args
+
+ARGS:
+ <scpositional> tests positionals";
+
+static ISSUE_1046_HIDDEN_SCS: &'static str = "prog 1.0
+
+USAGE:
+ prog [FLAGS] [OPTIONS] [PATH]
+
+FLAGS:
+ -f, --flag testing flags
+ -h, --help Prints help information
+ -V, --version Prints version information
+
+OPTIONS:
+ -o, --opt <FILE> tests options
+
+ARGS:
+ <PATH> some";
+
+// Using number_of_values(1) with multiple(true) misaligns help message
+static ISSUE_760: &'static str = "ctest 0.1
+
+USAGE:
+ ctest [OPTIONS]
+
+FLAGS:
+ -h, --help Prints help information
+ -V, --version Prints version information
+
+OPTIONS:
+ -O, --opt <opt> tests options
+ -o, --option <option>... tests options";
+
+static RIPGREP_USAGE: &'static str = "ripgrep 0.5
+
+USAGE:
+ rg [OPTIONS] <pattern> [<path> ...]
+ rg [OPTIONS] [-e PATTERN | -f FILE ]... [<path> ...]
+ rg [OPTIONS] --files [<path> ...]
+ rg [OPTIONS] --type-list
+
+FLAGS:
+ -h, --help Prints help information
+ -V, --version Prints version information";
+
+
+static MULTI_SC_HELP: &'static str = "ctest-subcmd-multi 0.1
+Kevin K. <kbknapp@gmail.com>
+tests subcommands
+
+USAGE:
+ ctest subcmd multi [FLAGS] [OPTIONS]
+
+FLAGS:
+ -f, --flag tests flags
+ -h, --help Prints help information
+ -V, --version Prints version information
+
+OPTIONS:
+ -o, --option <scoption>... tests options";
+
+static ISSUE_626_CUTOFF: &'static str = "ctest 0.1
+
+USAGE:
+ ctest [OPTIONS]
+
+FLAGS:
+ -h, --help Prints help information
+ -V, --version Prints version information
+
+OPTIONS:
+ -c, --cafe <FILE> A coffeehouse, coffee shop, or café is an
+ establishment which primarily serves hot
+ coffee, related coffee beverages (e.g., café
+ latte, cappuccino, espresso), tea, and other
+ hot beverages. Some coffeehouses also serve
+ cold beverages such as iced coffee and iced
+ tea. Many cafés also serve some type of food,
+ such as light snacks, muffins, or pastries.";
+
+static ISSUE_626_PANIC: &'static str = "ctest 0.1
+
+USAGE:
+ ctest [OPTIONS]
+
+FLAGS:
+ -h, --help Prints help information
+ -V, --version Prints version information
+
+OPTIONS:
+ -c, --cafe <FILE>
+ La culture du café est très développée
+ dans de nombreux pays à climat chaud
+ d\'Amérique, d\'Afrique et d\'Asie, dans
+ des plantations qui sont cultivées pour
+ les marchés d\'exportation. Le café est
+ souvent une contribution majeure aux
+ exportations des régions productrices.";
+
+static HIDE_POS_VALS: &'static str = "ctest 0.1
+
+USAGE:
+ ctest [OPTIONS]
+
+FLAGS:
+ -h, --help Prints help information
+ -V, --version Prints version information
+
+OPTIONS:
+ -c, --cafe <FILE> A coffeehouse, coffee shop, or café.
+ -p, --pos <VAL> Some vals [possible values: fast, slow]";
+
+static FINAL_WORD_WRAPPING: &'static str = "ctest 0.1
+
+USAGE:
+ ctest
+
+FLAGS:
+ -h, --help
+ Prints help
+ information
+ -V, --version
+ Prints
+ version
+ information";
+
+static OLD_NEWLINE_CHARS: &'static str = "ctest 0.1
+
+USAGE:
+ ctest [FLAGS]
+
+FLAGS:
+ -h, --help Prints help information
+ -m Some help with some wrapping
+ (Defaults to something)
+ -V, --version Prints version information";
+
+static WRAPPING_NEWLINE_CHARS: &'static str = "ctest 0.1
+
+USAGE:
+ ctest [mode]
+
+FLAGS:
+ -h, --help Prints help information
+ -V, --version Prints version information
+
+ARGS:
+ <mode> x, max, maximum 20 characters, contains
+ symbols.
+ l, long Copy-friendly, 14
+ characters, contains symbols.
+ m, med, medium Copy-friendly, 8
+ characters, contains symbols.";
+
+static ISSUE_688: &'static str = "ctest 0.1
+
+USAGE:
+ ctest [OPTIONS]
+
+FLAGS:
+ -h, --help Prints help information
+ -V, --version Prints version information
+
+OPTIONS:
+ --filter <filter> Sets the filter, or sampling method, to use for interpolation when resizing the particle
+ images. The default is Linear (Bilinear). [possible values: Nearest, Linear, Cubic,
+ Gaussian, Lanczos3]";
+
+static ISSUE_702: &'static str = "myapp 1.0
+foo
+bar
+
+USAGE:
+ myapp [OPTIONS] [--] [ARGS]
+
+FLAGS:
+ -h, --help Prints help information
+ -V, --version Prints version information
+
+OPTIONS:
+ -l, --label <label>... a label
+ -o, --other <other> some other option
+ -s, --some <some> some option
+
+ARGS:
+ <arg1> some option
+ <arg2>... some option";
+
+static ISSUE_777: &'static str = "A app with a crazy very long long
+long name hahaha 1.0
+Some Very Long Name and crazy long
+email <email@server.com>
+Show how the about text is not
+wrapped
+
+USAGE:
+ ctest
+
+FLAGS:
+ -h, --help
+ Prints help information
+
+ -V, --version
+ Prints version
+ information";
+
+static CUSTOM_VERSION_AND_HELP: &'static str = "customize 0.1
+Nobody <odysseus@example.com>
+You can customize the version and help text
+
+USAGE:
+ customize
+
+FLAGS:
+ -H, --help Print help information
+ -v, --version Print version information";
+
+static LAST_ARG: &'static str = "last 0.1
+
+USAGE:
+ last <TARGET> [CORPUS] [-- <ARGS>...]
+
+FLAGS:
+ -h, --help Prints help information
+ -V, --version Prints version information
+
+ARGS:
+ <TARGET> some
+ <CORPUS> some
+ <ARGS>... some";
+
+static LAST_ARG_SC: &'static str = "last 0.1
+
+USAGE:
+ last <TARGET> [CORPUS] [-- <ARGS>...]
+ last <SUBCOMMAND>
+
+FLAGS:
+ -h, --help Prints help information
+ -V, --version Prints version information
+
+ARGS:
+ <TARGET> some
+ <CORPUS> some
+ <ARGS>... some
+
+SUBCOMMANDS:
+ help Prints this message or the help of the given subcommand(s)
+ test some";
+
+static LAST_ARG_REQ: &'static str = "last 0.1
+
+USAGE:
+ last <TARGET> [CORPUS] -- <ARGS>...
+
+FLAGS:
+ -h, --help Prints help information
+ -V, --version Prints version information
+
+ARGS:
+ <TARGET> some
+ <CORPUS> some
+ <ARGS>... some";
+
+static LAST_ARG_REQ_SC: &'static str = "last 0.1
+
+USAGE:
+ last <TARGET> [CORPUS] -- <ARGS>...
+ last <SUBCOMMAND>
+
+FLAGS:
+ -h, --help Prints help information
+ -V, --version Prints version information
+
+ARGS:
+ <TARGET> some
+ <CORPUS> some
+ <ARGS>... some
+
+SUBCOMMANDS:
+ help Prints this message or the help of the given subcommand(s)
+ test some";
+
+static HIDE_DEFAULT_VAL: &'static str = "default 0.1
+
+USAGE:
+ default [OPTIONS]
+
+FLAGS:
+ -h, --help Prints help information
+ -V, --version Prints version information
+
+OPTIONS:
+ --arg <argument> Pass an argument to the program. [default: default-argument]";
+
+static LAST_ARG_USAGE: &'static str = "flamegraph 0.1
+
+USAGE:
+ flamegraph [FLAGS] [OPTIONS] [BINFILE] [-- <ARGS>...]
+
+FLAGS:
+ -h, --help Prints help information
+ -V, --version Prints version information
+ -v, --verbose Prints out more stuff.
+
+OPTIONS:
+ -f, --frequency <HERTZ> The sampling frequency.
+ -t, --timeout <SECONDS> Timeout in seconds.
+
+ARGS:
+ <BINFILE> The path of the binary to be profiled. for a binary.
+ <ARGS>... Any arguments you wish to pass to the being profiled.";
+
+static LAST_ARG_REQ_MULT: &'static str = "example 1.0
+
+USAGE:
+ example <FIRST>... [--] <SECOND>...
+
+FLAGS:
+ -h, --help Prints help information
+ -V, --version Prints version information
+
+ARGS:
+ <FIRST>... First
+ <SECOND>... Second";
+
+static DEFAULT_HELP: &'static str = "ctest 1.0
+
+USAGE:
+ ctest
+
+FLAGS:
+ -h, --help Prints help information
+ -V, --version Prints version information";
+
+static LONG_ABOUT: &'static str = "myapp 1.0
+foo
+something really really long, with
+multiple lines of text
+that should be displayed
+
+USAGE:
+ myapp [arg1]
+
+FLAGS:
+ -h, --help
+ Prints help information
+
+ -V, --version
+ Prints version information
+
+
+ARGS:
+ <arg1>
+ some option";
+
+static HIDE_ENV_VALS: &'static str = "ctest 0.1
+
+USAGE:
+ ctest [OPTIONS]
+
+FLAGS:
+ -h, --help Prints help information
+ -V, --version Prints version information
+
+OPTIONS:
+ -c, --cafe <FILE> A coffeehouse, coffee shop, or café. [env: ENVVAR]
+ -p, --pos <VAL> Some vals [possible values: fast, slow]";
+
+static SHOW_ENV_VALS: &'static str = "ctest 0.1
+
+USAGE:
+ ctest [OPTIONS]
+
+FLAGS:
+ -h, --help Prints help information
+ -V, --version Prints version information
+
+OPTIONS:
+ -c, --cafe <FILE> A coffeehouse, coffee shop, or café. [env: ENVVAR=MYVAL]
+ -p, --pos <VAL> Some vals [possible values: fast, slow]";
+
+fn setup() -> App<'static, 'static> {
+ App::new("test")
+ .author("Kevin K.")
+ .about("tests stuff")
+ .version("1.3")
+}
+
+#[test]
+fn help_short() {
+ let m = setup()
+ .get_matches_from_safe(vec!["myprog", "-h"]);
+
+ assert!(m.is_err());
+ assert_eq!(m.unwrap_err().kind, ErrorKind::HelpDisplayed);
+}
+
+#[test]
+fn help_long() {
+ let m = setup()
+ .get_matches_from_safe(vec!["myprog", "--help"]);
+
+ assert!(m.is_err());
+ assert_eq!(m.unwrap_err().kind, ErrorKind::HelpDisplayed);
+}
+
+#[test]
+fn help_no_subcommand() {
+ let m = setup()
+ .get_matches_from_safe(vec!["myprog", "help"]);
+
+ assert!(m.is_err());
+ assert_eq!(m.unwrap_err().kind, ErrorKind::UnknownArgument);
+}
+
+#[test]
+fn help_subcommand() {
+ let m = setup()
+ .subcommand(SubCommand::with_name("test")
+ .about("tests things")
+ .arg_from_usage("-v --verbose 'with verbosity'"))
+ .get_matches_from_safe(vec!["myprog", "help"]);
+
+ assert!(m.is_err());
+ assert_eq!(m.unwrap_err().kind, ErrorKind::HelpDisplayed);
+}
+
+#[test]
+fn req_last_arg_usage() {
+ let app = clap_app!(example =>
+ (version: "1.0")
+ (@arg FIRST: ... * "First")
+ (@arg SECOND: ... * +last "Second")
+ );
+ assert!(test::compare_output(app, "example --help", LAST_ARG_REQ_MULT, false));
+}
+
+#[test]
+fn args_with_last_usage() {
+ let app = App::new("flamegraph")
+ .version("0.1")
+ .setting(AppSettings::TrailingVarArg)
+ .arg(Arg::with_name("verbose")
+ .help("Prints out more stuff.")
+ .short("v")
+ .long("verbose")
+ .multiple(true)
+ )
+ .arg(Arg::with_name("timeout")
+ .help("Timeout in seconds.")
+ .short("t")
+ .long("timeout")
+ .value_name("SECONDS")
+ .takes_value(true)
+ )
+ .arg(Arg::with_name("frequency")
+ .help("The sampling frequency.")
+ .short("f")
+ .long("frequency")
+ .value_name("HERTZ")
+ .takes_value(true)
+ )
+ .arg(Arg::with_name("binary path")
+ .help("The path of the binary to be profiled. for a binary.")
+ .takes_value(true)
+ .value_name("BINFILE")
+ )
+ .arg(Arg::with_name("pass through args")
+ .help("Any arguments you wish to pass to the being profiled.")
+ .value_name("ARGS")
+ .last(true)
+ .multiple(true)
+ );
+ assert!(test::compare_output(app, "flamegraph --help", LAST_ARG_USAGE, false));
+}
+
+#[test]
+fn subcommand_short_help() {
+ let m = test::complex_app().get_matches_from_safe(vec!["clap-test", "subcmd", "-h"]);
+
+ assert!(m.is_err());
+ assert_eq!(m.unwrap_err().kind, ErrorKind::HelpDisplayed);
+}
+
+#[test]
+fn subcommand_long_help() {
+ let m = test::complex_app().get_matches_from_safe(vec!["clap-test", "subcmd", "--help"]);
+
+ assert!(m.is_err());
+ assert_eq!(m.unwrap_err().kind, ErrorKind::HelpDisplayed);
+}
+
+#[test]
+fn subcommand_help_rev() {
+ let m = test::complex_app().get_matches_from_safe(vec!["clap-test", "help", "subcmd"]);
+
+ assert!(m.is_err());
+ assert_eq!(m.unwrap_err().kind, ErrorKind::HelpDisplayed);
+}
+
+#[test]
+fn complex_help_output() {
+ assert!(test::compare_output(test::complex_app(), "clap-test --help", HELP, false));
+}
+
+#[test]
+fn after_and_before_help_output() {
+ let app = App::new("clap-test")
+ .version("v1.4.8")
+ .about("tests clap library")
+ .before_help("some text that comes before the help")
+ .after_help("some text that comes after the help");
+ assert!(test::compare_output(app, "clap-test --help", AFTER_HELP, false));
+}
+
+#[test]
+fn multi_level_sc_help() {
+ let app = App::new("ctest")
+ .subcommand(SubCommand::with_name("subcmd").subcommand(SubCommand::with_name("multi")
+ .about("tests subcommands")
+ .author("Kevin K. <kbknapp@gmail.com>")
+ .version("0.1")
+ .args_from_usage("
+ -f, --flag 'tests flags'
+ -o, --option [scoption]... 'tests options'
+ ")));
+ assert!(test::compare_output(app, "ctest help subcmd multi", MULTI_SC_HELP, false));
+}
+
+#[test]
+fn no_wrap_help() {
+ let app = App::new("ctest")
+ .set_term_width(0)
+ .help(MULTI_SC_HELP);
+ assert!(test::compare_output(app, "ctest --help", MULTI_SC_HELP, false));
+}
+
+#[test]
+fn no_wrap_default_help() {
+ let app = App::new("ctest").version("1.0").set_term_width(0);
+ assert!(test::compare_output(app, "ctest --help", DEFAULT_HELP, false));
+}
+
+#[test]
+fn complex_subcommand_help_output() {
+ let a = test::complex_app();
+ assert!(test::compare_output(a, "clap-test subcmd --help", SC_HELP, false));
+}
+
+
+#[test]
+fn issue_626_unicode_cutoff() {
+ let app = App::new("ctest")
+ .version("0.1")
+ .set_term_width(70)
+ .arg(Arg::with_name("cafe")
+ .short("c")
+ .long("cafe")
+ .value_name("FILE")
+ .help("A coffeehouse, coffee shop, or café is an establishment \
+ which primarily serves hot coffee, related coffee beverages \
+ (e.g., café latte, cappuccino, espresso), tea, and other hot \
+ beverages. Some coffeehouses also serve cold beverages such as \
+ iced coffee and iced tea. Many cafés also serve some type of \
+ food, such as light snacks, muffins, or pastries.")
+ .takes_value(true));
+ assert!(test::compare_output(app, "ctest --help", ISSUE_626_CUTOFF, false));
+}
+
+#[test]
+fn hide_possible_vals() {
+ let app = App::new("ctest")
+ .version("0.1")
+ .arg(Arg::with_name("pos")
+ .short("p")
+ .long("pos")
+ .value_name("VAL")
+ .possible_values(&["fast", "slow"])
+ .help("Some vals")
+ .takes_value(true))
+ .arg(Arg::with_name("cafe")
+ .short("c")
+ .long("cafe")
+ .value_name("FILE")
+ .hide_possible_values(true)
+ .possible_values(&["fast", "slow"])
+ .help("A coffeehouse, coffee shop, or café.")
+ .takes_value(true));
+ assert!(test::compare_output(app, "ctest --help", HIDE_POS_VALS, false));
+}
+
+#[test]
+fn issue_626_panic() {
+ let app = App::new("ctest")
+ .version("0.1")
+ .set_term_width(52)
+ .arg(Arg::with_name("cafe")
+ .short("c")
+ .long("cafe")
+ .value_name("FILE")
+ .help("La culture du café est très développée dans de nombreux pays à climat chaud d'Amérique, \
+ d'Afrique et d'Asie, dans des plantations qui sont cultivées pour les marchés d'exportation. \
+ Le café est souvent une contribution majeure aux exportations des régions productrices.")
+ .takes_value(true));
+ assert!(test::compare_output(app, "ctest --help", ISSUE_626_PANIC, false));
+}
+
+#[test]
+fn issue_626_variable_panic() {
+ for i in 10..320 {
+ let _ = App::new("ctest")
+ .version("0.1")
+ .set_term_width(i)
+ .arg(Arg::with_name("cafe")
+ .short("c")
+ .long("cafe")
+ .value_name("FILE")
+ .help("La culture du café est très développée dans de nombreux pays à climat chaud d'Amérique, \
+ d'Afrique et d'Asie, dans des plantations qui sont cultivées pour les marchés d'exportation. \
+ Le café est souvent une contribution majeure aux exportations des régions productrices.")
+ .takes_value(true))
+ .get_matches_from_safe(vec!["ctest", "--help"]);
+ }
+}
+
+#[test]
+fn final_word_wrapping() {
+ let app = App::new("ctest").version("0.1").set_term_width(24);
+ assert!(test::compare_output(app, "ctest --help", FINAL_WORD_WRAPPING, false));
+}
+
+#[test]
+fn wrapping_newline_chars() {
+ let app = App::new("ctest")
+ .version("0.1")
+ .set_term_width(60)
+ .arg(Arg::with_name("mode")
+ .help("x, max, maximum 20 characters, contains symbols.{n}\
+ l, long Copy-friendly, 14 characters, contains symbols.{n}\
+ m, med, medium Copy-friendly, 8 characters, contains symbols.{n}"));
+ assert!(test::compare_output(app, "ctest --help", WRAPPING_NEWLINE_CHARS, false));
+}
+
+#[test]
+fn old_newline_chars() {
+ let app = App::new("ctest")
+ .version("0.1")
+ .arg(Arg::with_name("mode")
+ .short("m")
+ .help("Some help with some wrapping{n}(Defaults to something)"));
+ assert!(test::compare_output(app, "ctest --help", OLD_NEWLINE_CHARS, false));
+}
+
+#[test]
+fn issue_688_hidden_pos_vals() {
+ let filter_values = ["Nearest", "Linear", "Cubic", "Gaussian", "Lanczos3"];
+
+ let app1 = App::new("ctest")
+ .version("0.1")
+ .set_term_width(120)
+ .setting(AppSettings::HidePossibleValuesInHelp)
+ .arg(Arg::with_name("filter")
+ .help("Sets the filter, or sampling method, to use for interpolation when resizing the particle \
+ images. The default is Linear (Bilinear). [possible values: Nearest, Linear, Cubic, Gaussian, Lanczos3]")
+ .long("filter")
+ .possible_values(&filter_values)
+ .takes_value(true));
+ assert!(test::compare_output(app1, "ctest --help", ISSUE_688, false));
+
+ let app2 = App::new("ctest")
+ .version("0.1")
+ .set_term_width(120)
+ .arg(Arg::with_name("filter")
+ .help("Sets the filter, or sampling method, to use for interpolation when resizing the particle \
+ images. The default is Linear (Bilinear).")
+ .long("filter")
+ .possible_values(&filter_values)
+ .takes_value(true));
+ assert!(test::compare_output(app2, "ctest --help", ISSUE_688, false));
+
+ let app3 = App::new("ctest")
+ .version("0.1")
+ .set_term_width(120)
+ .arg(Arg::with_name("filter")
+ .help("Sets the filter, or sampling method, to use for interpolation when resizing the particle \
+ images. The default is Linear (Bilinear). [possible values: Nearest, Linear, Cubic, Gaussian, Lanczos3]")
+ .long("filter")
+ .takes_value(true));
+ assert!(test::compare_output(app3, "ctest --help", ISSUE_688, false));
+}
+
+#[test]
+fn issue_702_multiple_values() {
+ let app = App::new("myapp")
+ .version("1.0")
+ .author("foo")
+ .about("bar")
+ .arg(Arg::with_name("arg1").help("some option"))
+ .arg(Arg::with_name("arg2")
+ .multiple(true)
+ .help("some option"))
+ .arg(Arg::with_name("some")
+ .help("some option")
+ .short("s")
+ .long("some")
+ .takes_value(true))
+ .arg(Arg::with_name("other")
+ .help("some other option")
+ .short("o")
+ .long("other")
+ .takes_value(true))
+ .arg(Arg::with_name("label")
+ .help("a label")
+ .short("l")
+ .long("label")
+ .multiple(true)
+ .takes_value(true));
+ assert!(test::compare_output(app, "myapp --help", ISSUE_702, false));
+}
+
+#[test]
+fn long_about() {
+ let app = App::new("myapp")
+ .version("1.0")
+ .author("foo")
+ .about("bar")
+ .long_about("something really really long, with\nmultiple lines of text\nthat should be displayed")
+ .arg(Arg::with_name("arg1").help("some option"));
+ assert!(test::compare_output(app, "myapp --help", LONG_ABOUT, false));
+}
+
+#[test]
+fn issue_760() {
+ let app = App::new("ctest")
+ .version("0.1")
+ .arg(Arg::with_name("option")
+ .help("tests options")
+ .short("o")
+ .long("option")
+ .takes_value(true)
+ .multiple(true)
+ .number_of_values(1))
+ .arg(Arg::with_name("opt")
+ .help("tests options")
+ .short("O")
+ .long("opt")
+ .takes_value(true));
+ assert!(test::compare_output(app, "ctest --help", ISSUE_760, false));
+}
+
+#[test]
+fn ripgrep_usage() {
+ let app = App::new("ripgrep")
+ .version("0.5")
+ .usage("rg [OPTIONS] <pattern> [<path> ...]
+ rg [OPTIONS] [-e PATTERN | -f FILE ]... [<path> ...]
+ rg [OPTIONS] --files [<path> ...]
+ rg [OPTIONS] --type-list");
+
+ assert!(test::compare_output(app, "rg --help", RIPGREP_USAGE, false));
+}
+
+#[test]
+fn ripgrep_usage_using_templates() {
+ let app = App::new("ripgrep")
+ .version("0.5")
+ .usage("
+ rg [OPTIONS] <pattern> [<path> ...]
+ rg [OPTIONS] [-e PATTERN | -f FILE ]... [<path> ...]
+ rg [OPTIONS] --files [<path> ...]
+ rg [OPTIONS] --type-list")
+ .template("\
+{bin} {version}
+
+USAGE:{usage}
+
+FLAGS:
+{flags}");
+
+ assert!(test::compare_output(app, "rg --help", RIPGREP_USAGE, false));
+}
+
+#[test]
+fn sc_negates_reqs() {
+ let app = App::new("prog")
+ .version("1.0")
+ .setting(AppSettings::SubcommandsNegateReqs)
+ .arg_from_usage("-o, --opt <FILE> 'tests options'")
+ .arg(Arg::with_name("PATH").help("help"))
+ .subcommand(SubCommand::with_name("test"));
+ assert!(test::compare_output(app, "prog --help", SC_NEGATES_REQS, false));
+}
+
+#[test]
+fn hidden_args() {
+ let app = App::new("prog")
+ .version("1.0")
+ .args_from_usage("-f, --flag 'testing flags'
+ -o, --opt [FILE] 'tests options'")
+ .arg(Arg::with_name("pos").hidden(true));
+ assert!(test::compare_output(app, "prog --help", HIDDEN_ARGS, false));
+}
+
+#[test]
+fn args_negate_sc() {
+ let app = App::new("prog")
+ .version("1.0")
+ .setting(AppSettings::ArgsNegateSubcommands)
+ .args_from_usage("-f, --flag 'testing flags'
+ -o, --opt [FILE] 'tests options'")
+ .arg(Arg::with_name("PATH").help("help"))
+ .subcommand(SubCommand::with_name("test"));
+ assert!(test::compare_output(app, "prog --help", ARGS_NEGATE_SC, false));
+}
+
+#[test]
+fn issue_1046_hidden_scs() {
+ let app = App::new("prog")
+ .version("1.0")
+ .args_from_usage("-f, --flag 'testing flags'
+ -o, --opt [FILE] 'tests options'")
+ .arg(Arg::with_name("PATH").help("some"))
+ .subcommand(SubCommand::with_name("test").setting(AppSettings::Hidden));
+ assert!(test::compare_output(app, "prog --help", ISSUE_1046_HIDDEN_SCS, false));
+}
+
+#[test]
+fn issue_777_wrap_all_things() {
+ let app = App::new("A app with a crazy very long long long name hahaha")
+ .version("1.0")
+ .author("Some Very Long Name and crazy long email <email@server.com>")
+ .about("Show how the about text is not wrapped")
+ .set_term_width(35);
+ assert!(test::compare_output(app, "ctest --help", ISSUE_777, false));
+}
+
+#[test]
+fn customize_version_and_help() {
+ let app = App::new("customize")
+ .version("0.1")
+ .author("Nobody <odysseus@example.com>")
+ .about("You can customize the version and help text")
+ .help_short("H")
+ .help_message("Print help information")
+ .version_short("v")
+ .version_message("Print version information");
+ assert!(test::compare_output(app, "customize --help", CUSTOM_VERSION_AND_HELP, false));
+}
+
+#[test]
+fn last_arg_mult_usage() {
+ let app = App::new("last")
+ .version("0.1")
+ .arg(Arg::with_name("TARGET").required(true).help("some"))
+ .arg(Arg::with_name("CORPUS").help("some"))
+ .arg(Arg::with_name("ARGS").multiple(true).last(true).help("some"));
+ assert!(test::compare_output(app, "last --help", LAST_ARG, false));
+}
+
+#[test]
+fn last_arg_mult_usage_req() {
+ let app = App::new("last")
+ .version("0.1")
+ .arg(Arg::with_name("TARGET").required(true).help("some"))
+ .arg(Arg::with_name("CORPUS").help("some"))
+ .arg(Arg::with_name("ARGS").multiple(true).last(true).required(true).help("some"));
+ assert!(test::compare_output(app, "last --help", LAST_ARG_REQ, false));
+}
+
+#[test]
+fn last_arg_mult_usage_req_with_sc() {
+ let app = App::new("last")
+ .version("0.1")
+ .setting(AppSettings::SubcommandsNegateReqs)
+ .arg(Arg::with_name("TARGET").required(true).help("some"))
+ .arg(Arg::with_name("CORPUS").help("some"))
+ .arg(Arg::with_name("ARGS").multiple(true).last(true).required(true).help("some"))
+ .subcommand(SubCommand::with_name("test").about("some"));
+ assert!(test::compare_output(app, "last --help", LAST_ARG_REQ_SC, false));
+}
+
+#[test]
+fn last_arg_mult_usage_with_sc() {
+ let app = App::new("last")
+ .version("0.1")
+ .setting(AppSettings::ArgsNegateSubcommands)
+ .arg(Arg::with_name("TARGET").required(true).help("some"))
+ .arg(Arg::with_name("CORPUS").help("some"))
+ .arg(Arg::with_name("ARGS").multiple(true).last(true).help("some"))
+ .subcommand(SubCommand::with_name("test").about("some"));
+ assert!(test::compare_output(app, "last --help", LAST_ARG_SC, false));
+}
+
+
+#[test]
+fn hidden_default_val() {
+ let app1 = App::new("default")
+ .version("0.1")
+ .set_term_width(120)
+ .arg(Arg::with_name("argument")
+ .help("Pass an argument to the program. [default: default-argument]")
+ .long("arg")
+ .default_value("default-argument")
+ .hide_default_value(true));
+ assert!(test::compare_output(app1, "default --help", HIDE_DEFAULT_VAL, false));
+
+ let app2 = App::new("default")
+ .version("0.1")
+ .set_term_width(120)
+ .arg(Arg::with_name("argument")
+ .help("Pass an argument to the program.")
+ .long("arg")
+ .default_value("default-argument"));
+ assert!(test::compare_output(app2, "default --help", HIDE_DEFAULT_VAL, false));
+}
+
+fn issue_1112_setup() -> App<'static, 'static> {
+ App::new("test")
+ .author("Kevin K.")
+ .about("tests stuff")
+ .version("1.3")
+ .arg(Arg::from_usage("-h, --help 'some help'"))
+ .subcommand(SubCommand::with_name("foo")
+ .arg(Arg::from_usage("-h, --help 'some help'")))
+}
+
+#[test]
+fn issue_1112_override_help_long() {
+ let m = issue_1112_setup()
+ .get_matches_from_safe(vec!["test", "--help"]);
+
+ assert!(m.is_ok());
+ assert!(m.unwrap().is_present("help"));
+}
+
+#[test]
+fn issue_1112_override_help_short() {
+ let m = issue_1112_setup()
+ .get_matches_from_safe(vec!["test", "-h"]);
+
+ assert!(m.is_ok());
+ assert!(m.unwrap().is_present("help"));
+}
+
+#[test]
+fn issue_1112_override_help_subcmd_long() {
+ let m = issue_1112_setup()
+ .get_matches_from_safe(vec!["test", "foo", "--help"]);
+
+ assert!(m.is_ok());
+ assert!(m.unwrap().subcommand_matches("foo").unwrap().is_present("help"));
+}
+
+#[test]
+fn issue_1112_override_help_subcmd_short() {
+ let m = issue_1112_setup()
+ .get_matches_from_safe(vec!["test", "foo", "-h"]);
+
+ assert!(m.is_ok());
+ assert!(m.unwrap().subcommand_matches("foo").unwrap().is_present("help"));
+}
+
+#[test]
+fn issue_1052_require_delim_help() {
+ let app = App::new("test")
+ .author("Kevin K.")
+ .about("tests stuff")
+ .version("1.3")
+ .arg(Arg::from_usage("-f, --fake <some> <val> 'some help'").require_delimiter(true).value_delimiter(":"));
+
+ assert!(test::compare_output(app, "test --help", REQUIRE_DELIM_HELP, false));
+}
+
+#[test]
+fn hide_env_vals() {
+ use std::env;
+
+ env::set_var("ENVVAR", "MYVAL");
+ let app = App::new("ctest")
+ .version("0.1")
+ .arg(Arg::with_name("pos")
+ .short("p")
+ .long("pos")
+ .value_name("VAL")
+ .possible_values(&["fast", "slow"])
+ .help("Some vals")
+ .takes_value(true))
+ .arg(Arg::with_name("cafe")
+ .short("c")
+ .long("cafe")
+ .value_name("FILE")
+ .hide_env_values(true)
+ .env("ENVVAR")
+ .help("A coffeehouse, coffee shop, or café.")
+ .takes_value(true));
+ assert!(test::compare_output(app, "ctest --help", HIDE_ENV_VALS, false));
+}
+
+#[test]
+fn show_env_vals() {
+ use std::env;
+
+ env::set_var("ENVVAR", "MYVAL");
+ let app = App::new("ctest")
+ .version("0.1")
+ .arg(Arg::with_name("pos")
+ .short("p")
+ .long("pos")
+ .value_name("VAL")
+ .possible_values(&["fast", "slow"])
+ .help("Some vals")
+ .takes_value(true))
+ .arg(Arg::with_name("cafe")
+ .short("c")
+ .long("cafe")
+ .value_name("FILE")
+ .hide_possible_values(true)
+ .env("ENVVAR")
+ .help("A coffeehouse, coffee shop, or café.")
+ .takes_value(true));
+ assert!(test::compare_output(app, "ctest --help", SHOW_ENV_VALS, false));
+}
+
+static ISSUE_897: &'static str = "ctest-foo 0.1
+Long about foo
+
+USAGE:
+ ctest foo
+
+FLAGS:
+ -h, --help
+ Prints help information
+
+ -V, --version
+ Prints version information";
+
+#[test]
+fn show_long_about_issue_897() {
+ let app = App::new("ctest")
+ .version("0.1")
+ .subcommand(SubCommand::with_name("foo")
+ .version("0.1")
+ .about("About foo")
+ .long_about("Long about foo"));
+ assert!(test::compare_output(app, "ctest foo --help", ISSUE_897, false));
+}
+
+static ISSUE_897_SHORT: &'static str = "ctest-foo 0.1
+Long about foo
+
+USAGE:
+ ctest foo
+
+FLAGS:
+ -h, --help Prints help information
+ -V, --version Prints version information";
+
+#[test]
+fn show_short_about_issue_897() {
+ let app = App::new("ctest")
+ .version("0.1")
+ .subcommand(SubCommand::with_name("foo")
+ .version("0.1")
+ .about("About foo")
+ .long_about("Long about foo"));
+ assert!(test::compare_output(app, "ctest foo -h", ISSUE_897_SHORT, false));
+}