Skip to content

Commit

Permalink
test: increase coverage for worker_threads
Browse files Browse the repository at this point in the history
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: #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>
  • Loading branch information
Trott committed Sep 21, 2018
1 parent 0dbc8c8 commit c7bf02a
Showing 1 changed file with 26 additions and 0 deletions.
26 changes: 26 additions & 0 deletions 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';
}

0 comments on commit c7bf02a

Please sign in to comment.