| // Flags: --experimental-worker |
| 'use strict'; |
| const common = require('../common'); |
| const assert = require('assert'); |
| |
| const { MessageChannel, MessagePort } = require('worker_threads'); |
| |
| { |
| const { port1, port2 } = new MessageChannel(); |
| assert(port1 instanceof MessagePort); |
| assert(port2 instanceof MessagePort); |
| |
| const input = { a: 1 }; |
| port1.postMessage(input); |
| port2.on('message', common.mustCall((received) => { |
| assert.deepStrictEqual(received, input); |
| port2.close(common.mustCall()); |
| })); |
| } |
| |
| { |
| const { port1, port2 } = new MessageChannel(); |
| |
| port1.onmessage = common.mustCall((message) => { |
| assert.strictEqual(message, 4); |
| port2.close(common.mustCall()); |
| }); |
| |
| port1.postMessage(2); |
| |
| port2.onmessage = common.mustCall((message) => { |
| port2.postMessage(message * 2); |
| }); |
| } |
| |
| { |
| const { port1, port2 } = new MessageChannel(); |
| |
| const input = { a: 1 }; |
| port1.postMessage(input); |
| // Check that the message still gets delivered if `port2` has its |
| // `on('message')` handler attached at a later point in time. |
| setImmediate(() => { |
| port2.on('message', common.mustCall((received) => { |
| assert.deepStrictEqual(received, input); |
| port2.close(common.mustCall()); |
| })); |
| }); |
| } |
| |
| { |
| const { port1, port2 } = new MessageChannel(); |
| |
| const input = { a: 1 }; |
| |
| const dummy = common.mustNotCall(); |
| // Check that the message still gets delivered if `port2` has its |
| // `on('message')` handler attached at a later point in time, even if a |
| // listener was removed previously. |
| port2.addListener('message', dummy); |
| setImmediate(() => { |
| port2.removeListener('message', dummy); |
| port1.postMessage(input); |
| setImmediate(() => { |
| port2.on('message', common.mustCall((received) => { |
| assert.deepStrictEqual(received, input); |
| port2.close(common.mustCall()); |
| })); |
| }); |
| }); |
| } |
| |
| { |
| assert.deepStrictEqual( |
| Object.getOwnPropertyNames(MessagePort.prototype).sort(), |
| [ |
| 'close', 'constructor', 'onmessage', 'postMessage', 'ref', 'start', |
| 'unref' |
| ]); |
| } |