11cb0ef41Sopenharmony_ci'use strict';
21cb0ef41Sopenharmony_ciconst common = require('../common');
31cb0ef41Sopenharmony_ciconst assert = require('assert');
41cb0ef41Sopenharmony_ciconst { MessageChannel, moveMessagePortToContext } = require('worker_threads');
51cb0ef41Sopenharmony_ci
61cb0ef41Sopenharmony_ci// Make sure that .start() and .stop() do not throw on closing/closed
71cb0ef41Sopenharmony_ci// MessagePorts.
81cb0ef41Sopenharmony_ci// Refs: https://github.com/nodejs/node/issues/26463
91cb0ef41Sopenharmony_ci
101cb0ef41Sopenharmony_cifunction dummy() {}
111cb0ef41Sopenharmony_ci
121cb0ef41Sopenharmony_ci{
131cb0ef41Sopenharmony_ci  const { port1, port2 } = new MessageChannel();
141cb0ef41Sopenharmony_ci  port1.close(common.mustCall(() => {
151cb0ef41Sopenharmony_ci    port1.on('message', dummy);
161cb0ef41Sopenharmony_ci    port1.off('message', dummy);
171cb0ef41Sopenharmony_ci    port2.on('message', dummy);
181cb0ef41Sopenharmony_ci    port2.off('message', dummy);
191cb0ef41Sopenharmony_ci  }));
201cb0ef41Sopenharmony_ci  port1.on('message', dummy);
211cb0ef41Sopenharmony_ci  port1.off('message', dummy);
221cb0ef41Sopenharmony_ci  port2.on('message', dummy);
231cb0ef41Sopenharmony_ci  port2.off('message', dummy);
241cb0ef41Sopenharmony_ci}
251cb0ef41Sopenharmony_ci
261cb0ef41Sopenharmony_ci{
271cb0ef41Sopenharmony_ci  const { port1 } = new MessageChannel();
281cb0ef41Sopenharmony_ci  port1.on('message', dummy);
291cb0ef41Sopenharmony_ci  port1.close(common.mustCall(() => {
301cb0ef41Sopenharmony_ci    port1.off('message', dummy);
311cb0ef41Sopenharmony_ci  }));
321cb0ef41Sopenharmony_ci}
331cb0ef41Sopenharmony_ci
341cb0ef41Sopenharmony_ci{
351cb0ef41Sopenharmony_ci  const { port2 } = new MessageChannel();
361cb0ef41Sopenharmony_ci  port2.close();
371cb0ef41Sopenharmony_ci  assert.throws(() => moveMessagePortToContext(port2, {}), {
381cb0ef41Sopenharmony_ci    code: 'ERR_CLOSED_MESSAGE_PORT',
391cb0ef41Sopenharmony_ci    message: 'Cannot send data on closed MessagePort'
401cb0ef41Sopenharmony_ci  });
411cb0ef41Sopenharmony_ci}
421cb0ef41Sopenharmony_ci
431cb0ef41Sopenharmony_ci// Refs: https://github.com/nodejs/node/issues/42296
441cb0ef41Sopenharmony_ci{
451cb0ef41Sopenharmony_ci  const ch = new MessageChannel();
461cb0ef41Sopenharmony_ci  ch.port1.onmessage = common.mustNotCall();
471cb0ef41Sopenharmony_ci  ch.port2.close();
481cb0ef41Sopenharmony_ci  ch.port2.postMessage('fhqwhgads');
491cb0ef41Sopenharmony_ci}
50