| 'use strict'; |
| const common = require('../common'); |
| const assert = require('assert'); |
| |
| const { MessageChannel } = require('worker_threads'); |
| |
| { |
| const { port1, port2 } = new MessageChannel(); |
| |
| const arrayBuffer = new ArrayBuffer(40); |
| const typedArray = new Uint32Array(arrayBuffer); |
| typedArray[0] = 0x12345678; |
| |
| port1.postMessage(typedArray, [ arrayBuffer ]); |
| assert.strictEqual(arrayBuffer.byteLength, 0); |
| // Transferring again should throw a DataCloneError. |
| assert.throws(() => port1.postMessage(typedArray, [ arrayBuffer ]), { |
| code: 25, |
| name: 'DataCloneError', |
| }); |
| |
| port2.on('message', common.mustCall((received) => { |
| assert.strictEqual(received[0], 0x12345678); |
| port2.close(common.mustCall()); |
| })); |
| } |