| 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 |