From 71375491d135b7e5e48a09a39317aa7510594a35 Mon Sep 17 00:00:00 2001 From: Asher Gomez Date: Thu, 23 May 2024 13:04:12 +1000 Subject: feat(cli/test): `deno test --clean` (#23519) The result of the call is ignored as it throws even when the directory does not exist. Closes #23491 --- cli/args/flags.rs | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) (limited to 'cli/args') diff --git a/cli/args/flags.rs b/cli/args/flags.rs index 1c18ce00f..2559cf0a1 100644 --- a/cli/args/flags.rs +++ b/cli/args/flags.rs @@ -333,6 +333,7 @@ pub struct TestFlags { pub doc: bool, pub no_run: bool, pub coverage_dir: Option, + pub clean: bool, pub fail_fast: Option, pub files: FileFlags, pub allow_none: bool, @@ -2630,6 +2631,14 @@ Directory arguments are expanded to all contained files matching the glob .conflicts_with("inspect-brk") .help("Collect coverage profile data into DIR. If DIR is not specified, it uses 'coverage/'."), ) + .arg( + Arg::new("clean") + .long("clean") + .help("Empty the temporary coverage profile data directory before running tests. + +Note: running multiple `deno test --clean` calls in series or parallel for the same coverage directory may cause race conditions.") + .action(ArgAction::SetTrue), + ) .arg( Arg::new("parallel") .long("parallel") @@ -4240,6 +4249,7 @@ fn test_parse(flags: &mut Flags, matches: &mut ArgMatches) { let doc = matches.get_flag("doc"); let allow_none = matches.get_flag("allow-none"); let filter = matches.remove_one::("filter"); + let clean = matches.get_flag("clean"); let fail_fast = if matches.contains_id("fail-fast") { Some( @@ -4325,6 +4335,7 @@ fn test_parse(flags: &mut Flags, matches: &mut ArgMatches) { no_run, doc, coverage_dir: matches.remove_one::("coverage"), + clean, fail_fast, files: FileFlags { include, ignore }, filter, @@ -8189,7 +8200,7 @@ mod tests { #[test] fn test_with_flags() { #[rustfmt::skip] - let r = flags_from_vec(svec!["deno", "test", "--unstable", "--no-npm", "--no-remote", "--trace-leaks", "--no-run", "--filter", "- foo", "--coverage=cov", "--location", "https:foo", "--allow-net", "--allow-none", "dir1/", "dir2/", "--", "arg1", "arg2"]); + let r = flags_from_vec(svec!["deno", "test", "--unstable", "--no-npm", "--no-remote", "--trace-leaks", "--no-run", "--filter", "- foo", "--coverage=cov", "--clean", "--location", "https:foo", "--allow-net", "--allow-none", "dir1/", "dir2/", "--", "arg1", "arg2"]); assert_eq!( r.unwrap(), Flags { @@ -8207,6 +8218,7 @@ mod tests { concurrent_jobs: None, trace_leaks: true, coverage_dir: Some("cov".to_string()), + clean: true, watch: Default::default(), reporter: Default::default(), junit_path: None, @@ -8294,6 +8306,7 @@ mod tests { concurrent_jobs: Some(NonZeroUsize::new(4).unwrap()), trace_leaks: false, coverage_dir: None, + clean: false, watch: Default::default(), junit_path: None, }), @@ -8330,6 +8343,7 @@ mod tests { concurrent_jobs: None, trace_leaks: false, coverage_dir: None, + clean: false, watch: Default::default(), reporter: Default::default(), junit_path: None, @@ -8371,6 +8385,7 @@ mod tests { concurrent_jobs: None, trace_leaks: false, coverage_dir: None, + clean: false, watch: Default::default(), reporter: Default::default(), junit_path: None, @@ -8506,6 +8521,7 @@ mod tests { concurrent_jobs: None, trace_leaks: false, coverage_dir: None, + clean: false, watch: Default::default(), reporter: Default::default(), junit_path: None, @@ -8540,6 +8556,7 @@ mod tests { concurrent_jobs: None, trace_leaks: false, coverage_dir: None, + clean: false, watch: Some(Default::default()), reporter: Default::default(), junit_path: None, @@ -8573,6 +8590,7 @@ mod tests { concurrent_jobs: None, trace_leaks: false, coverage_dir: None, + clean: false, watch: Some(Default::default()), reporter: Default::default(), junit_path: None, @@ -8608,6 +8626,7 @@ mod tests { concurrent_jobs: None, trace_leaks: false, coverage_dir: None, + clean: false, watch: Some(WatchFlags { hmr: false, no_clear_screen: true, -- cgit v1.2.3