11cb0ef41Sopenharmony_ci'use strict'; 21cb0ef41Sopenharmony_ciconst common = require('../common'); 31cb0ef41Sopenharmony_ciconst assert = require('assert'); 41cb0ef41Sopenharmony_ciconst { MessageChannel, receiveMessageOnPort } = require('worker_threads'); 51cb0ef41Sopenharmony_ci 61cb0ef41Sopenharmony_ciconst { port1, port2 } = new MessageChannel(); 71cb0ef41Sopenharmony_ci 81cb0ef41Sopenharmony_ciconst message1 = { hello: 'world' }; 91cb0ef41Sopenharmony_ciconst message2 = { foo: 'bar' }; 101cb0ef41Sopenharmony_ci 111cb0ef41Sopenharmony_ci// Make sure receiveMessageOnPort() works in a FIFO way, the same way it does 121cb0ef41Sopenharmony_ci// when we’re using events. 131cb0ef41Sopenharmony_ciassert.strictEqual(receiveMessageOnPort(port2), undefined); 141cb0ef41Sopenharmony_ciport1.postMessage(message1); 151cb0ef41Sopenharmony_ciport1.postMessage(message2); 161cb0ef41Sopenharmony_ciassert.deepStrictEqual(receiveMessageOnPort(port2), { message: message1 }); 171cb0ef41Sopenharmony_ciassert.deepStrictEqual(receiveMessageOnPort(port2), { message: message2 }); 181cb0ef41Sopenharmony_ciassert.strictEqual(receiveMessageOnPort(port2), undefined); 191cb0ef41Sopenharmony_ciassert.strictEqual(receiveMessageOnPort(port2), undefined); 201cb0ef41Sopenharmony_ci 211cb0ef41Sopenharmony_ci// Make sure message handlers aren’t called. 221cb0ef41Sopenharmony_ciport2.on('message', common.mustNotCall()); 231cb0ef41Sopenharmony_ciport1.postMessage(message1); 241cb0ef41Sopenharmony_ciassert.deepStrictEqual(receiveMessageOnPort(port2), { message: message1 }); 251cb0ef41Sopenharmony_ciport1.close(); 261cb0ef41Sopenharmony_ci 271cb0ef41Sopenharmony_cifor (const value of [null, 0, -1, {}, []]) { 281cb0ef41Sopenharmony_ci assert.throws(() => receiveMessageOnPort(value), { 291cb0ef41Sopenharmony_ci name: 'TypeError', 301cb0ef41Sopenharmony_ci code: 'ERR_INVALID_ARG_TYPE', 311cb0ef41Sopenharmony_ci message: 'The "port" argument must be a MessagePort instance' 321cb0ef41Sopenharmony_ci }); 331cb0ef41Sopenharmony_ci} 34