49 lines
1.1 KiB
JavaScript
49 lines
1.1 KiB
JavaScript
|
'use strict';
|
||
|
const common = require('../common');
|
||
|
const assert = require('assert');
|
||
|
|
||
|
const { MessageChannel } = require('worker_threads');
|
||
|
|
||
|
{
|
||
|
const { port1, port2 } = new MessageChannel();
|
||
|
|
||
|
// Returning a non-function in the getter should not crash.
|
||
|
Object.defineProperty(port1, 'onmessage', {
|
||
|
get() {
|
||
|
port1.unref();
|
||
|
return 42;
|
||
|
}
|
||
|
});
|
||
|
|
||
|
port2.postMessage({ foo: 'bar' });
|
||
|
|
||
|
// We need to start the port manually because .onmessage assignment tracking
|
||
|
// has been overridden.
|
||
|
port1.start();
|
||
|
port1.ref();
|
||
|
}
|
||
|
|
||
|
{
|
||
|
const err = new Error('eyecatcher');
|
||
|
process.on('uncaughtException', common.mustCall((exception) => {
|
||
|
port1.unref();
|
||
|
assert.strictEqual(exception, err);
|
||
|
}));
|
||
|
|
||
|
const { port1, port2 } = new MessageChannel();
|
||
|
|
||
|
// Throwing in the getter should not crash.
|
||
|
Object.defineProperty(port1, 'onmessage', {
|
||
|
get() {
|
||
|
throw err;
|
||
|
}
|
||
|
});
|
||
|
|
||
|
port2.postMessage({ foo: 'bar' });
|
||
|
|
||
|
// We need to start the port manually because .onmessage assignment tracking
|
||
|
// has been overridden.
|
||
|
port1.start();
|
||
|
port1.ref();
|
||
|
}
|