| // Flags: --expose-internals |
| 'use strict'; |
| const common = require('../common'); |
| const assert = require('assert'); |
| const { MessageChannel } = require('worker_threads'); |
| const { internalBinding } = require('internal/test/binding'); |
| |
| // Test that passing native objects and functions to .postMessage() throws |
| // DataCloneError exceptions. |
| |
| { |
| const { port1, port2 } = new MessageChannel(); |
| port2.once('message', common.mustNotCall()); |
| |
| assert.throws(() => { |
| port1.postMessage(function foo() {}); |
| }, { |
| name: 'DataCloneError', |
| message: /function foo\(\) \{\} could not be cloned\.$/ |
| }); |
| port1.close(); |
| } |
| |
| { |
| const { port1, port2 } = new MessageChannel(); |
| port2.once('message', common.mustNotCall()); |
| |
| const nativeObject = new (internalBinding('js_stream').JSStream)(); |
| |
| assert.throws(() => { |
| port1.postMessage(nativeObject); |
| }, { |
| name: 'DataCloneError', |
| message: /Cannot transfer object of unsupported type\.$/ |
| }); |
| port1.close(); |
| } |