| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | |
| 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. | |
| 4 | |
| 5 library request_test; | |
| 6 | |
| 7 import 'dart:convert'; | |
| 8 | |
| 9 import 'package:http/http.dart' as http; | |
| 10 import 'package:unittest/unittest.dart'; | |
| 11 | |
| 12 import 'utils.dart'; | |
| 13 | |
| 14 void main() { | |
| 15 group('#contentLength', () { | |
| 16 test('is computed from bodyBytes', () { | |
| 17 var request = new http.Request('POST', dummyUrl); | |
| 18 request.bodyBytes = [1, 2, 3, 4, 5]; | |
| 19 expect(request.contentLength, equals(5)); | |
| 20 request.bodyBytes = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; | |
| 21 expect(request.contentLength, equals(10)); | |
| 22 }); | |
| 23 | |
| 24 test('is computed from body', () { | |
| 25 var request = new http.Request('POST', dummyUrl); | |
| 26 request.body = "hello"; | |
| 27 expect(request.contentLength, equals(5)); | |
| 28 request.body = "hello, world"; | |
| 29 expect(request.contentLength, equals(12)); | |
| 30 }); | |
| 31 | |
| 32 test('is not directly mutable', () { | |
| 33 var request = new http.Request('POST', dummyUrl); | |
| 34 expect(() => request.contentLength = 50, throwsUnsupportedError); | |
| 35 }); | |
| 36 }); | |
| 37 | |
| 38 group('#encoding', () { | |
| 39 test('defaults to utf-8', () { | |
| 40 var request = new http.Request('POST', dummyUrl); | |
| 41 expect(request.encoding.name, equals(UTF8.name)); | |
| 42 }); | |
| 43 | |
| 44 test('can be set', () { | |
| 45 var request = new http.Request('POST', dummyUrl); | |
| 46 request.encoding = LATIN1; | |
| 47 expect(request.encoding.name, equals(LATIN1.name)); | |
| 48 }); | |
| 49 | |
| 50 test('is based on the content-type charset if it exists', () { | |
| 51 var request = new http.Request('POST', dummyUrl); | |
| 52 request.headers['Content-Type'] = 'text/plain; charset=iso-8859-1'; | |
| 53 expect(request.encoding.name, equals(LATIN1.name)); | |
| 54 }); | |
| 55 | |
| 56 test('remains the default if the content-type charset is set and unset', | |
| 57 () { | |
| 58 var request = new http.Request('POST', dummyUrl); | |
| 59 request.encoding = LATIN1; | |
| 60 request.headers['Content-Type'] = 'text/plain; charset=utf-8'; | |
| 61 expect(request.encoding.name, equals(UTF8.name)); | |
| 62 | |
| 63 request.headers.remove('Content-Type'); | |
| 64 expect(request.encoding.name, equals(LATIN1.name)); | |
| 65 }); | |
| 66 | |
| 67 test('throws an error if the content-type charset is unknown', () { | |
| 68 var request = new http.Request('POST', dummyUrl); | |
| 69 request.headers['Content-Type'] = | |
| 70 'text/plain; charset=not-a-real-charset'; | |
| 71 expect(() => request.encoding, throwsFormatException); | |
| 72 }); | |
| 73 }); | |
| 74 | |
| 75 group('#bodyBytes', () { | |
| 76 test('defaults to empty', () { | |
| 77 var request = new http.Request('POST', dummyUrl); | |
| 78 expect(request.bodyBytes, isEmpty); | |
| 79 }); | |
| 80 | |
| 81 test('can be set', () { | |
| 82 var request = new http.Request('POST', dummyUrl); | |
| 83 request.bodyBytes = [104, 101, 108, 108, 111]; | |
| 84 expect(request.bodyBytes, equals([104, 101, 108, 108, 111])); | |
| 85 }); | |
| 86 | |
| 87 test('changes when body changes', () { | |
| 88 var request = new http.Request('POST', dummyUrl); | |
| 89 request.body = "hello"; | |
| 90 expect(request.bodyBytes, equals([104, 101, 108, 108, 111])); | |
| 91 }); | |
| 92 }); | |
| 93 | |
| 94 group('#body', () { | |
| 95 test('defaults to empty', () { | |
| 96 var request = new http.Request('POST', dummyUrl); | |
| 97 expect(request.body, isEmpty); | |
| 98 }); | |
| 99 | |
| 100 test('can be set', () { | |
| 101 var request = new http.Request('POST', dummyUrl); | |
| 102 request.body = "hello"; | |
| 103 expect(request.body, equals("hello")); | |
| 104 }); | |
| 105 | |
| 106 test('changes when bodyBytes changes', () { | |
| 107 var request = new http.Request('POST', dummyUrl); | |
| 108 request.bodyBytes = [104, 101, 108, 108, 111]; | |
| 109 expect(request.body, equals("hello")); | |
| 110 }); | |
| 111 | |
| 112 test('is encoded according to the given encoding', () { | |
| 113 var request = new http.Request('POST', dummyUrl); | |
| 114 request.encoding = LATIN1; | |
| 115 request.body = "föøbãr"; | |
| 116 expect(request.bodyBytes, equals([102, 246, 248, 98, 227, 114])); | |
| 117 }); | |
| 118 | |
| 119 test('is decoded according to the given encoding', () { | |
| 120 var request = new http.Request('POST', dummyUrl); | |
| 121 request.encoding = LATIN1; | |
| 122 request.bodyBytes = [102, 246, 248, 98, 227, 114]; | |
| 123 expect(request.body, equals("föøbãr")); | |
| 124 }); | |
| 125 }); | |
| 126 | |
| 127 group('#bodyFields', () { | |
| 128 test("can't be read without setting the content-type", () { | |
| 129 var request = new http.Request('POST', dummyUrl); | |
| 130 expect(() => request.bodyFields, throwsStateError); | |
| 131 }); | |
| 132 | |
| 133 test("can't be read with the wrong content-type", () { | |
| 134 var request = new http.Request('POST', dummyUrl); | |
| 135 request.headers['Content-Type'] = 'text/plain'; | |
| 136 expect(() => request.bodyFields, throwsStateError); | |
| 137 }); | |
| 138 | |
| 139 test("can't be set with the wrong content-type", () { | |
| 140 var request = new http.Request('POST', dummyUrl); | |
| 141 request.headers['Content-Type'] = 'text/plain'; | |
| 142 expect(() => request.bodyFields = {}, throwsStateError); | |
| 143 }); | |
| 144 | |
| 145 test('defaults to empty', () { | |
| 146 var request = new http.Request('POST', dummyUrl); | |
| 147 request.headers['Content-Type'] = | |
| 148 'application/x-www-form-urlencoded'; | |
| 149 expect(request.bodyFields, isEmpty); | |
| 150 }); | |
| 151 | |
| 152 test('can be set with no content-type', () { | |
| 153 var request = new http.Request('POST', dummyUrl); | |
| 154 request.bodyFields = {'hello': 'world'}; | |
| 155 expect(request.bodyFields, equals({'hello': 'world'})); | |
| 156 }); | |
| 157 | |
| 158 test('changes when body changes', () { | |
| 159 var request = new http.Request('POST', dummyUrl); | |
| 160 request.headers['Content-Type'] = | |
| 161 'application/x-www-form-urlencoded'; | |
| 162 request.body = 'key%201=value&key+2=other%2bvalue'; | |
| 163 expect(request.bodyFields, | |
| 164 equals({'key 1': 'value', 'key 2': 'other+value'})); | |
| 165 }); | |
| 166 | |
| 167 test('is encoded according to the given encoding', () { | |
| 168 var request = new http.Request('POST', dummyUrl); | |
| 169 request.headers['Content-Type'] = | |
| 170 'application/x-www-form-urlencoded'; | |
| 171 request.encoding = LATIN1; | |
| 172 request.bodyFields = {"föø": "bãr"}; | |
| 173 expect(request.body, equals('f%F6%F8=b%E3r')); | |
| 174 }); | |
| 175 | |
| 176 test('is decoded according to the given encoding', () { | |
| 177 var request = new http.Request('POST', dummyUrl); | |
| 178 request.headers['Content-Type'] = | |
| 179 'application/x-www-form-urlencoded'; | |
| 180 request.encoding = LATIN1; | |
| 181 request.body = 'f%F6%F8=b%E3r'; | |
| 182 expect(request.bodyFields, equals({"föø": "bãr"})); | |
| 183 }); | |
| 184 }); | |
| 185 | |
| 186 group('content-type header', () { | |
| 187 test('defaults to empty', () { | |
| 188 var request = new http.Request('POST', dummyUrl); | |
| 189 expect(request.headers['Content-Type'], isNull); | |
| 190 }); | |
| 191 | |
| 192 test('defaults to empty if only encoding is set', () { | |
| 193 var request = new http.Request('POST', dummyUrl); | |
| 194 request.encoding = LATIN1; | |
| 195 expect(request.headers['Content-Type'], isNull); | |
| 196 }); | |
| 197 | |
| 198 test('name is case insensitive', () { | |
| 199 var request = new http.Request('POST', dummyUrl); | |
| 200 request.headers['CoNtEnT-tYpE'] = 'application/json'; | |
| 201 expect(request.headers, | |
| 202 containsPair('content-type', 'application/json')); | |
| 203 }); | |
| 204 | |
| 205 test('is set to application/x-www-form-urlencoded with charset utf-8 if ' | |
| 206 'bodyFields is set', () { | |
| 207 var request = new http.Request('POST', dummyUrl); | |
| 208 request.bodyFields = {'hello': 'world'}; | |
| 209 expect(request.headers['Content-Type'], | |
| 210 equals('application/x-www-form-urlencoded; charset=utf-8')); | |
| 211 }); | |
| 212 | |
| 213 test('is set to application/x-www-form-urlencoded with the given charset ' | |
| 214 'if bodyFields and encoding are set', () { | |
| 215 var request = new http.Request('POST', dummyUrl); | |
| 216 request.encoding = LATIN1; | |
| 217 request.bodyFields = {'hello': 'world'}; | |
| 218 expect(request.headers['Content-Type'], | |
| 219 equals('application/x-www-form-urlencoded; charset=iso-8859-1')); | |
| 220 }); | |
| 221 | |
| 222 test('is set to text/plain and the given encoding if body and encoding are ' | |
| 223 'both set', () { | |
| 224 var request = new http.Request('POST', dummyUrl); | |
| 225 request.encoding = LATIN1; | |
| 226 request.body = 'hello, world'; | |
| 227 expect(request.headers['Content-Type'], | |
| 228 equals('text/plain; charset=iso-8859-1')); | |
| 229 }); | |
| 230 | |
| 231 test('is modified to include utf-8 if body is set', () { | |
| 232 var request = new http.Request('POST', dummyUrl); | |
| 233 request.headers['Content-Type'] = 'application/json'; | |
| 234 request.body = '{"hello": "world"}'; | |
| 235 expect(request.headers['Content-Type'], | |
| 236 equals('application/json; charset=utf-8')); | |
| 237 }); | |
| 238 | |
| 239 test('is modified to include the given encoding if encoding is set', () { | |
| 240 var request = new http.Request('POST', dummyUrl); | |
| 241 request.headers['Content-Type'] = 'application/json'; | |
| 242 request.encoding = LATIN1; | |
| 243 expect(request.headers['Content-Type'], | |
| 244 equals('application/json; charset=iso-8859-1')); | |
| 245 }); | |
| 246 | |
| 247 test('has its charset overridden by an explicit encoding', () { | |
| 248 var request = new http.Request('POST', dummyUrl); | |
| 249 request.headers['Content-Type'] = | |
| 250 'application/json; charset=utf-8'; | |
| 251 request.encoding = LATIN1; | |
| 252 expect(request.headers['Content-Type'], | |
| 253 equals('application/json; charset=iso-8859-1')); | |
| 254 }); | |
| 255 | |
| 256 test("doen't have its charset overridden by setting bodyFields", () { | |
| 257 var request = new http.Request('POST', dummyUrl); | |
| 258 request.headers['Content-Type'] = | |
| 259 'application/x-www-form-urlencoded; charset=iso-8859-1'; | |
| 260 request.bodyFields = {'hello': 'world'}; | |
| 261 expect(request.headers['Content-Type'], | |
| 262 equals('application/x-www-form-urlencoded; charset=iso-8859-1')); | |
| 263 }); | |
| 264 | |
| 265 test("doen't have its charset overridden by setting body", () { | |
| 266 var request = new http.Request('POST', dummyUrl); | |
| 267 request.headers['Content-Type'] = | |
| 268 'application/json; charset=iso-8859-1'; | |
| 269 request.body = '{"hello": "world"}'; | |
| 270 expect(request.headers['Content-Type'], | |
| 271 equals('application/json; charset=iso-8859-1')); | |
| 272 }); | |
| 273 }); | |
| 274 | |
| 275 group('#finalize', () { | |
| 276 test('returns a stream that emits the request body', () { | |
| 277 var request = new http.Request('POST', dummyUrl); | |
| 278 request.body = "Hello, world!"; | |
| 279 expect(request.finalize().bytesToString(), | |
| 280 completion(equals("Hello, world!"))); | |
| 281 }); | |
| 282 | |
| 283 test('freezes #persistentConnection', () { | |
| 284 var request = new http.Request('POST', dummyUrl); | |
| 285 request.finalize(); | |
| 286 | |
| 287 expect(request.persistentConnection, isTrue); | |
| 288 expect(() => request.persistentConnection = false, throwsStateError); | |
| 289 }); | |
| 290 | |
| 291 test('freezes #followRedirects', () { | |
| 292 var request = new http.Request('POST', dummyUrl); | |
| 293 request.finalize(); | |
| 294 | |
| 295 expect(request.followRedirects, isTrue); | |
| 296 expect(() => request.followRedirects = false, throwsStateError); | |
| 297 }); | |
| 298 | |
| 299 test('freezes #maxRedirects', () { | |
| 300 var request = new http.Request('POST', dummyUrl); | |
| 301 request.finalize(); | |
| 302 | |
| 303 expect(request.maxRedirects, equals(5)); | |
| 304 expect(() => request.maxRedirects = 10, throwsStateError); | |
| 305 }); | |
| 306 | |
| 307 test('freezes #encoding', () { | |
| 308 var request = new http.Request('POST', dummyUrl); | |
| 309 request.finalize(); | |
| 310 | |
| 311 expect(request.encoding.name, equals(UTF8.name)); | |
| 312 expect(() => request.encoding = ASCII, throwsStateError); | |
| 313 }); | |
| 314 | |
| 315 test('freezes #bodyBytes', () { | |
| 316 var request = new http.Request('POST', dummyUrl); | |
| 317 request.bodyBytes = [1, 2, 3]; | |
| 318 request.finalize(); | |
| 319 | |
| 320 expect(request.bodyBytes, equals([1, 2, 3])); | |
| 321 expect(() => request.bodyBytes = [4, 5, 6], throwsStateError); | |
| 322 }); | |
| 323 | |
| 324 test('freezes #body', () { | |
| 325 var request = new http.Request('POST', dummyUrl); | |
| 326 request.body = "hello"; | |
| 327 request.finalize(); | |
| 328 | |
| 329 expect(request.body, equals("hello")); | |
| 330 expect(() => request.body = "goodbye", throwsStateError); | |
| 331 }); | |
| 332 | |
| 333 test('freezes #bodyFields', () { | |
| 334 var request = new http.Request('POST', dummyUrl); | |
| 335 request.bodyFields = {"hello": "world"}; | |
| 336 request.finalize(); | |
| 337 | |
| 338 expect(request.bodyFields, equals({"hello": "world"})); | |
| 339 expect(() => request.bodyFields = {}, throwsStateError); | |
| 340 }); | |
| 341 | |
| 342 test("can't be called twice", () { | |
| 343 var request = new http.Request('POST', dummyUrl); | |
| 344 request.finalize(); | |
| 345 expect(request.finalize, throwsStateError); | |
| 346 }); | |
| 347 }); | |
| 348 | |
| 349 group('#toString()', () { | |
| 350 test('includes the method and URL', () { | |
| 351 var request = new http.Request('POST', dummyUrl); | |
| 352 expect(request.toString(), 'POST $dummyUrl'); | |
| 353 }); | |
| 354 }); | |
| 355 } | |
| 356 | |
| OLD | NEW |