summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAnna Henningsen <anna@addaleax.net>2019-06-02 16:46:13 +0200
committerAnna Henningsen <anna@addaleax.net>2019-06-10 15:22:54 +0200
commit7bd2a3fcb407970babc88650ff030526ccf79f9f (patch)
tree3ab4bfd93ed57c3894f3680fbdbb7d734c6c1277 /test
parent55de20999b8b60a7ef889ea0d9573e9f271e1d17 (diff)
downloadandroid-node-v8-7bd2a3fcb407970babc88650ff030526ccf79f9f.tar.gz
android-node-v8-7bd2a3fcb407970babc88650ff030526ccf79f9f.tar.bz2
android-node-v8-7bd2a3fcb407970babc88650ff030526ccf79f9f.zip
worker: use DataCloneError for unknown native objects
This aligns the behaviour better with the web. PR-URL: https://github.com/nodejs/node/pull/28025 Reviewed-By: Michaƫl Zasso <targos@protonmail.com> Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Tiancheng "Timothy" Gu <timothygu99@gmail.com>
Diffstat (limited to 'test')
-rw-r--r--test/parallel/test-worker-message-port-transfer-native.js37
1 files changed, 37 insertions, 0 deletions
diff --git a/test/parallel/test-worker-message-port-transfer-native.js b/test/parallel/test-worker-message-port-transfer-native.js
new file mode 100644
index 0000000000..eb51b2b01a
--- /dev/null
+++ b/test/parallel/test-worker-message-port-transfer-native.js
@@ -0,0 +1,37 @@
+// 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();
+}