summaryrefslogtreecommitdiff
path: root/cli/tests
diff options
context:
space:
mode:
authorAndreu Botella <abb@randomunok.com>2021-10-11 09:50:18 -0700
committerGitHub <noreply@github.com>2021-10-11 18:50:18 +0200
commitfbcbbd7ae3fa2d57e8ad026a1f9f01c6d07fd80b (patch)
tree807662617f36ec1da967c4c56733307fffe25a81 /cli/tests
parentc40d5040cd577aa4ebe552242a06163fbcbc3d4b (diff)
fix(runtime): Declare `Window.self` and `DedicatedWorkerGlobalScope.name` with `util.writable()` (#12378)
`Window`'s `self` property and `DedicatedWorkerGlobalScope`'s `name` property are defined as Web IDL read-only attributes with the `[Replaceable]` extended attribute, meaning that their setter will redefine the property as a data property with the set value, rather than changing some internal state. Deno currently defines them as read-only data properties instead. Given that Web IDL requires all attributes to be accessor properties rather than data properties, but Deno exposes almost all of those properties as either read-only or writable data properties, it makes sense to expose `[Replaceable]` properties as writable as well – as is already the case with `WindowOrWorkerGlobalScope`'s `performance` property.
Diffstat (limited to 'cli/tests')
-rw-r--r--cli/tests/integration/run_tests.rs7
-rw-r--r--cli/tests/testdata/replace_self.js21
-rw-r--r--cli/tests/testdata/replace_self.js.out4
3 files changed, 32 insertions, 0 deletions
diff --git a/cli/tests/integration/run_tests.rs b/cli/tests/integration/run_tests.rs
index f247aa93f..f469bb364 100644
--- a/cli/tests/integration/run_tests.rs
+++ b/cli/tests/integration/run_tests.rs
@@ -1185,6 +1185,13 @@ itest!(error_import_map_unable_to_load {
exit_code: 1,
});
+// Test that setting `self` in the main thread to some other value doesn't break
+// the world.
+itest!(replace_self {
+ args: "run replace_self.js",
+ output: "replace_self.js.out",
+});
+
itest!(worker_event_handler_test {
args: "run --quiet --reload --allow-read worker_event_handler_test.js",
output: "worker_event_handler_test.js.out",
diff --git a/cli/tests/testdata/replace_self.js b/cli/tests/testdata/replace_self.js
new file mode 100644
index 000000000..cfd473cd3
--- /dev/null
+++ b/cli/tests/testdata/replace_self.js
@@ -0,0 +1,21 @@
+// Test that setting `self` in the main thread to some other value doesn't break
+// the world, in particular for events fired on the global scope.
+
+// deno-lint-ignore no-global-assign
+self = null;
+
+addEventListener("load", () => {
+ console.log("load event (event listener)");
+});
+
+addEventListener("unload", () => {
+ console.log("unload event (event listener)");
+});
+
+globalThis.onload = () => {
+ console.log("load event (event handler)");
+};
+
+globalThis.onunload = () => {
+ console.log("unload event (event handler)");
+};
diff --git a/cli/tests/testdata/replace_self.js.out b/cli/tests/testdata/replace_self.js.out
new file mode 100644
index 000000000..aaffb5a62
--- /dev/null
+++ b/cli/tests/testdata/replace_self.js.out
@@ -0,0 +1,4 @@
+load event (event listener)
+load event (event handler)
+unload event (event listener)
+unload event (event handler)