summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorRich Trott <rtrott@gmail.com>2018-09-18 22:42:51 -0700
committerRich Trott <rtrott@gmail.com>2018-09-21 12:02:55 -0700
commitc7bf02a99fe62a2e1bb91e4f23537fafadc91455 (patch)
tree6c342eca92f205c812824122fcc084801dc1ee81 /test
parent0dbc8c8198f653ae4a5626ad82904e1cd55d817a (diff)
downloadandroid-node-v8-c7bf02a99fe62a2e1bb91e4f23537fafadc91455.tar.gz
android-node-v8-c7bf02a99fe62a2e1bb91e4f23537fafadc91455.tar.bz2
android-node-v8-c7bf02a99fe62a2e1bb91e4f23537fafadc91455.zip
test: increase coverage for worker_threads
Provide a test to cover adding setting `onmessage` to a non-function. This provides previously-missing coverage for an else block in the `onmessage` setter. PR-URL: https://github.com/nodejs/node/pull/22942 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Sakthipriyan Vairamani <thechargingvolcano@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Yuta Hiroto <hello@hiroppy.me>
Diffstat (limited to 'test')
-rw-r--r--test/parallel/test-worker-onmessage-not-a-function.js26
1 files changed, 26 insertions, 0 deletions
diff --git a/test/parallel/test-worker-onmessage-not-a-function.js b/test/parallel/test-worker-onmessage-not-a-function.js
new file mode 100644
index 0000000000..9142c19b32
--- /dev/null
+++ b/test/parallel/test-worker-onmessage-not-a-function.js
@@ -0,0 +1,26 @@
+// When MessagePort.onmessage is set to a value that is not a function, the
+// setter should call .unref() and .stop(), clearing a previous onmessage
+// listener from holding the event loop open. This test confirms that
+// functionality.
+
+// Flags: --experimental-worker
+'use strict';
+const common = require('../common');
+const { Worker, parentPort } = require('worker_threads');
+
+// Do not use isMainThread so that this test itself can be run inside a Worker.
+if (!process.env.HAS_STARTED_WORKER) {
+ process.env.HAS_STARTED_WORKER = 1;
+ const w = new Worker(__filename);
+ w.postMessage(2);
+} else {
+ // .onmessage uses a setter. Set .onmessage to a function that ultimately
+ // should not be called. This will call .ref() and .start() which will keep
+ // the event loop open (and prevent this from exiting) if the subsequent
+ // assignment of a value to .onmessage doesn't call .unref() and .stop().
+ parentPort.onmessage = common.mustNotCall();
+ // Setting `onmessage` to a value that is not a function should clear the
+ // previous value and also should allow the event loop to exit. (In other
+ // words, this test should exit rather than run indefinitely.)
+ parentPort.onmessage = 'fhqwhgads';
+}