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.response_test; | 5 library shelf.response_test; |
6 | 6 |
7 import 'dart:async'; | 7 import 'dart:async'; |
8 import 'dart:convert'; | 8 import 'dart:convert'; |
9 | 9 |
10 import 'package:shelf/shelf.dart'; | 10 import 'package:shelf/shelf.dart'; |
(...skipping 16 matching lines...) Expand all Loading... |
27 var response = new Response.ok(controller.stream); | 27 var response = new Response.ok(controller.stream); |
28 expect(response.readAsString(), completion(equals("hello, world"))); | 28 expect(response.readAsString(), completion(equals("hello, world"))); |
29 | 29 |
30 controller.add([104, 101, 108, 108, 111, 44]); | 30 controller.add([104, 101, 108, 108, 111, 44]); |
31 return new Future(() { | 31 return new Future(() { |
32 controller | 32 controller |
33 ..add([32, 119, 111, 114, 108, 100]) | 33 ..add([32, 119, 111, 114, 108, 100]) |
34 ..close(); | 34 ..close(); |
35 }); | 35 }); |
36 }); | 36 }); |
37 | |
38 test("defaults to UTF-8", () { | |
39 var response = new Response.ok( | |
40 new Stream.fromIterable([[195, 168]])); | |
41 expect(response.readAsString(), completion(equals("è"))); | |
42 }); | |
43 | |
44 test("the content-type header overrides the default", () { | |
45 var response = new Response.ok( | |
46 new Stream.fromIterable([[195, 168]]), | |
47 headers: {'content-type': 'text/plain; charset=iso-8859-1'}); | |
48 expect(response.readAsString(), completion(equals("è"))); | |
49 }); | |
50 | |
51 test("an explicit encoding overrides the content-type header", () { | |
52 var response = new Response.ok( | |
53 new Stream.fromIterable([[195, 168]]), | |
54 headers: {'content-type': 'text/plain; charset=utf-8'}); | |
55 expect(response.readAsString(LATIN1), completion(equals("è"))); | |
56 }); | |
57 }); | 37 }); |
58 | 38 |
59 group("read", () { | 39 group("read", () { |
60 test("supports a null body", () { | 40 test("supports a null body", () { |
61 var response = new Response(200); | 41 var response = new Response(200); |
62 expect(response.read().toList(), completion(isEmpty)); | 42 expect(response.read().toList(), completion(isEmpty)); |
63 }); | 43 }); |
64 | 44 |
65 test("supports a String body", () { | 45 test("supports a String body", () { |
66 var response = new Response.ok("hello, world"); | 46 var response = new Response.ok("hello, world"); |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
147 var response = new Response.found('/foo'); | 127 var response = new Response.found('/foo'); |
148 expect(response.headers, containsPair('location', '/foo')); | 128 expect(response.headers, containsPair('location', '/foo')); |
149 }); | 129 }); |
150 | 130 |
151 test("sets the location header for a Uri", () { | 131 test("sets the location header for a Uri", () { |
152 var response = new Response.found(new Uri(path: '/foo')); | 132 var response = new Response.found(new Uri(path: '/foo')); |
153 expect(response.headers, containsPair('location', '/foo')); | 133 expect(response.headers, containsPair('location', '/foo')); |
154 }); | 134 }); |
155 }); | 135 }); |
156 | 136 |
157 group("mimeType", () { | |
158 test("is null without a content-type header", () { | |
159 expect(new Response.ok("okay!").mimeType, isNull); | |
160 }); | |
161 | |
162 test("comes from the content-type header", () { | |
163 expect(new Response.ok("okay!", headers: { | |
164 'content-type': 'text/plain' | |
165 }).mimeType, equals('text/plain')); | |
166 }); | |
167 | |
168 test("doesn't include parameters", () { | |
169 expect(new Response.ok("okay!", headers: { | |
170 'content-type': 'text/plain; foo=bar; bar=baz' | |
171 }).mimeType, equals('text/plain')); | |
172 }); | |
173 }); | |
174 | |
175 group("encoding", () { | |
176 test("is null without a content-type header", () { | |
177 expect(new Response.ok("okay!").encoding, isNull); | |
178 }); | |
179 | |
180 test("is null without a charset parameter", () { | |
181 expect(new Response.ok("okay!", headers: { | |
182 'content-type': 'text/plain' | |
183 }).encoding, isNull); | |
184 }); | |
185 | |
186 test("is null with an unrecognized charset parameter", () { | |
187 expect(new Response.ok("okay!", headers: { | |
188 'content-type': 'text/plain; charset=fblthp' | |
189 }).encoding, isNull); | |
190 }); | |
191 | |
192 test("comes from the content-type charset parameter", () { | |
193 expect(new Response.ok("okay!", headers: { | |
194 'content-type': 'text/plain; charset=iso-8859-1' | |
195 }).encoding, equals(LATIN1)); | |
196 }); | |
197 }); | |
198 | |
199 group("expires", () { | 137 group("expires", () { |
200 test("is null without an Expires header", () { | 138 test("is null without an Expires header", () { |
201 expect(new Response.ok("okay!").expires, isNull); | 139 expect(new Response.ok("okay!").expires, isNull); |
202 }); | 140 }); |
203 | 141 |
204 test("comes from the Expires header", () { | 142 test("comes from the Expires header", () { |
205 expect(new Response.ok("okay!", headers: { | 143 expect(new Response.ok("okay!", headers: { |
206 'expires': 'Sun, 06 Nov 1994 08:49:37 GMT' | 144 'expires': 'Sun, 06 Nov 1994 08:49:37 GMT' |
207 }).expires, equals(DateTime.parse("1994-11-06 08:49:37z"))); | 145 }).expires, equals(DateTime.parse("1994-11-06 08:49:37z"))); |
208 }); | 146 }); |
209 }); | 147 }); |
210 | 148 |
211 group("lastModified", () { | 149 group("lastModified", () { |
212 test("is null without a Last-Modified header", () { | 150 test("is null without a Last-Modified header", () { |
213 expect(new Response.ok("okay!").lastModified, isNull); | 151 expect(new Response.ok("okay!").lastModified, isNull); |
214 }); | 152 }); |
215 | 153 |
216 test("comes from the Last-Modified header", () { | 154 test("comes from the Last-Modified header", () { |
217 expect(new Response.ok("okay!", headers: { | 155 expect(new Response.ok("okay!", headers: { |
218 'last-modified': 'Sun, 06 Nov 1994 08:49:37 GMT' | 156 'last-modified': 'Sun, 06 Nov 1994 08:49:37 GMT' |
219 }).lastModified, equals(DateTime.parse("1994-11-06 08:49:37z"))); | 157 }).lastModified, equals(DateTime.parse("1994-11-06 08:49:37z"))); |
220 }); | 158 }); |
221 }); | 159 }); |
222 | |
223 group("contentLength", () { | |
224 test("is null without a content-length header", () { | |
225 expect(new Response.ok("okay!").contentLength, isNull); | |
226 }); | |
227 | |
228 test("comes from the content-length header", () { | |
229 expect(new Response.ok("okay!", headers: { | |
230 'content-length': '42' | |
231 }).contentLength, equals(42)); | |
232 }); | |
233 }); | |
234 } | 160 } |
OLD | NEW |