OLD | NEW |
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 library shelf_io_test; | 5 library shelf_io_test; |
6 | 6 |
7 import 'dart:async'; | 7 import 'dart:async'; |
8 import 'dart:convert'; | 8 import 'dart:convert'; |
9 import 'dart:io'; | 9 import 'dart:io'; |
10 | 10 |
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
178 return syncHandler(request); | 178 return syncHandler(request); |
179 }); | 179 }); |
180 }); | 180 }); |
181 | 181 |
182 return _schedulePost(body: 'test body').then((response) { | 182 return _schedulePost(body: 'test body').then((response) { |
183 expect(response.statusCode, HttpStatus.OK); | 183 expect(response.statusCode, HttpStatus.OK); |
184 expect(response.stream.bytesToString(), completion('Hello from /')); | 184 expect(response.stream.bytesToString(), completion('Hello from /')); |
185 }); | 185 }); |
186 }); | 186 }); |
187 | 187 |
| 188 test('supports request hijacking', () { |
| 189 _scheduleServer((request) { |
| 190 expect(request.method, 'POST'); |
| 191 |
| 192 request.hijack(expectAsync((stream, sink) { |
| 193 expect(stream.first, completion(equals("Hello".codeUnits))); |
| 194 |
| 195 sink.add(( |
| 196 "HTTP/1.1 404 Not Found\r\n" |
| 197 "Date: Mon, 23 May 2005 22:38:34 GMT\r\n" |
| 198 "Content-Length: 13\r\n" |
| 199 "\r\n" |
| 200 "Hello, world!").codeUnits); |
| 201 sink.close(); |
| 202 })); |
| 203 }); |
| 204 |
| 205 return _schedulePost(body: "Hello").then((response) { |
| 206 expect(response.statusCode, HttpStatus.NOT_FOUND); |
| 207 expect(response.headers["date"], "Mon, 23 May 2005 22:38:34 GMT"); |
| 208 expect(response.stream.bytesToString(), |
| 209 completion(equals("Hello, world!"))); |
| 210 }); |
| 211 }); |
| 212 |
| 213 test('reports an error if a HijackException is thrown without hijacking', () { |
| 214 _scheduleServer((request) => throw const HijackException()); |
| 215 |
| 216 return _scheduleGet().then((response) { |
| 217 expect(response.statusCode, HttpStatus.INTERNAL_SERVER_ERROR); |
| 218 }); |
| 219 }); |
| 220 |
188 test('passes asynchronous exceptions to the parent error zone', () { | 221 test('passes asynchronous exceptions to the parent error zone', () { |
189 return runZoned(() { | 222 return runZoned(() { |
190 return shelf_io.serve((request) { | 223 return shelf_io.serve((request) { |
191 new Future(() => throw 'oh no'); | 224 new Future(() => throw 'oh no'); |
192 return syncHandler(request); | 225 return syncHandler(request); |
193 }, 'localhost', 0).then((server) { | 226 }, 'localhost', 0).then((server) { |
194 return http.get('http://localhost:${server.port}').then((response) { | 227 return http.get('http://localhost:${server.port}').then((response) { |
195 expect(response.statusCode, HttpStatus.OK); | 228 expect(response.statusCode, HttpStatus.OK); |
196 expect(response.body, 'Hello from /'); | 229 expect(response.body, 'Hello from /'); |
197 server.close(); | 230 server.close(); |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
245 | 278 |
246 var request = new http.Request('POST', | 279 var request = new http.Request('POST', |
247 Uri.parse('http://localhost:$_serverPort/')); | 280 Uri.parse('http://localhost:$_serverPort/')); |
248 | 281 |
249 if (headers != null) request.headers.addAll(headers); | 282 if (headers != null) request.headers.addAll(headers); |
250 if (body != null) request.body = body; | 283 if (body != null) request.body = body; |
251 | 284 |
252 return request.send(); | 285 return request.send(); |
253 }); | 286 }); |
254 } | 287 } |
OLD | NEW |