blob: f593cf82e79a594755a03eb60d653b6b8a6b32ee [file] [log] [blame]
commit-queue@webkit.org9a6aee22011-09-28 02:02:18 +00001<!DOCTYPE html>
2<html>
3<head>
4<link rel="stylesheet" href="../../js/resources/js-test-style.css">
5<script src="../../js/resources/js-test-pre.js"></script>
6</head>
7<body>
commit-queue@webkit.org9a6aee22011-09-28 02:02:18 +00008<script>
9
10description("This tests the constructor for the MessageEvent DOM class.");
11
12var test_object = {nyannyan: 123};
13
14// No initializer is passed.
15shouldBe("new MessageEvent('eventType').bubbles", "false");
16shouldBe("new MessageEvent('eventType').cancelable", "false");
17shouldBe("new MessageEvent('eventType').data", "null");
18shouldBeEqualToString("new MessageEvent('eventType').origin", "");
19shouldBeEqualToString("new MessageEvent('eventType').lastEventId", "");
20shouldBe("new MessageEvent('eventType').source", "null");
21shouldBe("new MessageEvent('eventType').ports", "[]");
22
23// bubbles is passed.
24shouldBe("new MessageEvent('eventType', { bubbles: false }).bubbles", "false");
25shouldBe("new MessageEvent('eventType', { bubbles: true }).bubbles", "true");
26
27// cancelable is passed.
28shouldBe("new MessageEvent('eventType', { cancelable: false }).cancelable", "false");
29shouldBe("new MessageEvent('eventType', { cancelable: true }).cancelable", "true");
30
31// data is passed.
haraken@chromium.org15c182a2011-10-18 07:20:17 +000032// FIXME(haraken): This fails because MessageEvent.data cannot handle ScriptValue.
commit-queue@webkit.org9a6aee22011-09-28 02:02:18 +000033shouldBe("new MessageEvent('eventType', { data: test_object }).data", "test_object");
haraken@chromium.org15c182a2011-10-18 07:20:17 +000034// FIXME(haraken): When we pass a DOM object, it crashes in DRT (it returns TypeError in non-DRT build).
35// shouldBe("new MessageEvent('eventType', { data: document }).data", "document");
commit-queue@webkit.org9a6aee22011-09-28 02:02:18 +000036shouldBe("new MessageEvent('eventType', { data: undefined }).data", "undefined");
37shouldBe("new MessageEvent('eventType', { data: null }).data", "null");
38shouldBe("new MessageEvent('eventType', { data: false }).data", "false");
39shouldBe("new MessageEvent('eventType', { data: true }).data", "true");
40shouldBeEqualToString("new MessageEvent('eventType', { data: '' }).data", "");
41shouldBeEqualToString("new MessageEvent('eventType', { data: 'chocolate' }).data", "chocolate");
42shouldBe("new MessageEvent('eventType', { data: 12345 }).data", "12345");
43shouldBe("new MessageEvent('eventType', { data: 18446744073709551615 }).data", "18446744073709552000");
44shouldBe("new MessageEvent('eventType', { data: NaN }).data", "NaN");
45// Note that valueOf() is not called, when the left hand side is evaluated.
46shouldBeFalse("new MessageEvent('eventType', { data: {valueOf: function () { return test_object; } } }).data == test_object");
47shouldBe("new MessageEvent('eventType', { get data() { return 123; } }).data", "123");
48shouldThrow("new MessageEvent('eventType', { get data() { throw 'MessageEvent Error'; } })");
49
50// origin or lastEventId is passed.
51["origin", "lastEventId"].forEach(function (attr) {
52 // Strings.
53 shouldBeEqualToString("new MessageEvent('eventType', { " + attr + ": 'melancholy' })." + attr, "melancholy");
54 shouldBeEqualToString("new MessageEvent('eventType', { " + attr + ": '' })." + attr, "");
55
56 // Non-strings.
57 shouldBeEqualToString("new MessageEvent('eventType', { " + attr + ": undefined })." + attr, "undefined");
58 shouldBeEqualToString("new MessageEvent('eventType', { " + attr + ": null })." + attr, "null");
59 shouldBeEqualToString("new MessageEvent('eventType', { " + attr + ": false })." + attr, "false");
60 shouldBeEqualToString("new MessageEvent('eventType', { " + attr + ": true })." + attr, "true");
61 shouldBeEqualToString("new MessageEvent('eventType', { " + attr + ": 12345 })." + attr, "12345");
62 shouldBeEqualToString("new MessageEvent('eventType', { " + attr + ": 18446744073709551615 })." + attr, "18446744073709552000");
63 shouldBeEqualToString("new MessageEvent('eventType', { " + attr + ": NaN })." + attr, "NaN");
64 shouldBeEqualToString("new MessageEvent('eventType', { " + attr + ": [] })." + attr, "");
65 shouldBeEqualToString("new MessageEvent('eventType', { " + attr + ": [1, 2, 3] })." + attr, "1,2,3");
66 shouldBeEqualToString("new MessageEvent('eventType', { " + attr + ": {melancholy: 12345} })." + attr, "[object Object]");
67 shouldBeEqualToString("new MessageEvent('eventType', { " + attr + ": {valueOf: function () { return 'melancholy'; } } })." + attr, "[object Object]");
68 shouldBeEqualToString("new MessageEvent('eventType', { get " + attr + "() { return 123; } })." + attr, "123");
69 shouldThrow("new MessageEvent('eventType', { get " + attr + "() { throw 'MessageEvent Error'; } })");
70});
71
72// source is passed.
73// Window objects.
74shouldBe("new MessageEvent('eventType', { source: window }).source", "window");
75shouldBe("new MessageEvent('eventType', { source: this }).source", "this");
76
77// Non-window objects.
78shouldBe("new MessageEvent('eventType', { source: test_object }).source", "null");
79shouldBe("new MessageEvent('eventType', { source: document }).source", "null");
80shouldBe("new MessageEvent('eventType', { source: undefined }).source", "null");
81shouldBe("new MessageEvent('eventType', { source: null }).source", "null");
82shouldBe("new MessageEvent('eventType', { source: false }).source", "null");
83shouldBe("new MessageEvent('eventType', { source: true }).source", "null");
84shouldBe("new MessageEvent('eventType', { source: '' }).source", "null");
85shouldBe("new MessageEvent('eventType', { source: 'chocolate' }).source", "null");
86shouldBe("new MessageEvent('eventType', { source: 12345 }).source", "null");
87shouldBe("new MessageEvent('eventType', { source: 18446744073709551615 }).source", "null");
88shouldBe("new MessageEvent('eventType', { source: NaN }).source", "null");
89// Note that valueOf() is not called, when the left hand side is evaluated.
90shouldBeFalse("new MessageEvent('eventType', { source: {valueOf: function () { return window; } } }).source == window");
91shouldBe("new MessageEvent('eventType', { get source() { return 123; } }).source", "null");
92shouldThrow("new MessageEvent('eventType', { get source() { throw 'MessageEvent Error'; } })");
93
94// ports is passed.
95// Valid message ports.
96var channel = new MessageChannel();
97shouldBe("new MessageEvent('eventType', { ports: [channel.port1, channel.port2, channel.port2] }).ports[0]", "channel.port1");
98shouldBe("new MessageEvent('eventType', { ports: [channel.port1, channel.port2, channel.port2] }).ports[1]", "channel.port2");
99shouldBe("new MessageEvent('eventType', { ports: [channel.port1, channel.port2, channel.port2] }).ports[2]", "channel.port2");
100shouldBe("new MessageEvent('eventType', { ports: [] }).ports", "[]");
101shouldBe("new MessageEvent('eventType', { ports: undefined }).ports", "[]");
102shouldBe("new MessageEvent('eventType', { ports: null }).ports", "[]");
103
104// Invalid message ports.
105shouldThrow("new MessageEvent('eventType', { ports: [1, 2, 3] }).ports[2]");
106shouldThrow("new MessageEvent('eventType', { ports: test_object }).ports");
107shouldThrow("new MessageEvent('eventType', { ports: document }).ports");
108shouldThrow("new MessageEvent('eventType', { ports: false }).ports");
109shouldThrow("new MessageEvent('eventType', { ports: true }).ports");
110shouldThrow("new MessageEvent('eventType', { ports: '' }).ports");
111shouldThrow("new MessageEvent('eventType', { ports: 'chocolate' }).ports");
112shouldThrow("new MessageEvent('eventType', { ports: 12345 }).ports");
113shouldThrow("new MessageEvent('eventType', { ports: 18446744073709551615 }).ports");
114shouldThrow("new MessageEvent('eventType', { ports: NaN }).ports");
115shouldThrow("new MessageEvent('eventType', { get ports() { return 123; } }).ports");
116shouldThrow("new MessageEvent('eventType', { get ports() { throw 'MessageEvent Error'; } })");
117// Note that valueOf() is not called, when the left hand side is evaluated.
118shouldThrow("new MessageEvent('eventType', { ports: {valueOf: function () { return [channel.port1, channel.port2, channel.port2]; } } }).ports[0]");
119
120// All initializers are passed.
121shouldBe("new MessageEvent('eventType', { bubbles: true, cancelable: true, data: test_object, origin: 'wonderful', lastEventId: 'excellent', source: window, ports: [channel.port1, channel.port2, channel.port2] }).bubbles", "true");
122shouldBe("new MessageEvent('eventType', { bubbles: true, cancelable: true, data: test_object, origin: 'wonderful', lastEventId: 'excellent', source: window, ports: [channel.port1, channel.port2, channel.port2] }).cancelable", "true");
haraken@chromium.org15c182a2011-10-18 07:20:17 +0000123// FIXME(haraken): This fails because MessageEvent.data cannot handle ScriptValue.
commit-queue@webkit.org9a6aee22011-09-28 02:02:18 +0000124shouldBe("new MessageEvent('eventType', { bubbles: true, cancelable: true, data: test_object, origin: 'wonderful', lastEventId: 'excellent', source: window, ports: [channel.port1, channel.port2, channel.port2] }).data", "test_object");
125shouldBeEqualToString("new MessageEvent('eventType', { bubbles: true, cancelable: true, data: test_object, origin: 'wonderful', lastEventId: 'excellent', source: window, ports: [channel.port1, channel.port2, channel.port2] }).origin", "wonderful");
126shouldBeEqualToString("new MessageEvent('eventType', { bubbles: true, cancelable: true, data: test_object, origin: 'wonderful', lastEventId: 'excellent', source: window, ports: [channel.port1, channel.port2, channel.port2] }).lastEventId", "excellent");
127shouldBe("new MessageEvent('eventType', { bubbles: true, cancelable: true, data: test_object, origin: 'wonderful', lastEventId: 'excellent', source: window, ports: [channel.port1, channel.port2, channel.port2] }).source", "window");
128shouldBe("new MessageEvent('eventType', { bubbles: true, cancelable: true, data: test_object, origin: 'wonderful', lastEventId: 'excellent', source: window, ports: [channel.port1, channel.port2, channel.port2] }).ports[0]", "channel.port1");
129shouldBe("new MessageEvent('eventType', { bubbles: true, cancelable: true, data: test_object, origin: 'wonderful', lastEventId: 'excellent', source: window, ports: [channel.port1, channel.port2, channel.port2] }).ports[1]", "channel.port2");
130shouldBe("new MessageEvent('eventType', { bubbles: true, cancelable: true, data: test_object, origin: 'wonderful', lastEventId: 'excellent', source: window, ports: [channel.port1, channel.port2, channel.port2] }).ports[2]", "channel.port2");
131
132var successfullyParsed = true;
133</script>
134<script src="../../js/resources/js-test-post.js"></script>
135</body>
136</html>