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.message_test; | 5 library shelf.message_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/src/message.dart'; | 10 import 'package:shelf/src/message.dart'; |
11 import 'package:unittest/unittest.dart'; | 11 import 'package:unittest/unittest.dart'; |
12 | 12 |
13 import 'test_util.dart'; | 13 import 'test_util.dart'; |
14 | 14 |
15 class _TestMessage extends Message { | 15 class _TestMessage extends Message { |
16 _TestMessage(Map<String, String> headers, Map<String, Object> context, | 16 _TestMessage(Map<String, String> headers, Map<String, Object> context, |
17 Stream<List<int>> body) | 17 Stream<List<int>> body) : super(body, headers: headers, context: context); |
18 : super(body, headers: headers, context: context); | |
19 | 18 |
20 Message change({Map<String, String> headers, Map<String, Object> context}) { | 19 Message change({Map<String, String> headers, Map<String, Object> context}) { |
21 throw new UnimplementedError(); | 20 throw new UnimplementedError(); |
22 } | 21 } |
23 } | 22 } |
24 | 23 |
25 Message _createMessage({Map<String, String> headers, | 24 Message _createMessage({Map<String, String> headers, |
26 Map<String, Object> context, Stream<List<int>> body}) { | 25 Map<String, Object> context, Stream<List<int>> body}) { |
27 if (body == null) body = new Stream.fromIterable([]); | 26 if (body == null) body = new Stream.fromIterable([]); |
28 return new _TestMessage(headers, context, body); | 27 return new _TestMessage(headers, context, body); |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
112 | 111 |
113 group("read", () { | 112 group("read", () { |
114 test("supports a null body", () { | 113 test("supports a null body", () { |
115 var request = _createMessage(); | 114 var request = _createMessage(); |
116 expect(request.read().toList(), completion(isEmpty)); | 115 expect(request.read().toList(), completion(isEmpty)); |
117 }); | 116 }); |
118 | 117 |
119 test("supports a Stream<List<int>> body", () { | 118 test("supports a Stream<List<int>> body", () { |
120 var controller = new StreamController(); | 119 var controller = new StreamController(); |
121 var request = _createMessage(body: controller.stream); | 120 var request = _createMessage(body: controller.stream); |
122 expect(request.read().toList(), completion(equals([ | 121 expect(request.read().toList(), |
123 HELLO_BYTES, | 122 completion(equals([HELLO_BYTES, WORLD_BYTES]))); |
124 WORLD_BYTES | |
125 ]))); | |
126 | 123 |
127 controller.add(HELLO_BYTES); | 124 controller.add(HELLO_BYTES); |
128 return new Future(() { | 125 return new Future(() { |
129 controller | 126 controller |
130 ..add(WORLD_BYTES) | 127 ..add(WORLD_BYTES) |
131 ..close(); | 128 ..close(); |
132 }); | 129 }); |
133 }); | 130 }); |
134 | 131 |
135 test("throws when calling read()/readAsString() multiple times", () { | 132 test("throws when calling read()/readAsString() multiple times", () { |
(...skipping 17 matching lines...) Expand all Loading... |
153 }); | 150 }); |
154 }); | 151 }); |
155 | 152 |
156 group("contentLength", () { | 153 group("contentLength", () { |
157 test("is null without a content-length header", () { | 154 test("is null without a content-length header", () { |
158 var request = _createMessage(); | 155 var request = _createMessage(); |
159 expect(request.contentLength, isNull); | 156 expect(request.contentLength, isNull); |
160 }); | 157 }); |
161 | 158 |
162 test("comes from the content-length header", () { | 159 test("comes from the content-length header", () { |
163 var request = _createMessage(headers: { | 160 var request = _createMessage(headers: {'content-length': '42'}); |
164 'content-length': '42' | |
165 }); | |
166 expect(request.contentLength, 42); | 161 expect(request.contentLength, 42); |
167 }); | 162 }); |
168 }); | 163 }); |
169 | 164 |
170 group("mimeType", () { | 165 group("mimeType", () { |
171 test("is null without a content-type header", () { | 166 test("is null without a content-type header", () { |
172 expect(_createMessage().mimeType, isNull); | 167 expect(_createMessage().mimeType, isNull); |
173 }); | 168 }); |
174 | 169 |
175 test("comes from the content-type header", () { | 170 test("comes from the content-type header", () { |
176 expect(_createMessage(headers: { | 171 expect(_createMessage(headers: {'content-type': 'text/plain'}).mimeType, |
177 'content-type': 'text/plain' | 172 equals('text/plain')); |
178 }).mimeType, equals('text/plain')); | |
179 }); | 173 }); |
180 | 174 |
181 test("doesn't include parameters", () { | 175 test("doesn't include parameters", () { |
182 expect(_createMessage(headers: { | 176 expect(_createMessage( |
| 177 headers: { |
183 'content-type': 'text/plain; foo=bar; bar=baz' | 178 'content-type': 'text/plain; foo=bar; bar=baz' |
184 }).mimeType, equals('text/plain')); | 179 }).mimeType, equals('text/plain')); |
185 }); | 180 }); |
186 }); | 181 }); |
187 | 182 |
188 group("encoding", () { | 183 group("encoding", () { |
189 test("is null without a content-type header", () { | 184 test("is null without a content-type header", () { |
190 expect(_createMessage().encoding, isNull); | 185 expect(_createMessage().encoding, isNull); |
191 }); | 186 }); |
192 | 187 |
193 test("is null without a charset parameter", () { | 188 test("is null without a charset parameter", () { |
194 expect(_createMessage(headers: { | 189 expect(_createMessage(headers: {'content-type': 'text/plain'}).encoding, |
195 'content-type': 'text/plain' | 190 isNull); |
196 }).encoding, isNull); | |
197 }); | 191 }); |
198 | 192 |
199 test("is null with an unrecognized charset parameter", () { | 193 test("is null with an unrecognized charset parameter", () { |
200 expect(_createMessage(headers: { | 194 expect(_createMessage( |
201 'content-type': 'text/plain; charset=fblthp' | 195 headers: {'content-type': 'text/plain; charset=fblthp'}).encoding, |
202 }).encoding, isNull); | 196 isNull); |
203 }); | 197 }); |
204 | 198 |
205 test("comes from the content-type charset parameter", () { | 199 test("comes from the content-type charset parameter", () { |
206 expect(_createMessage(headers: { | 200 expect(_createMessage( |
| 201 headers: { |
207 'content-type': 'text/plain; charset=iso-8859-1' | 202 'content-type': 'text/plain; charset=iso-8859-1' |
208 }).encoding, equals(LATIN1)); | 203 }).encoding, equals(LATIN1)); |
209 }); | 204 }); |
210 }); | 205 }); |
211 } | 206 } |
OLD | NEW |