From cec42ad868253efb3746dfc9233e7a57f2b30446 Mon Sep 17 00:00:00 2001 From: BOUILLAGUET Quentin Date: Mon, 6 May 2024 19:18:45 +0200 Subject: [PATCH] chore(test): add web worker polyfill --- test/unit/bootstrap.js | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/test/unit/bootstrap.js b/test/unit/bootstrap.js index 46c2e5a60a..511bdf47d4 100644 --- a/test/unit/bootstrap.js +++ b/test/unit/bootstrap.js @@ -2,6 +2,43 @@ import fetch from 'node-fetch'; import { Camera } from 'three'; import { DOMParser } from '@xmldom/xmldom'; +import threads from 'worker_threads'; + +const WORKER = Symbol('worker'); + +class Worker extends EventTarget { + constructor(url) { + super(); + + const worker = new threads.Worker(url); + this[WORKER] = worker; + + worker.on('message', (data) => { + const event = new Event('message'); + event.data = data; + this.dispatchEvent(event); + }); + + worker.on('error', () => { + const event = new Event('error'); + this.dispatchEvent(event); + }); + + worker.on('messageerror', (data) => { + const event = new Event('messageError'); + event.data = data; + this.dispatchEvent(event); + }); + } + + postMessage(data, transferList) { + this[WORKER].postMessage(data, transferList); + } + + terminate() { + this[WORKER].terminate(); + } +} global.window = { addEventListener: () => {}, @@ -10,6 +47,8 @@ global.window = { setTimeout, }; +global.Worker = Worker; + global.requestAnimationFrame = () => {}; global.fetch = fetch; global.fetch.Promise = Promise;