extern crate clap; use clap::{App, Arg, SubCommand, AppSettings, ErrorKind}; #[test] fn sub_command_negate_required() { App::new("sub_command_negate") .setting(AppSettings::SubcommandsNegateReqs) .arg(Arg::with_name("test") .required(true) .index(1)) .subcommand(SubCommand::with_name("sub1")) .get_matches_from(vec!["myprog", "sub1"]); } #[test] fn sub_command_negate_required_2() { let result = App::new("sub_command_negate") .setting(AppSettings::SubcommandsNegateReqs) .arg(Arg::with_name("test") .required(true) .index(1)) .subcommand(SubCommand::with_name("sub1")) .get_matches_from_safe(vec![""]); assert!(result.is_err()); let err = result.err().unwrap(); assert_eq!(err.kind, ErrorKind::MissingRequiredArgument); } #[test] fn sub_command_required() { let result = App::new("sc_required") .setting(AppSettings::SubcommandRequired) .subcommand(SubCommand::with_name("sub1")) .get_matches_from_safe(vec![""]); assert!(result.is_err()); let err = result.err().unwrap(); assert_eq!(err.kind, ErrorKind::MissingSubcommand); } #[test] fn arg_required_else_help() { let result = App::new("arg_required") .setting(AppSettings::ArgRequiredElseHelp) .arg(Arg::with_name("test") .index(1)) .get_matches_from_safe(vec![""]); assert!(result.is_err()); let err = result.err().unwrap(); assert_eq!(err.kind, ErrorKind::MissingArgumentOrSubcommand); } #[test] fn no_bin_name() { let result = App::new("arg_required") .setting(AppSettings::NoBinaryName) .arg(Arg::with_name("test") .required(true) .index(1)) .get_matches_from_safe(vec!["testing"]); assert!(result.is_ok()); let matches = result.unwrap(); assert_eq!(matches.value_of("test").unwrap(), "testing"); } #[test] fn unified_help() { let mut app = App::new("test") .author("Kevin K.") .about("tests stuff") .version("1.3") .setting(AppSettings::UnifiedHelpMessage) .args_from_usage("-f, --flag 'some flag' [arg1] 'some pos arg' --option [opt] 'some option'"); // We call a get_matches method to cause --help and --version to be built let _ = app.get_matches_from_safe_borrow(vec![""]); // Now we check the output of print_help() let mut help = vec![]; app.write_help(&mut help).ok().expect("failed to print help"); assert_eq!(&*String::from_utf8_lossy(&*help), &*String::from("test 1.3\n\ Kevin K. tests stuff USAGE: \ttest [OPTIONS] [ARGS] OPTIONS: -f, --flag some flag -h, --help Prints help information --option some option -V, --version Prints version information ARGS: arg1 some pos arg\n")); } #[test] fn app_settings_fromstr() { assert_eq!("subcommandsnegatereqs".parse::().ok().unwrap(), AppSettings::SubcommandsNegateReqs); assert_eq!("subcommandsrequired".parse::().ok().unwrap(), AppSettings::SubcommandRequired); assert_eq!("argrequiredelsehelp".parse::().ok().unwrap(), AppSettings::ArgRequiredElseHelp); assert_eq!("globalversion".parse::().ok().unwrap(), AppSettings::GlobalVersion); assert_eq!("versionlesssubcommands".parse::().ok().unwrap(), AppSettings::VersionlessSubcommands); assert_eq!("unifiedhelpmessage".parse::().ok().unwrap(), AppSettings::UnifiedHelpMessage); assert_eq!("waitonerror".parse::().ok().unwrap(), AppSettings::WaitOnError); assert_eq!("subcommandrequiredelsehelp".parse::().ok().unwrap(), AppSettings::SubcommandRequiredElseHelp); assert_eq!("hidden".parse::().ok().unwrap(), AppSettings::Hidden); assert!("hahahaha".parse::().is_err()); }