summaryrefslogtreecommitdiffstats
path: root/test/wpt/start-websockets.mjs
diff options
context:
space:
mode:
Diffstat (limited to 'test/wpt/start-websockets.mjs')
-rw-r--r--test/wpt/start-websockets.mjs47
1 files changed, 47 insertions, 0 deletions
diff --git a/test/wpt/start-websockets.mjs b/test/wpt/start-websockets.mjs
new file mode 100644
index 0000000..79aa297
--- /dev/null
+++ b/test/wpt/start-websockets.mjs
@@ -0,0 +1,47 @@
+import { WPTRunner } from './runner/runner.mjs'
+import { join } from 'path'
+import { fileURLToPath } from 'url'
+import { fork } from 'child_process'
+import { on } from 'events'
+
+const { WPT_REPORT } = process.env
+
+function isGlobalAvailable () {
+ if (typeof WebSocket !== 'undefined') {
+ return true
+ }
+
+ const [nodeMajor, nodeMinor] = process.versions.node.split('.').map(v => Number(v))
+
+ // TODO: keep this up to date when backports to earlier majors happen
+ return nodeMajor >= 21 || (nodeMajor === 20 && nodeMinor >= 10)
+}
+
+if (process.env.CI) {
+ // TODO(@KhafraDev): figure out *why* these tests are flaky in the CI.
+ // process.exit(0)
+}
+
+const serverPath = fileURLToPath(join(import.meta.url, '../server/websocket.mjs'))
+
+const child = fork(serverPath, [], {
+ stdio: ['pipe', 'pipe', 'pipe', 'ipc']
+})
+
+child.on('exit', (code) => process.exit(code))
+
+for await (const [message] of on(child, 'message')) {
+ if (message.server) {
+ const runner = new WPTRunner('websockets', message.server, {
+ appendReport: !!WPT_REPORT && isGlobalAvailable(),
+ reportPath: WPT_REPORT
+ })
+ runner.run()
+
+ runner.once('completion', () => {
+ if (child.connected) {
+ child.send('shutdown')
+ }
+ })
+ }
+}