diff options
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, ); |