aboutsummaryrefslogtreecommitdiff
path: root/test/js/web/web-globals.test.js
diff options
context:
space:
mode:
Diffstat (limited to 'test/js/web/web-globals.test.js')
-rw-r--r--test/js/web/web-globals.test.js51
1 files changed, 51 insertions, 0 deletions
diff --git a/test/js/web/web-globals.test.js b/test/js/web/web-globals.test.js
index d687a1290..46422c210 100644
--- a/test/js/web/web-globals.test.js
+++ b/test/js/web/web-globals.test.js
@@ -19,8 +19,59 @@ test("exists", () => {
expect(typeof WebSocket !== "undefined").toBe(true);
expect(typeof Blob !== "undefined").toBe(true);
expect(typeof FormData !== "undefined").toBe(true);
+ expect(typeof Worker !== "undefined").toBe(true);
});
+const globalSetters = [
+ [ErrorEvent, "onerror", "error", "error"],
+ [MessageEvent, "onmessage", "message", "data"],
+];
+
+for (const [Constructor, name, eventName, prop] of globalSetters) {
+ test(`self.${name}`, () => {
+ var called = false;
+
+ const callback = ({ [prop]: data }) => {
+ expect(data).toBe("hello");
+ called = true;
+ };
+
+ try {
+ globalThis[name] = callback;
+ expect(globalThis[name]).toBe(callback);
+ dispatchEvent(new Constructor(eventName, { data: "hello", error: "hello" }));
+ expect(called).toBe(true);
+ } finally {
+ globalThis[name] = null;
+
+ called = false;
+ dispatchEvent(new Constructor(eventName, { data: "hello", error: "hello" }));
+ expect(called).toBe(false);
+ }
+ });
+
+ test(`self.addEventListener(${name})`, () => {
+ var called = false;
+
+ const callback = ({ [prop]: data }) => {
+ expect(data).toBe("hello");
+ called = true;
+ };
+
+ try {
+ addEventListener(eventName, callback);
+ dispatchEvent(new Constructor(eventName, { data: "hello", error: "hello" }));
+ expect(called).toBe(true);
+ } finally {
+ globalThis[name] = null;
+ removeEventListener(eventName, callback);
+ called = false;
+ dispatchEvent(new Constructor(eventName, { data: "hello", error: "hello" }));
+ expect(called).toBe(false);
+ }
+ });
+}
+
test("CloseEvent", () => {
var event = new CloseEvent("close", { reason: "world" });
expect(event.type).toBe("close");