summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cli/tests/integration/bench_tests.rs5
-rw-r--r--cli/tests/integration/test_tests.rs5
-rw-r--r--cli/tests/testdata/bench/before_unload_prevent_default.out7
-rw-r--r--cli/tests/testdata/bench/before_unload_prevent_default.ts6
-rw-r--r--cli/tests/testdata/test/before_unload_prevent_default.out5
-rw-r--r--cli/tests/testdata/test/before_unload_prevent_default.ts6
-rw-r--r--cli/tools/bench.rs9
-rw-r--r--cli/tools/test.rs9
8 files changed, 40 insertions, 12 deletions
diff --git a/cli/tests/integration/bench_tests.rs b/cli/tests/integration/bench_tests.rs
index 16ac5852e..5b7361b30 100644
--- a/cli/tests/integration/bench_tests.rs
+++ b/cli/tests/integration/bench_tests.rs
@@ -114,6 +114,11 @@ itest!(finally_timeout {
output: "bench/finally_timeout.out",
});
+itest!(before_unload_prevent_default {
+ args: "bench --quiet bench/before_unload_prevent_default.ts",
+ output: "bench/before_unload_prevent_default.out",
+});
+
itest!(group_baseline {
args: "bench bench/group_baseline.ts",
exit_code: 0,
diff --git a/cli/tests/integration/test_tests.rs b/cli/tests/integration/test_tests.rs
index 0dea3b844..04966f4ee 100644
--- a/cli/tests/integration/test_tests.rs
+++ b/cli/tests/integration/test_tests.rs
@@ -361,6 +361,11 @@ itest!(test_with_custom_jsx {
output: "test/hello_world.out",
});
+itest!(before_unload_prevent_default {
+ args: "test --quiet test/before_unload_prevent_default.ts",
+ output: "test/before_unload_prevent_default.out",
+});
+
#[test]
fn captured_output() {
let context = TestContext::default();
diff --git a/cli/tests/testdata/bench/before_unload_prevent_default.out b/cli/tests/testdata/bench/before_unload_prevent_default.out
new file mode 100644
index 000000000..916681625
--- /dev/null
+++ b/cli/tests/testdata/bench/before_unload_prevent_default.out
@@ -0,0 +1,7 @@
+cpu: [WILDCARD]
+runtime: deno [WILDCARD]
+
+[WILDCARD]/before_unload_prevent_default.ts
+benchmark time (avg) (min … max) p75 p99 p995
+------------------------------------------------- -----------------------------
+foo [WILDCARD] [WILDCARD]/iter[WILDCARD]([WILDCARD] … [WILDCARD]) [WILDCARD]
diff --git a/cli/tests/testdata/bench/before_unload_prevent_default.ts b/cli/tests/testdata/bench/before_unload_prevent_default.ts
new file mode 100644
index 000000000..2759d4659
--- /dev/null
+++ b/cli/tests/testdata/bench/before_unload_prevent_default.ts
@@ -0,0 +1,6 @@
+addEventListener("beforeunload", (e) => {
+ // The worker should be killed once benchmarks are done regardless of this.
+ e.preventDefault();
+});
+
+Deno.bench("foo", () => {});
diff --git a/cli/tests/testdata/test/before_unload_prevent_default.out b/cli/tests/testdata/test/before_unload_prevent_default.out
new file mode 100644
index 000000000..09da32ff9
--- /dev/null
+++ b/cli/tests/testdata/test/before_unload_prevent_default.out
@@ -0,0 +1,5 @@
+running 1 test from [WILDCARD]/before_unload_prevent_default.ts
+foo ... ok ([WILDCARD])
+
+ok | 1 passed | 0 failed ([WILDCARD])
+
diff --git a/cli/tests/testdata/test/before_unload_prevent_default.ts b/cli/tests/testdata/test/before_unload_prevent_default.ts
new file mode 100644
index 000000000..421ded520
--- /dev/null
+++ b/cli/tests/testdata/test/before_unload_prevent_default.ts
@@ -0,0 +1,6 @@
+addEventListener("beforeunload", (e) => {
+ // The worker should be killed once tests are done regardless of this.
+ e.preventDefault();
+});
+
+Deno.test("foo", () => {});
diff --git a/cli/tools/bench.rs b/cli/tools/bench.rs
index aa5bd044d..3d5f99aba 100644
--- a/cli/tools/bench.rs
+++ b/cli/tools/bench.rs
@@ -498,12 +498,9 @@ async fn bench_specifier(
sender.send(BenchEvent::Result(desc.id, result))?;
}
- loop {
- if !worker.dispatch_beforeunload_event(located_script_name!())? {
- break;
- }
- worker.run_event_loop(false).await?;
- }
+ // Ignore `defaultPrevented` of the `beforeunload` event. We don't allow the
+ // event loop to continue beyond what's needed to await results.
+ worker.dispatch_beforeunload_event(located_script_name!())?;
worker.dispatch_unload_event(located_script_name!())?;
Ok(())
}
diff --git a/cli/tools/test.rs b/cli/tools/test.rs
index 847260352..50e220a46 100644
--- a/cli/tools/test.rs
+++ b/cli/tools/test.rs
@@ -1033,12 +1033,9 @@ pub async fn test_specifier(
sender.send(TestEvent::Result(desc.id, result, elapsed as u64))?;
}
- loop {
- if !worker.dispatch_beforeunload_event(located_script_name!())? {
- break;
- }
- worker.run_event_loop(false).await?;
- }
+ // Ignore `defaultPrevented` of the `beforeunload` event. We don't allow the
+ // event loop to continue beyond what's needed to await results.
+ worker.dispatch_beforeunload_event(located_script_name!())?;
worker.dispatch_unload_event(located_script_name!())?;
if let Some(coverage_collector) = coverage_collector.as_mut() {