1'use strict'; 2const common = require('../common'); 3const assert = require('assert'); 4const { MessageChannel, receiveMessageOnPort } = require('worker_threads'); 5 6const { port1, port2 } = new MessageChannel(); 7 8const message1 = { hello: 'world' }; 9const message2 = { foo: 'bar' }; 10 11// Make sure receiveMessageOnPort() works in a FIFO way, the same way it does 12// when we’re using events. 13assert.strictEqual(receiveMessageOnPort(port2), undefined); 14port1.postMessage(message1); 15port1.postMessage(message2); 16assert.deepStrictEqual(receiveMessageOnPort(port2), { message: message1 }); 17assert.deepStrictEqual(receiveMessageOnPort(port2), { message: message2 }); 18assert.strictEqual(receiveMessageOnPort(port2), undefined); 19assert.strictEqual(receiveMessageOnPort(port2), undefined); 20 21// Make sure message handlers aren’t called. 22port2.on('message', common.mustNotCall()); 23port1.postMessage(message1); 24assert.deepStrictEqual(receiveMessageOnPort(port2), { message: message1 }); 25port1.close(); 26 27for (const value of [null, 0, -1, {}, []]) { 28 assert.throws(() => receiveMessageOnPort(value), { 29 name: 'TypeError', 30 code: 'ERR_INVALID_ARG_TYPE', 31 message: 'The "port" argument must be a MessagePort instance' 32 }); 33} 34