blob: df9d17e68f821ff72bca56a1b2a6ae8cebf65756 [file] [log] [blame]
// Copyright (c) 2017, 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.
// @dart = 2.9
/// @assertion
/// Future<WebSocket> connect(
/// String url, {
/// Iterable<String> protocols,
/// Map<String, dynamic> headers,
/// CompressionOptions compression: CompressionOptions.compressionDefault
/// })
/// Create a new WebSocket connection. The URL supplied in url must use the
/// scheme ws or wss.
/// The protocols argument is specifying the subprotocols the client is willing
/// to speak.
/// The headers argument is specifying additional HTTP headers for setting up
/// the connection. This would typically be the Origin header and potentially
/// cookies. The keys of the map are the header fields and the values are either
/// String or List.
/// If headers is provided, there are a number of headers which are controlled by
/// the WebSocket connection process. These headers are:
/// - connection
/// - sec-websocket-key
/// - sec-websocket-protocol
/// - sec-websocket-version
/// - upgrade
/// If any of these are passed in the headers map they will be ignored.
/// If the url contains user information this will be passed as basic
/// authentication when setting up the connection.
/// @description Checks that the static method WebSocket.connect creates a new
/// Future that will complete with WebSocket. Tests methods and properties of
/// created instance
/// @author a.semenov@unipro.ru
import "dart:async";
import "dart:io";
import "../http_utils.dart";
import "allTests_A01.lib.dart";
Future<Stream> create<T>(Iterable<T> data) async {
HttpServer server;
server = await spawnWebSocketServer((WebSocket ws) {
data.forEach((T x) => ws.add(x));
ws.close(WebSocketStatus.normalClosure).then((_) {
server.close();
});
});
return WebSocket.connect("ws://${server.address.address}:${server.port}/");
}
main() {
test(create);
}