extern crate clap; extern crate regex; include!("../clap-test.rs"); use clap::{App, SubCommand, ErrorKind}; static HELP: &'static str = "clap-test v1.4.8 Kevin K. 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 specific vals [values: fast, slow] --long-option-2 tests long options with exclusions --maxvals3 ... Tests 3 max vals --minvals2 ... Tests 2 min vals --multvals Tests mutliple values, not mult occs --multvalsmo Tests mutliple values, and mult occs -o, --option ... tests options ARGS: tests positionals tests positionals with exclusions ... tests specific values [values: vi, emacs] SUBCOMMANDS: help Prints this message or the help of the given subcommand(s) subcmd tests subcommands"; static AFTER_HELP: &'static str = "some text that comes before the help clap-test v1.4.8 tests clap library USAGE: clap-test [FLAGS] FLAGS: -h, --help Prints help information -V, --version Prints version information some text that comes after the help"; static SC_HELP: &'static str = "subcmd 0.1 Kevin K. tests subcommands USAGE: subcmd [FLAGS] [OPTIONS] [--] [scpositional] FLAGS: -f, --flag tests flags OPTIONS: -o, --option ... tests options ARGS: tests positionals"; #[test] fn help_short() { let m = App::new("test") .author("Kevin K.") .about("tests stuff") .version("1.3") .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 = App::new("test") .author("Kevin K.") .about("tests stuff") .version("1.3") .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 = App::new("test") .author("Kevin K.") .about("tests stuff") .version("1.3") .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 = App::new("test") .author("Kevin K.") .about("tests stuff") .version("1.3") .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 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() { test::check_help(test::complex_app(), HELP); } #[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"); test::check_help(app, AFTER_HELP); } #[test] fn complex_subcommand_help_output() { let mut a = test::complex_app(); let _ = a.get_matches_from_safe_borrow(vec![""]); let sc = a.p.subcommands.iter().filter(|s| s.p.meta.name == "subcmd").next().unwrap(); // Now we check the output of print_help() let mut help = vec![]; sc.write_help(&mut help).ok().expect("failed to print help"); assert_eq!(&*String::from_utf8(help).unwrap(), SC_HELP); }