Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(130)

Side by Side Diff: LayoutTests/http/tests/websocket/close.html

Issue 913273004: [OBSOLETE] De-flake the websocket/close.html layout test (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Hack around Mac timeouts. Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | LayoutTests/http/tests/websocket/close-expected.txt » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> 1 <!DOCTYPE HTML>
2 <html>
3 <head>
4 <script src="/js-test-resources/js-test.js"></script> 2 <script src="/js-test-resources/js-test.js"></script>
5 </head> 3 <script src="resources/close-common.js"></script>
6 <body> 4 <script src="resources/mac-dropped-wakeup-workaround.js"></script>
7 <div id="description"></div> 5 <script>
8 <div id="console"></div>
9 <script type="text/javascript">
10 description("Verify WebSocket::close behaviors."); 6 description("Verify WebSocket::close behaviors.");
11 7
12 window.jsTestIsAsync = true; 8 window.jsTestIsAsync = true;
13 9
14 var exceptionName; 10 testClose();
15 var exceptionMessage;
16 var exceptionProto;
17 var closeEvent;
18 var code;
19 var reason;
20 var result;
21 var invalidAccessErr = "InvalidAccessError";
22 var syntaxErr = "SyntaxError";
23 var normalClosure = 1000;
24 var abnormalClosure = 1006;
25 var url = "ws://127.0.0.1:8880/close";
26 var ws;
27 var testId;
28
29 var codeTestCodes = [
30 999, 1001, 2999, 5000, 65536 + 1000, 0x100000000 + 1000, 2999.9, NaN, "0", " 100", 1/0, -1/0, 0/0,
31 1000.0
32 ];
33
34 var reasonTestReasons = [
35 "123456789012345678901234567890123456789012345678901234567890123456789012345 6789012345678901234567890123456789012345678901234", // 124 Byte
36 "123456789012345678901234567890123456789012345678901234567890123456789012345 67890123456789012345678901234567890123456789012\u00a9", // length is 123, but 12 4 Byte in UTF-8
37 "123456789012345678901234567890123456789012345678901234567890123456789012345 678901234567890123456789012345678901234567890123", // 123 Byte
38 ];
39
40 var reasonTestResults = [
41 false,
42 false,
43 true,
44 ];
45
46 function handleOpen()
47 {
48 testFailed("handleOpen() was called.");
49 }
50
51 function handleError()
52 {
53 testFailed("handleError() was called.");
54 }
55
56 function handleClose()
57 {
58 testFailed("handleClose() was called.");
59 }
60
61 function handleMessage()
62 {
63 testFailed("handleMessage() was called.");
64 }
65
66 function setDefaultHandlers(ws)
67 {
68 ws.onopen = handleOpen;
69 ws.onerror = handleError;
70 ws.onclose = handleClose;
71 ws.onmessage = handleMessage;
72 }
73
74 function runCodeTest()
75 {
76 ws = new WebSocket(url);
77 setDefaultHandlers(ws);
78 for (var id = 0; id < codeTestCodes.length; id++) {
79 if (codeTestCodes[id] != normalClosure) {
80 debug("Invalid code test: " + id);
81 ws.onclose = handleClose;
82 } else {
83 ws.onclose = function (e)
84 {
85 debug("runCodeTest: onclose().");
86 closeEvent = e;
87 shouldBe("closeEvent.code", "abnormalClosure");
88 if (closeEvent.code == abnormalClosure)
89 runInvalidStringTest();
90 };
91 ws.onerror = function()
92 {
93 testPassed("onerror was called.");
94 };
95 }
96 try {
97 ws.close(codeTestCodes[id]);
98 } catch (e) {
99 debug("Code " + codeTestCodes[id] + " must cause " + invalidAccessEr r + '.');
100 exceptionName = e.name;
101 exceptionMessage = e.message;
102 exceptionProto = Object.getPrototypeOf(e);
103 shouldBeTrue("exceptionProto === DOMException.prototype");
104 shouldBe("exceptionName", "invalidAccessErr");
105 var expectedCode = codeTestCodes[id];
106 if (!expectedCode)
107 expectedCode = 0;
108 else if (expectedCode > 65535)
109 expectedCode = 65535;
110 else if (expectedCode < 0)
111 expectedCode = 0;
112 expectedCode = Math.floor(expectedCode);
113 shouldBe("exceptionMessage", '"Failed to execute \'close\' on \'WebS ocket\': The code must be either 1000, or between 3000 and 4999. ' + expectedCod e + ' is neither."');
114 }
115 }
116 }
117
118 function runInvalidStringTest()
119 {
120 // FIXME: unpaired surrogates throw SyntaxError
121 debug("Skip invalid string test.");
122 runReasonTest();
123 }
124
125 function runReasonTest()
126 {
127 ws = new WebSocket(url);
128 setDefaultHandlers(ws);
129 for (var id = 0; id < reasonTestReasons.length; id++) {
130 debug("Reason test: " + id);
131 if (!reasonTestResults[id]) {
132 debug(" with invalid reason: " + reasonTestReasons[id]);
133 ws.onclose = handleClose;
134 } else {
135 ws.onclose = function (e)
136 {
137 debug("runReasonTest: onclose().");
138 closeEvent = e;
139 shouldBe("closeEvent.code", "abnormalClosure");
140 if (closeEvent.code == abnormalClosure)
141 runCodeAndReasonTest();
142 };
143 ws.onerror = function()
144 {
145 testPassed("onerror was called.");
146 }
147 }
148 try {
149 ws.close(normalClosure, reasonTestReasons[id]);
150 } catch (e) {
151 debug("Reason " + reasonTestReasons[id] + " must cause " + syntaxErr + '.');
152 result = reasonTestResults[id];
153 exceptionName = e.name;
154 exceptionProto = Object.getPrototypeOf(e);
155 shouldBeFalse("result");
156 shouldBeTrue("exceptionProto === DOMException.prototype");
157 shouldBe("exceptionName", "syntaxErr");
158 }
159 }
160 }
161
162 function runCodeAndReasonTest()
163 {
164 var codes = [
165 1000,
166 3000,
167 4000,
168 4999
169 ];
170 var reasons = [
171 "OK, Bye!",
172 "3000",
173 "code is 4000",
174 "\u00a9 Google"
175 ];
176 (function test (id) {
177 debug("Code and reason test: " + id);
178 ws = new WebSocket(url);
179 setDefaultHandlers(ws);
180 ws.onopen = function ()
181 {
182 ws.close(codes[id], reasons[id]);
183 };
184 ws.onclose = function (e)
185 {
186 closeEvent = e;
187 code = codes[id];
188 reason = reasons[id];
189 debug("Code and reason must be");
190 debug(" code : " + code);
191 debug(" reason: " + reason);
192 shouldBeTrue("closeEvent.wasClean");
193 shouldBe("closeEvent.code", "code");
194 shouldBe("closeEvent.reason", "reason");
195 if (++id != codes.length)
196 test(id);
197 else
198 finishJSTest();
199 };
200 })(0);
201 }
202
203 runCodeTest();
204 11
205 </script> 12 </script>
206 </body>
207 </html>
OLDNEW
« no previous file with comments | « no previous file | LayoutTests/http/tests/websocket/close-expected.txt » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698