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 class _TestMessage extends Message { | 13 class _TestMessage extends Message { |
14 _TestMessage(Map<String, String> headers, Stream<List<int>> body) | 14 _TestMessage(Map<String, String> headers, Map<String, Object> context, |
15 : super(body, headers: headers); | 15 Stream<List<int>> body) |
| 16 : super(body, headers: headers, context: context); |
16 } | 17 } |
17 | 18 |
18 Message _createMessage({Map<String, String> headers, Stream<List<int>> body}) { | 19 Message _createMessage({Map<String, String> headers, |
| 20 Map<String, Object> context, Stream<List<int>> body}) { |
19 if (body == null) body = new Stream.fromIterable([]); | 21 if (body == null) body = new Stream.fromIterable([]); |
20 return new _TestMessage(headers, body); | 22 return new _TestMessage(headers, context, body); |
21 } | 23 } |
22 | 24 |
23 void main() { | 25 void main() { |
24 group('headers', () { | 26 group('headers', () { |
25 test('message headers are case insensitive', () { | 27 test('message headers are case insensitive', () { |
26 var message = _createMessage(headers: {'foo': 'bar'}); | 28 var message = _createMessage(headers: {'foo': 'bar'}); |
27 | 29 |
28 expect(message.headers, containsPair('foo', 'bar')); | 30 expect(message.headers, containsPair('foo', 'bar')); |
29 expect(message.headers, containsPair('Foo', 'bar')); | 31 expect(message.headers, containsPair('Foo', 'bar')); |
30 expect(message.headers, containsPair('FOO', 'bar')); | 32 expect(message.headers, containsPair('FOO', 'bar')); |
31 }); | 33 }); |
32 | 34 |
33 test('null header value becomes empty, immutable', () { | 35 test('null header value becomes empty, immutable', () { |
34 var message = _createMessage(); | 36 var message = _createMessage(); |
35 expect(message.headers, isEmpty); | 37 expect(message.headers, isEmpty); |
36 expect(() => message.headers['h1'] = 'value1', throwsUnsupportedError); | 38 expect(() => message.headers['h1'] = 'value1', throwsUnsupportedError); |
37 }); | 39 }); |
38 | 40 |
39 test('headers are immutable', () { | 41 test('headers are immutable', () { |
40 var message = _createMessage(headers: {'h1': 'value1'}); | 42 var message = _createMessage(headers: {'h1': 'value1'}); |
41 expect(() => message.headers['h1'] = 'value1', throwsUnsupportedError); | 43 expect(() => message.headers['h1'] = 'value1', throwsUnsupportedError); |
42 expect(() => message.headers['h1'] = 'value2', throwsUnsupportedError); | 44 expect(() => message.headers['h1'] = 'value2', throwsUnsupportedError); |
43 expect(() => message.headers['h2'] = 'value2', throwsUnsupportedError); | 45 expect(() => message.headers['h2'] = 'value2', throwsUnsupportedError); |
44 }); | 46 }); |
45 }); | 47 }); |
| 48 |
| 49 group('context', () { |
| 50 test('is accessible', () { |
| 51 var message = _createMessage(context: {'foo': 'bar'}); |
| 52 expect(message.context, containsPair('foo', 'bar')); |
| 53 }); |
| 54 |
| 55 test('null context value becomes empty and immutable', () { |
| 56 var message = _createMessage(); |
| 57 expect(message.context, isEmpty); |
| 58 expect(() => message.context['key'] = 'value', throwsUnsupportedError); |
| 59 }); |
| 60 |
| 61 test('is immutable', () { |
| 62 var message = _createMessage(context: {'key': 'value'}); |
| 63 expect(() => message.context['key'] = 'value', throwsUnsupportedError); |
| 64 expect(() => message.context['key2'] = 'value', throwsUnsupportedError); |
| 65 }); |
| 66 }); |
| 67 |
46 group("readAsString", () { | 68 group("readAsString", () { |
47 test("supports a null body", () { | 69 test("supports a null body", () { |
48 var request = _createMessage(); | 70 var request = _createMessage(); |
49 expect(request.readAsString(), completion(equals(""))); | 71 expect(request.readAsString(), completion(equals(""))); |
50 }); | 72 }); |
51 | 73 |
52 test("supports a Stream<List<int>> body", () { | 74 test("supports a Stream<List<int>> body", () { |
53 var controller = new StreamController(); | 75 var controller = new StreamController(); |
54 var request = _createMessage(body: controller.stream); | 76 var request = _createMessage(body: controller.stream); |
55 expect(request.readAsString(), completion(equals("hello, world"))); | 77 expect(request.readAsString(), completion(equals("hello, world"))); |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
154 }).encoding, isNull); | 176 }).encoding, isNull); |
155 }); | 177 }); |
156 | 178 |
157 test("comes from the content-type charset parameter", () { | 179 test("comes from the content-type charset parameter", () { |
158 expect(_createMessage(headers: { | 180 expect(_createMessage(headers: { |
159 'content-type': 'text/plain; charset=iso-8859-1' | 181 'content-type': 'text/plain; charset=iso-8859-1' |
160 }).encoding, equals(LATIN1)); | 182 }).encoding, equals(LATIN1)); |
161 }); | 183 }); |
162 }); | 184 }); |
163 } | 185 } |
OLD | NEW |