From 80dbcd3ddf589d20ae7786c716959c6d48ea1f1e Mon Sep 17 00:00:00 2001 From: mash-graz Date: Mon, 11 Mar 2024 00:23:06 +0100 Subject: fix(ext/node) implement receiveMessageOnPort for node:worker_threads (#22766) Implementation of `receiveMessageOnPort` for `node:worker_threads` Fixes: #22702 --- .../test-worker-message-port-receive-message.js | 40 ++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 tests/node_compat/test/parallel/test-worker-message-port-receive-message.js (limited to 'tests/node_compat/test/parallel') diff --git a/tests/node_compat/test/parallel/test-worker-message-port-receive-message.js b/tests/node_compat/test/parallel/test-worker-message-port-receive-message.js new file mode 100644 index 000000000..3945a8a1f --- /dev/null +++ b/tests/node_compat/test/parallel/test-worker-message-port-receive-message.js @@ -0,0 +1,40 @@ +// deno-fmt-ignore-file +// deno-lint-ignore-file + +// Copyright Joyent and Node contributors. All rights reserved. MIT license. +// Taken from Node 18.12.1 +// This file is automatically generated by `tools/node_compat/setup.ts`. Do not modify this file manually. + +'use strict'; +const common = require('../common'); +const assert = require('assert'); +const { MessageChannel, receiveMessageOnPort } = require('worker_threads'); + +const { port1, port2 } = new MessageChannel(); + +const message1 = { hello: 'world' }; +const message2 = { foo: 'bar' }; + +// Make sure receiveMessageOnPort() works in a FIFO way, the same way it does +// when we’re using events. +assert.strictEqual(receiveMessageOnPort(port2), undefined); +port1.postMessage(message1); +port1.postMessage(message2); +assert.deepStrictEqual(receiveMessageOnPort(port2), { message: message1 }); +assert.deepStrictEqual(receiveMessageOnPort(port2), { message: message2 }); +assert.strictEqual(receiveMessageOnPort(port2), undefined); +assert.strictEqual(receiveMessageOnPort(port2), undefined); + +// Make sure message handlers aren’t called. +port2.addEventListener('message', common.mustNotCall()); +port1.postMessage(message1); +assert.deepStrictEqual(receiveMessageOnPort(port2), { message: message1 }); +port1.close(); + +for (const value of [null, 0, -1, {}, []]) { + assert.throws(() => receiveMessageOnPort(value), { + name: 'TypeError', + code: 'ERR_INVALID_ARG_TYPE', + message: 'The "port" argument must be a MessagePort instance' + }); +} -- cgit v1.2.3