diff options
Diffstat (limited to 'cli/flags.rs')
-rw-r--r-- | cli/flags.rs | 57 |
1 files changed, 52 insertions, 5 deletions
diff --git a/cli/flags.rs b/cli/flags.rs index 400798cbd..2a66cb0ea 100644 --- a/cli/flags.rs +++ b/cli/flags.rs @@ -98,7 +98,7 @@ pub enum DenoSubcommand { Test { doc: bool, no_run: bool, - fail_fast: bool, + fail_fast: Option<usize>, quiet: bool, allow_none: bool, include: Option<Vec<String>>, @@ -1001,8 +1001,23 @@ fn test_subcommand<'a, 'b>() -> App<'a, 'b> { Arg::with_name("fail-fast") .long("fail-fast") .alias("failfast") - .help("Stop on first error") - .takes_value(false), + .help("Stop after N errors. Defaults to stopping after first failure.") + .min_values(0) + .required(false) + .takes_value(true) + .require_equals(true) + .value_name("N") + .validator(|val: String| match val.parse::<usize>() { + Ok(val) => { + if val == 0 { + return Err( + "fail-fast should be an number greater than 0".to_string(), + ); + } + Ok(()) + } + Err(_) => Err("fail-fast should be a number".to_string()), + }), ) .arg( Arg::with_name("allow-none") @@ -1696,11 +1711,20 @@ fn test_parse(flags: &mut Flags, matches: &clap::ArgMatches) { let no_run = matches.is_present("no-run"); let doc = matches.is_present("doc"); - let fail_fast = matches.is_present("fail-fast"); let allow_none = matches.is_present("allow-none"); let quiet = matches.is_present("quiet"); let filter = matches.value_of("filter").map(String::from); + let fail_fast = if matches.is_present("fail-fast") { + if let Some(value) = matches.value_of("fail-fast") { + Some(value.parse().unwrap()) + } else { + Some(1) + } + } else { + None + }; + let shuffle = if matches.is_present("shuffle") { let value = if let Some(value) = matches.value_of("shuffle") { value.parse::<u64>().unwrap() @@ -3387,7 +3411,7 @@ mod tests { subcommand: DenoSubcommand::Test { no_run: true, doc: false, - fail_fast: false, + fail_fast: None, filter: Some("- foo".to_string()), allow_none: true, quiet: false, @@ -3427,6 +3451,29 @@ mod tests { } #[test] + fn test_with_fail_fast() { + let r = flags_from_vec(svec!["deno", "test", "--fail-fast=3"]); + assert_eq!( + r.unwrap(), + Flags { + subcommand: DenoSubcommand::Test { + no_run: false, + doc: false, + fail_fast: Some(3), + filter: None, + allow_none: false, + quiet: false, + shuffle: None, + include: None, + concurrent_jobs: 1, + terse: false + }, + ..Flags::default() + } + ); + } + + #[test] fn bundle_with_cafile() { let r = flags_from_vec(svec![ "deno", |