summaryrefslogtreecommitdiff
path: root/cli/flags.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/flags.rs')
-rw-r--r--cli/flags.rs57
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",