diff options
author | David Sherret <dsherret@users.noreply.github.com> | 2024-06-05 11:04:16 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-05 17:04:16 +0200 |
commit | 7ed90a20d04982ae15a52ae2378cbffd4b6839df (patch) | |
tree | 3297d6f7227fbf1cf80e17a2a376ef4dfa52e6ad /tests/specs/mod.rs | |
parent | 0544d60012006b1c7799d8b6eafacec9567901ad (diff) |
fix: better handling of npm resolution occurring on workers (#24094)
Closes https://github.com/denoland/deno/issues/24063
Diffstat (limited to 'tests/specs/mod.rs')
-rw-r--r-- | tests/specs/mod.rs | 36 |
1 files changed, 29 insertions, 7 deletions
diff --git a/tests/specs/mod.rs b/tests/specs/mod.rs index a153322db..3a52ab29e 100644 --- a/tests/specs/mod.rs +++ b/tests/specs/mod.rs @@ -17,6 +17,7 @@ use file_test_runner::collection::CollectTestsError; use file_test_runner::collection::CollectedCategoryOrTest; use file_test_runner::collection::CollectedTest; use file_test_runner::collection::CollectedTestCategory; +use file_test_runner::SubTestResult; use file_test_runner::TestResult; use serde::Deserialize; use test_util::tests_path; @@ -109,6 +110,8 @@ struct MultiStepMetaData { #[serde(default)] pub envs: HashMap<String, String>, #[serde(default)] + pub repeat: Option<usize>, + #[serde(default)] pub steps: Vec<StepMetaData>, } @@ -119,6 +122,8 @@ struct SingleTestMetaData { pub base: Option<String>, #[serde(default)] pub temp_dir: bool, + #[serde(default)] + pub repeat: Option<usize>, #[serde(flatten)] pub step: StepMetaData, } @@ -128,6 +133,7 @@ impl SingleTestMetaData { MultiStepMetaData { base: self.base, temp_dir: self.temp_dir, + repeat: self.repeat, envs: Default::default(), steps: vec![self.step], } @@ -213,8 +219,26 @@ fn run_test(test: &CollectedTest<serde_json::Value>) -> TestResult { let cwd = PathRef::new(&test.path).parent(); let metadata_value = test.data.clone(); let diagnostic_logger = Rc::new(RefCell::new(Vec::<u8>::new())); - let result = TestResult::from_maybe_panic(AssertUnwindSafe(|| { - run_test_inner(metadata_value, &cwd, diagnostic_logger.clone()) + let result = TestResult::from_maybe_panic_or_result(AssertUnwindSafe(|| { + let metadata = deserialize_value(metadata_value); + if let Some(repeat) = metadata.repeat { + TestResult::SubTests( + (0..repeat) + .map(|i| { + let diagnostic_logger = diagnostic_logger.clone(); + SubTestResult { + name: format!("run {}", i + 1), + result: TestResult::from_maybe_panic(AssertUnwindSafe(|| { + run_test_inner(&metadata, &cwd, diagnostic_logger); + })), + } + }) + .collect(), + ) + } else { + run_test_inner(&metadata, &cwd, diagnostic_logger.clone()); + TestResult::Passed + } })); match result { TestResult::Failed { @@ -232,15 +256,13 @@ fn run_test(test: &CollectedTest<serde_json::Value>) -> TestResult { } fn run_test_inner( - metadata_value: serde_json::Value, + metadata: &MultiStepMetaData, cwd: &PathRef, diagnostic_logger: Rc<RefCell<Vec<u8>>>, ) { - let metadata = deserialize_value(metadata_value); - - let context = test_context_from_metadata(&metadata, cwd, diagnostic_logger); + let context = test_context_from_metadata(metadata, cwd, diagnostic_logger); for step in metadata.steps.iter().filter(|s| should_run_step(s)) { - let run_func = || run_step(step, &metadata, cwd, &context); + let run_func = || run_step(step, metadata, cwd, &context); if step.flaky { run_flaky(run_func); } else { |