11cb0ef41Sopenharmony_ci'use strict';
21cb0ef41Sopenharmony_cirequire('../common');
31cb0ef41Sopenharmony_ciconst assert = require('assert');
41cb0ef41Sopenharmony_ci
51cb0ef41Sopenharmony_ciconst dummyPort = new MessageChannel().port1;
61cb0ef41Sopenharmony_ci
71cb0ef41Sopenharmony_ci{
81cb0ef41Sopenharmony_ci  for (const [ args, expected ] of [
91cb0ef41Sopenharmony_ci    [
101cb0ef41Sopenharmony_ci      ['message'],
111cb0ef41Sopenharmony_ci      {
121cb0ef41Sopenharmony_ci        type: 'message', data: null, origin: '',
131cb0ef41Sopenharmony_ci        lastEventId: '', source: null, ports: []
141cb0ef41Sopenharmony_ci      },
151cb0ef41Sopenharmony_ci    ],
161cb0ef41Sopenharmony_ci    [
171cb0ef41Sopenharmony_ci      ['message', { data: undefined, origin: 'foo' }],
181cb0ef41Sopenharmony_ci      {
191cb0ef41Sopenharmony_ci        type: 'message', data: null, origin: 'foo',
201cb0ef41Sopenharmony_ci        lastEventId: '', source: null, ports: []
211cb0ef41Sopenharmony_ci      },
221cb0ef41Sopenharmony_ci    ],
231cb0ef41Sopenharmony_ci    [
241cb0ef41Sopenharmony_ci      ['message', { data: 2, origin: 1, lastEventId: 0 }],
251cb0ef41Sopenharmony_ci      {
261cb0ef41Sopenharmony_ci        type: 'message', data: 2, origin: '1',
271cb0ef41Sopenharmony_ci        lastEventId: '0', source: null, ports: []
281cb0ef41Sopenharmony_ci      },
291cb0ef41Sopenharmony_ci    ],
301cb0ef41Sopenharmony_ci    [
311cb0ef41Sopenharmony_ci      ['message', { lastEventId: 'foo' }],
321cb0ef41Sopenharmony_ci      {
331cb0ef41Sopenharmony_ci        type: 'message', data: null, origin: '',
341cb0ef41Sopenharmony_ci        lastEventId: 'foo', source: null, ports: []
351cb0ef41Sopenharmony_ci      },
361cb0ef41Sopenharmony_ci    ],
371cb0ef41Sopenharmony_ci    [
381cb0ef41Sopenharmony_ci      ['messageerror', { lastEventId: 'foo', source: dummyPort }],
391cb0ef41Sopenharmony_ci      {
401cb0ef41Sopenharmony_ci        type: 'messageerror', data: null, origin: '',
411cb0ef41Sopenharmony_ci        lastEventId: 'foo', source: dummyPort, ports: []
421cb0ef41Sopenharmony_ci      },
431cb0ef41Sopenharmony_ci    ],
441cb0ef41Sopenharmony_ci    [
451cb0ef41Sopenharmony_ci      ['message', { ports: [dummyPort], source: null }],
461cb0ef41Sopenharmony_ci      {
471cb0ef41Sopenharmony_ci        type: 'message', data: null, origin: '',
481cb0ef41Sopenharmony_ci        lastEventId: '', source: null, ports: [dummyPort]
491cb0ef41Sopenharmony_ci      },
501cb0ef41Sopenharmony_ci    ],
511cb0ef41Sopenharmony_ci  ]) {
521cb0ef41Sopenharmony_ci    const ev = new MessageEvent(...args);
531cb0ef41Sopenharmony_ci    const { type, data, origin, lastEventId, source, ports } = ev;
541cb0ef41Sopenharmony_ci    assert.deepStrictEqual(expected, {
551cb0ef41Sopenharmony_ci      type, data, origin, lastEventId, source, ports
561cb0ef41Sopenharmony_ci    });
571cb0ef41Sopenharmony_ci  }
581cb0ef41Sopenharmony_ci}
591cb0ef41Sopenharmony_ci
601cb0ef41Sopenharmony_ci{
611cb0ef41Sopenharmony_ci  assert.throws(() => {
621cb0ef41Sopenharmony_ci    new MessageEvent('message', { source: 1 });
631cb0ef41Sopenharmony_ci  }, {
641cb0ef41Sopenharmony_ci    code: 'ERR_INVALID_ARG_TYPE',
651cb0ef41Sopenharmony_ci    message: /The "init\.source" property must be an instance of MessagePort/,
661cb0ef41Sopenharmony_ci  });
671cb0ef41Sopenharmony_ci  assert.throws(() => {
681cb0ef41Sopenharmony_ci    new MessageEvent('message', { source: {} });
691cb0ef41Sopenharmony_ci  }, {
701cb0ef41Sopenharmony_ci    code: 'ERR_INVALID_ARG_TYPE',
711cb0ef41Sopenharmony_ci    message: /The "init\.source" property must be an instance of MessagePort/,
721cb0ef41Sopenharmony_ci  });
731cb0ef41Sopenharmony_ci  assert.throws(() => {
741cb0ef41Sopenharmony_ci    new MessageEvent('message', { ports: 0 });
751cb0ef41Sopenharmony_ci  }, {
761cb0ef41Sopenharmony_ci    message: /ports is not iterable/,
771cb0ef41Sopenharmony_ci  });
781cb0ef41Sopenharmony_ci  assert.throws(() => {
791cb0ef41Sopenharmony_ci    new MessageEvent('message', { ports: [ null ] });
801cb0ef41Sopenharmony_ci  }, {
811cb0ef41Sopenharmony_ci    code: 'ERR_INVALID_ARG_TYPE',
821cb0ef41Sopenharmony_ci    message: /The "init\.ports\[0\]" property must be an instance of MessagePort/,
831cb0ef41Sopenharmony_ci  });
841cb0ef41Sopenharmony_ci  assert.throws(() => {
851cb0ef41Sopenharmony_ci    new MessageEvent('message', { ports: [ {} ] });
861cb0ef41Sopenharmony_ci  }, {
871cb0ef41Sopenharmony_ci    code: 'ERR_INVALID_ARG_TYPE',
881cb0ef41Sopenharmony_ci    message: /The "init\.ports\[0\]" property must be an instance of MessagePort/,
891cb0ef41Sopenharmony_ci  });
901cb0ef41Sopenharmony_ci}
911cb0ef41Sopenharmony_ci
921cb0ef41Sopenharmony_ci{
931cb0ef41Sopenharmony_ci  assert(new MessageEvent('message') instanceof Event);
941cb0ef41Sopenharmony_ci}
95