summaryrefslogtreecommitdiff
path: root/test/parallel/test-worker-onmessage-not-a-function.js
blob: df07353075f04e5c65b663fe987e425deefb9c4f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// 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.

'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';
}