blob: 2864bdaca78decbd9aec36ea3f74aa94e0a1589f [file] [log] [blame]
// Copyright (c) 2022, 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 'package:async/async.dart';
import 'package:http/http.dart';
import 'package:stream_channel/stream_channel.dart';
import 'package:test/test.dart';
import 'utils.dart';
/// Tests that the [Client] correctly processes response headers.
void testResponseHeaders(Client client) async {
group('server headers', () {
late String host;
late StreamChannel<Object?> httpServerChannel;
late StreamQueue<Object?> httpServerQueue;
setUp(() async {
httpServerChannel = await startServer('response_headers_server.dart');
httpServerQueue = StreamQueue(httpServerChannel.stream);
host = 'localhost:${await httpServerQueue.next}';
});
test('single header', () async {
httpServerChannel.sink.add({'foo': 'bar'});
final response = await client.get(Uri.http(host, ''));
expect(response.headers['foo'], 'bar');
});
test('UPPERCASE header', () async {
httpServerChannel.sink.add({'foo': 'BAR'});
final response = await client.get(Uri.http(host, ''));
// RFC 2616 14.44 states that header field names are case-insensive.
// http.Client canonicalizes field names into lower case.
expect(response.headers['foo'], 'BAR');
});
test('multiple headers', () async {
httpServerChannel.sink
.add({'field1': 'value1', 'field2': 'value2', 'field3': 'value3'});
final response = await client.get(Uri.http(host, ''));
expect(response.headers['field1'], 'value1');
expect(response.headers['field2'], 'value2');
expect(response.headers['field3'], 'value3');
});
test('multiple values per header', () async {
httpServerChannel.sink.add({'list': 'apple, orange, banana'});
final response = await client.get(Uri.http(host, ''));
expect(response.headers['list'], 'apple, orange, banana');
});
});
}