1'use strict';
2require('../common');
3const assert = require('assert');
4
5const dummyPort = new MessageChannel().port1;
6
7{
8  for (const [ args, expected ] of [
9    [
10      ['message'],
11      {
12        type: 'message', data: null, origin: '',
13        lastEventId: '', source: null, ports: []
14      },
15    ],
16    [
17      ['message', { data: undefined, origin: 'foo' }],
18      {
19        type: 'message', data: null, origin: 'foo',
20        lastEventId: '', source: null, ports: []
21      },
22    ],
23    [
24      ['message', { data: 2, origin: 1, lastEventId: 0 }],
25      {
26        type: 'message', data: 2, origin: '1',
27        lastEventId: '0', source: null, ports: []
28      },
29    ],
30    [
31      ['message', { lastEventId: 'foo' }],
32      {
33        type: 'message', data: null, origin: '',
34        lastEventId: 'foo', source: null, ports: []
35      },
36    ],
37    [
38      ['messageerror', { lastEventId: 'foo', source: dummyPort }],
39      {
40        type: 'messageerror', data: null, origin: '',
41        lastEventId: 'foo', source: dummyPort, ports: []
42      },
43    ],
44    [
45      ['message', { ports: [dummyPort], source: null }],
46      {
47        type: 'message', data: null, origin: '',
48        lastEventId: '', source: null, ports: [dummyPort]
49      },
50    ],
51  ]) {
52    const ev = new MessageEvent(...args);
53    const { type, data, origin, lastEventId, source, ports } = ev;
54    assert.deepStrictEqual(expected, {
55      type, data, origin, lastEventId, source, ports
56    });
57  }
58}
59
60{
61  assert.throws(() => {
62    new MessageEvent('message', { source: 1 });
63  }, {
64    code: 'ERR_INVALID_ARG_TYPE',
65    message: /The "init\.source" property must be an instance of MessagePort/,
66  });
67  assert.throws(() => {
68    new MessageEvent('message', { source: {} });
69  }, {
70    code: 'ERR_INVALID_ARG_TYPE',
71    message: /The "init\.source" property must be an instance of MessagePort/,
72  });
73  assert.throws(() => {
74    new MessageEvent('message', { ports: 0 });
75  }, {
76    message: /ports is not iterable/,
77  });
78  assert.throws(() => {
79    new MessageEvent('message', { ports: [ null ] });
80  }, {
81    code: 'ERR_INVALID_ARG_TYPE',
82    message: /The "init\.ports\[0\]" property must be an instance of MessagePort/,
83  });
84  assert.throws(() => {
85    new MessageEvent('message', { ports: [ {} ] });
86  }, {
87    code: 'ERR_INVALID_ARG_TYPE',
88    message: /The "init\.ports\[0\]" property must be an instance of MessagePort/,
89  });
90}
91
92{
93  assert(new MessageEvent('message') instanceof Event);
94}
95