diff options
author | Casper Beyer <caspervonb@pm.me> | 2021-07-26 20:05:44 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-07-26 14:05:44 +0200 |
commit | b2fcd3d01458072265e5ce9bfe9e8ed34fe4c00b (patch) | |
tree | 5e43726d056f35bd9e819f2cb0028e3c5fa5c570 /cli/tools/test_runner.rs | |
parent | 9e89fe2fe8061378d2e0d1371f17c5ccc4a351f3 (diff) |
fix(cli): side-load test modules (#11515)
This fixes a regression introduced in 1.9 where test modules became main
modules by side loading them in a generated module.
Diffstat (limited to 'cli/tools/test_runner.rs')
-rw-r--r-- | cli/tools/test_runner.rs | 60 |
1 files changed, 34 insertions, 26 deletions
diff --git a/cli/tools/test_runner.rs b/cli/tools/test_runner.rs index b185e3361..6089d10a9 100644 --- a/cli/tools/test_runner.rs +++ b/cli/tools/test_runner.rs @@ -35,6 +35,7 @@ use std::sync::Arc; use std::time::Duration; use std::time::Instant; use swc_common::comments::CommentKind; +use uuid::Uuid; #[derive(Debug, Clone, PartialEq, Deserialize)] #[serde(rename_all = "camelCase")] @@ -263,10 +264,38 @@ where pub async fn run_test_file( program_state: Arc<ProgramState>, main_module: ModuleSpecifier, - test_module: ModuleSpecifier, permissions: Permissions, + quiet: bool, + filter: Option<String>, + shuffle: Option<u64>, channel: Sender<TestEvent>, ) -> Result<(), AnyError> { + let test_module = + deno_core::resolve_path(&format!("{}$deno$test.js", Uuid::new_v4()))?; + let test_source = format!( + r#" + import "{}"; + await new Promise(resolve => setTimeout(resolve, 0)); + await Deno[Deno.internal].runTests({}); + "#, + main_module, + json!({ + "disableLog": quiet, + "filter": filter, + "shuffle": shuffle, + }) + ); + + let test_file = File { + local: test_module.to_file_path().unwrap(), + maybe_types: None, + media_type: MediaType::JavaScript, + source: test_source.clone(), + specifier: test_module.clone(), + }; + + program_state.file_fetcher.insert_cached(test_file); + let mut worker = create_main_worker(&program_state, main_module.clone(), permissions, true); @@ -293,8 +322,6 @@ pub async fn run_test_file( None }; - worker.execute_module(&main_module).await?; - worker.execute_script( &located_script_name!(), "window.dispatchEvent(new Event('load'))", @@ -443,34 +470,13 @@ pub async fn run_tests( return Ok(()); } - // Because scripts, and therefore worker.execute cannot detect unresolved promises at the moment - // we generate a module for the actual test execution. - let test_options = json!({ - "disableLog": quiet, - "filter": filter, - "shuffle": shuffle, - }); - - let test_module = deno_core::resolve_path("$deno$test.js")?; - let test_source = - format!("await Deno[Deno.internal].runTests({});", test_options); - let test_file = File { - local: test_module.to_file_path().unwrap(), - maybe_types: None, - media_type: MediaType::JavaScript, - source: test_source.clone(), - specifier: test_module.clone(), - }; - - program_state.file_fetcher.insert_cached(test_file); - let (sender, receiver) = channel::<TestEvent>(); let join_handles = test_modules.iter().map(move |main_module| { let program_state = program_state.clone(); let main_module = main_module.clone(); - let test_module = test_module.clone(); let permissions = permissions.clone(); + let filter = filter.clone(); let sender = sender.clone(); tokio::task::spawn_blocking(move || { @@ -478,8 +484,10 @@ pub async fn run_tests( let future = run_test_file( program_state, main_module, - test_module, permissions, + quiet, + filter, + shuffle, sender, ); |