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