diff options
author | Casper Beyer <caspervonb@pm.me> | 2021-08-23 18:37:02 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-08-23 12:37:02 +0200 |
commit | f3b2f23a1d95769082c97fc966d6eeddaea9668a (patch) | |
tree | b83e8989fb18f8d774e97727902d606263cafdfc | |
parent | 198699fabae37fb3f1edd6aa058ea050cc43bb19 (diff) |
refactor(cli/flags): use an optional non zero usize for `fail-fast` (#11804)
Changes the type of the `fail_fast` flag from `Option<usize>` to
`Option<NonZeroUsize>` as an optional value of zero isn't sound.
-rw-r--r-- | cli/flags.rs | 22 | ||||
-rw-r--r-- | cli/main.rs | 3 | ||||
-rw-r--r-- | cli/tools/test_runner.rs | 4 |
3 files changed, 13 insertions, 16 deletions
diff --git a/cli/flags.rs b/cli/flags.rs index 86a5405b2..8236d63db 100644 --- a/cli/flags.rs +++ b/cli/flags.rs @@ -101,7 +101,7 @@ pub enum DenoSubcommand { Test { doc: bool, no_run: bool, - fail_fast: Option<usize>, + fail_fast: Option<NonZeroUsize>, quiet: bool, allow_none: bool, include: Option<Vec<String>>, @@ -1047,16 +1047,9 @@ fn test_subcommand<'a, 'b>() -> App<'a, 'b> { .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()), + .validator(|val: String| match val.parse::<NonZeroUsize>() { + Ok(_) => Ok(()), + Err(_) => Err("fail-fast should be a non zero integer".to_string()), }), ) .arg( @@ -1786,7 +1779,7 @@ fn test_parse(flags: &mut Flags, matches: &clap::ArgMatches) { if let Some(value) = matches.value_of("fail-fast") { Some(value.parse().unwrap()) } else { - Some(1) + Some(NonZeroUsize::new(1).unwrap()) } } else { None @@ -3663,7 +3656,7 @@ mod tests { subcommand: DenoSubcommand::Test { no_run: false, doc: false, - fail_fast: Some(3), + fail_fast: Some(NonZeroUsize::new(3).unwrap()), filter: None, allow_none: false, quiet: false, @@ -3674,6 +3667,9 @@ mod tests { ..Flags::default() } ); + + let r = flags_from_vec(svec!["deno", "test", "--fail-fast=0"]); + assert!(r.is_err()); } #[test] diff --git a/cli/main.rs b/cli/main.rs index 0c758e631..45afd0329 100644 --- a/cli/main.rs +++ b/cli/main.rs @@ -77,6 +77,7 @@ use std::env; use std::io::Read; use std::io::Write; use std::iter::once; +use std::num::NonZeroUsize; use std::path::PathBuf; use std::pin::Pin; use std::rc::Rc; @@ -1004,7 +1005,7 @@ async fn test_command( include: Option<Vec<String>>, no_run: bool, doc: bool, - fail_fast: Option<usize>, + fail_fast: Option<NonZeroUsize>, quiet: bool, allow_none: bool, filter: Option<String>, diff --git a/cli/tools/test_runner.rs b/cli/tools/test_runner.rs index d2612e59d..a4bc99822 100644 --- a/cli/tools/test_runner.rs +++ b/cli/tools/test_runner.rs @@ -469,7 +469,7 @@ pub async fn run_tests( doc_modules: Vec<ModuleSpecifier>, test_modules: Vec<ModuleSpecifier>, no_run: bool, - fail_fast: Option<usize>, + fail_fast: Option<NonZeroUsize>, quiet: bool, allow_none: bool, filter: Option<String>, @@ -621,7 +621,7 @@ pub async fn run_tests( } if let Some(x) = fail_fast { - if summary.failed >= x { + if summary.failed >= x.get() { break; } } |