11cb0ef41Sopenharmony_ci'use strict';
21cb0ef41Sopenharmony_ciconst common = require('../common');
31cb0ef41Sopenharmony_ciconst assert = require('assert');
41cb0ef41Sopenharmony_ciconst { MessageChannel, MessagePort, Worker } = require('worker_threads');
51cb0ef41Sopenharmony_ci
61cb0ef41Sopenharmony_ci// Asserts that freezing the EventTarget prototype does not make the internal throw.
71cb0ef41Sopenharmony_ciObject.freeze(EventTarget.prototype);
81cb0ef41Sopenharmony_ci
91cb0ef41Sopenharmony_ci{
101cb0ef41Sopenharmony_ci  const channel = new MessageChannel();
111cb0ef41Sopenharmony_ci
121cb0ef41Sopenharmony_ci  channel.port1.on('message', common.mustCall(({ typedArray }) => {
131cb0ef41Sopenharmony_ci    assert.deepStrictEqual(typedArray, new Uint8Array([0, 1, 2, 3, 4]));
141cb0ef41Sopenharmony_ci  }));
151cb0ef41Sopenharmony_ci
161cb0ef41Sopenharmony_ci  const typedArray = new Uint8Array([0, 1, 2, 3, 4]);
171cb0ef41Sopenharmony_ci  channel.port2.postMessage({ typedArray }, [ typedArray.buffer ]);
181cb0ef41Sopenharmony_ci  assert.strictEqual(typedArray.buffer.byteLength, 0);
191cb0ef41Sopenharmony_ci  channel.port2.close();
201cb0ef41Sopenharmony_ci}
211cb0ef41Sopenharmony_ci
221cb0ef41Sopenharmony_ci{
231cb0ef41Sopenharmony_ci  const channel = new MessageChannel();
241cb0ef41Sopenharmony_ci
251cb0ef41Sopenharmony_ci  channel.port1.on('close', common.mustCall());
261cb0ef41Sopenharmony_ci  channel.port2.on('close', common.mustCall());
271cb0ef41Sopenharmony_ci  channel.port2.close();
281cb0ef41Sopenharmony_ci}
291cb0ef41Sopenharmony_ci
301cb0ef41Sopenharmony_ci{
311cb0ef41Sopenharmony_ci  const channel = new MessageChannel();
321cb0ef41Sopenharmony_ci
331cb0ef41Sopenharmony_ci  const w = new Worker(`
341cb0ef41Sopenharmony_ci    const { MessagePort } = require('worker_threads');
351cb0ef41Sopenharmony_ci    const assert = require('assert');
361cb0ef41Sopenharmony_ci    require('worker_threads').parentPort.on('message', ({ port }) => {
371cb0ef41Sopenharmony_ci      assert(port instanceof MessagePort);
381cb0ef41Sopenharmony_ci      port.postMessage('works');
391cb0ef41Sopenharmony_ci    });
401cb0ef41Sopenharmony_ci  `, { eval: true });
411cb0ef41Sopenharmony_ci  w.postMessage({ port: channel.port2 }, [ channel.port2 ]);
421cb0ef41Sopenharmony_ci  assert(channel.port1 instanceof MessagePort);
431cb0ef41Sopenharmony_ci  assert(channel.port2 instanceof MessagePort);
441cb0ef41Sopenharmony_ci  channel.port1.on('message', common.mustCall((message) => {
451cb0ef41Sopenharmony_ci    assert.strictEqual(message, 'works');
461cb0ef41Sopenharmony_ci    w.terminate();
471cb0ef41Sopenharmony_ci  }));
481cb0ef41Sopenharmony_ci}
49