OLD | NEW |
1 function postResult(result, actual, expected) | 1 importScripts("/js-test-resources/js-test.js", "../../resources/close-common.js"
, "../../resources/mac-dropped-wakeup-workaround.js"); |
2 { | |
3 var message = result ? "PASS" : "FAIL"; | |
4 message += ": worker: " + actual + " is "; | |
5 if (!result) | |
6 message += "not "; | |
7 message += expected; | |
8 postMessage(message); | |
9 } | |
10 | 2 |
11 function testPassed(message) | 3 testClose(); |
12 { | |
13 postMessage("PASS: " + message); | |
14 } | |
15 | |
16 function testFailed(message) | |
17 { | |
18 postMessage("FAIL: " + message); | |
19 } | |
20 | |
21 function debug(message) | |
22 { | |
23 postMessage(message); | |
24 } | |
25 | |
26 function shouldBe(actual, expected) | |
27 { | |
28 var _result = eval(actual + " == " + expected); | |
29 postResult(_result, actual, expected); | |
30 } | |
31 | |
32 function shouldBeTrue(actual) | |
33 { | |
34 shouldBe(actual, "true"); | |
35 } | |
36 | |
37 function shouldBeFalse(actual) | |
38 { | |
39 shouldBe(actual, "false"); | |
40 } | |
41 | |
42 var exceptionName; | |
43 var exceptionProto; | |
44 var closeEvent; | |
45 var code; | |
46 var reason; | |
47 var result; | |
48 var invalidAccessErr = "InvalidAccessError"; | |
49 var syntaxErr = "SyntaxError"; | |
50 var normalClosure = 1000; | |
51 var abnormalClosure = 1006; | |
52 var url = "ws://127.0.0.1:8880/close"; | |
53 var ws; | |
54 var testId; | |
55 | |
56 var codeTestCodes = [ | |
57 999, 1001, 2999, 5000, 65536 + 1000, 0x100000000 + 1000, 2999.9, NaN, "0", "
100", 1/0, -1/0, 0/0, | |
58 1000.0 | |
59 ]; | |
60 | |
61 var reasonTestReasons = [ | |
62 "123456789012345678901234567890123456789012345678901234567890123456789012345
6789012345678901234567890123456789012345678901234", // 124 Byte | |
63 "123456789012345678901234567890123456789012345678901234567890123456789012345
67890123456789012345678901234567890123456789012\u00a9", // length is 123, but 12
4 Byte in UTF-8 | |
64 "123456789012345678901234567890123456789012345678901234567890123456789012345
678901234567890123456789012345678901234567890123", // 123 Byte | |
65 ]; | |
66 | |
67 var reasonTestResults = [ | |
68 false, | |
69 false, | |
70 true, | |
71 ]; | |
72 | |
73 function handleOpen() | |
74 { | |
75 testFailed("handleOpen() was called."); | |
76 }; | |
77 | |
78 function handleError() | |
79 { | |
80 testFailed("handleError() was called."); | |
81 }; | |
82 | |
83 function handleClose() | |
84 { | |
85 testFailed("handleClose() was called."); | |
86 }; | |
87 | |
88 function handleMessage() | |
89 { | |
90 testFailed("handleMessage() was called."); | |
91 }; | |
92 | |
93 function setDefaultHandlers(ws) | |
94 { | |
95 ws.onopen = handleOpen; | |
96 ws.onerror = handleError; | |
97 ws.onclose = handleClose; | |
98 ws.onmessage = handleMessage; | |
99 } | |
100 | |
101 function runCodeTest() | |
102 { | |
103 ws = new WebSocket(url); | |
104 setDefaultHandlers(ws); | |
105 for (var id = 0; id < codeTestCodes.length; id++) { | |
106 if (codeTestCodes[id] != normalClosure) { | |
107 debug("Invalid code test: " + id); | |
108 ws.onclose = handleClose; | |
109 } else { | |
110 ws.onclose = function (e) | |
111 { | |
112 debug("runCodeTest: onclose()."); | |
113 closeEvent = e; | |
114 shouldBe("closeEvent.code", "abnormalClosure"); | |
115 if (closeEvent.code == abnormalClosure) | |
116 runInvalidStringTest(); | |
117 }; | |
118 ws.onerror = function () | |
119 { | |
120 testPassed("onerror() was called."); | |
121 }; | |
122 } | |
123 try { | |
124 ws.close(codeTestCodes[id]); | |
125 } catch (e) { | |
126 debug("Code " + codeTestCodes[id] + " must cause " + invalidAccessEr
r + '.'); | |
127 exceptionName = e.name; | |
128 exceptionProto = Object.getPrototypeOf(e); | |
129 shouldBe("exceptionName", "invalidAccessErr"); | |
130 } | |
131 } | |
132 } | |
133 | |
134 function runInvalidStringTest() | |
135 { | |
136 // FIXME: unpaired surrogates throw SyntaxError | |
137 debug("Skip invalid string test."); | |
138 runReasonTest(); | |
139 } | |
140 | |
141 function runReasonTest() | |
142 { | |
143 ws = new WebSocket(url); | |
144 setDefaultHandlers(ws); | |
145 for (var id = 0; id < reasonTestReasons.length; id++) { | |
146 debug("Reason test: " + id); | |
147 if (!reasonTestResults[id]) { | |
148 debug(" with invalid reason: " + reasonTestReasons[id]); | |
149 ws.onclose = handleClose; | |
150 } else { | |
151 ws.onclose = function (e) | |
152 { | |
153 debug("runReasonTest: onclose()."); | |
154 closeEvent = e; | |
155 shouldBe("closeEvent.code", "abnormalClosure"); | |
156 if (closeEvent.code == abnormalClosure) | |
157 runCodeAndReasonTest(); | |
158 }; | |
159 ws.onerror = function () | |
160 { | |
161 testPassed("onerror() was called."); | |
162 }; | |
163 } | |
164 try { | |
165 ws.close(normalClosure, reasonTestReasons[id]); | |
166 } catch (e) { | |
167 debug("Reason " + reasonTestReasons[id] + " must cause " + syntaxErr
+ '.'); | |
168 result = reasonTestResults[id]; | |
169 exceptionName = e.name; | |
170 exceptionProto = Object.getPrototypeOf(e); | |
171 shouldBeFalse("result"); | |
172 shouldBe("exceptionName", "syntaxErr"); | |
173 } | |
174 } | |
175 } | |
176 | |
177 function runCodeAndReasonTest() | |
178 { | |
179 var codes = [ | |
180 1000, | |
181 3000, | |
182 4000, | |
183 4999 | |
184 ]; | |
185 var reasons = [ | |
186 "OK, Bye!", | |
187 "3000", | |
188 "code is 4000", | |
189 "\u00a9 Google" | |
190 ]; | |
191 (function test (id) { | |
192 debug("Code and reason test: " + id); | |
193 ws = new WebSocket(url); | |
194 setDefaultHandlers(ws); | |
195 ws.onopen = function () | |
196 { | |
197 ws.close(codes[id], reasons[id]); | |
198 }; | |
199 ws.onclose = function (e) | |
200 { | |
201 closeEvent = e; | |
202 code = codes[id]; | |
203 reason = reasons[id]; | |
204 debug("Code and reason must be"); | |
205 debug(" code : " + code); | |
206 debug(" reason: " + reason); | |
207 shouldBeTrue("closeEvent.wasClean"); | |
208 shouldBe("closeEvent.code", "code"); | |
209 shouldBe("closeEvent.reason", "reason"); | |
210 if (++id != codes.length) | |
211 test(id); | |
212 else | |
213 postMessage("DONE"); | |
214 }; | |
215 })(0); | |
216 } | |
217 | |
218 runCodeTest(); | |
OLD | NEW |