diff options
Diffstat (limited to 'test/js/web/web-globals.test.js')
-rw-r--r-- | test/js/web/web-globals.test.js | 51 |
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"); |