| 'use strict'; |
| |
| require('../common'); |
| const assert = require('assert'); |
| |
| const { |
| Worker, MessageChannel |
| } = require('worker_threads'); |
| |
| const channel = new MessageChannel(); |
| const workerData = { mesage: channel.port1 }; |
| const transferList = [channel.port1]; |
| const meowScript = () => 'meow'; |
| |
| { |
| // Should receive the transferList param. |
| new Worker(`${meowScript}`, { eval: true, workerData, transferList }); |
| } |
| |
| { |
| // Should work with more than one MessagePort. |
| const channel1 = new MessageChannel(); |
| const channel2 = new MessageChannel(); |
| const workerData = { message: channel1.port1, message2: channel2.port1 }; |
| const transferList = [channel1.port1, channel2.port1]; |
| new Worker(`${meowScript}`, { eval: true, workerData, transferList }); |
| } |
| |
| { |
| const uint8Array = new Uint8Array([ 1, 2, 3, 4 ]); |
| assert.strictEqual(uint8Array.length, 4); |
| new Worker(` |
| const { parentPort, workerData } = require('worker_threads'); |
| parentPort.postMessage(workerData); |
| `, { |
| eval: true, |
| workerData: uint8Array, |
| transferList: [uint8Array.buffer] |
| }).on( |
| 'message', |
| (message) => |
| assert.deepStrictEqual(message, Uint8Array.of(1, 2, 3, 4)) |
| ); |
| assert.strictEqual(uint8Array.length, 0); |
| } |
| |
| { |
| // Should throw on non valid transferList input. |
| const channel1 = new MessageChannel(); |
| const channel2 = new MessageChannel(); |
| const workerData = { message: channel1.port1, message2: channel2.port1 }; |
| assert.throws(() => new Worker(`${meowScript}`, { |
| eval: true, |
| workerData, |
| transferList: [] |
| }), { |
| code: 'ERR_MISSING_TRANSFERABLE_IN_TRANSFER_LIST', |
| message: 'Object that needs transfer was found in message but not ' + |
| 'listed in transferList' |
| }); |
| } |