// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. import 'dart:async'; import 'package:shelf/shelf.dart'; import 'package:test/test.dart'; void main() { test('adds chunked encoding with no transfer-encoding header', () async { var response = await _chunkResponse( Response.ok(Stream.fromIterable(['hi'.codeUnits]))); expect(response.headers, containsPair('transfer-encoding', 'chunked')); expect(response.readAsString(), completion(equals('2\r\nhi\r\n0\r\n\r\n'))); }); test('adds chunked encoding with transfer-encoding: identity', () async { var response = await _chunkResponse(Response.ok( Stream.fromIterable(['hi'.codeUnits]), headers: {'transfer-encoding': 'identity'})); expect(response.headers, containsPair('transfer-encoding', 'chunked')); expect(response.readAsString(), completion(equals('2\r\nhi\r\n0\r\n\r\n'))); }); test("doesn't add chunked encoding with content length", () async { var response = await _chunkResponse(Response.ok('hi')); expect(response.headers, isNot(contains('transfer-encoding'))); expect(response.readAsString(), completion(equals('hi'))); }); test("doesn't add chunked encoding with status 1xx", () async { var response = await _chunkResponse( Response(123, body: const Stream>.empty())); expect(response.headers, isNot(contains('transfer-encoding'))); expect(response.read().toList(), completion(isEmpty)); }); test("doesn't add chunked encoding with status 204", () async { var response = await _chunkResponse( Response(204, body: const Stream>.empty())); expect(response.headers, isNot(contains('transfer-encoding'))); expect(response.read().toList(), completion(isEmpty)); }); test("doesn't add chunked encoding with status 304", () async { var response = await _chunkResponse( Response(204, body: const Stream>.empty())); expect(response.headers, isNot(contains('transfer-encoding'))); expect(response.read().toList(), completion(isEmpty)); }); test("doesn't add chunked encoding with status 204", () async { var response = await _chunkResponse( Response(204, body: const Stream>.empty())); expect(response.headers, isNot(contains('transfer-encoding'))); expect(response.read().toList(), completion(isEmpty)); }); test("doesn't add chunked encoding with status 204", () async { var response = await _chunkResponse( Response(204, body: const Stream>.empty())); expect(response.headers, isNot(contains('transfer-encoding'))); expect(response.read().toList(), completion(isEmpty)); }); } FutureOr _chunkResponse(Response response) => addChunkedEncoding((_) => response)( Request('GET', Uri.parse('http://example.com/')), );