blob: 684f72d513982cfda586bd498398fd524c1537e4 [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.
/// @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 (error processing)
/// @author a.semenov@unipro.ru
import "dart:async";
import "dart:io";
import "../http_utils.dart";
import "allTests_A02.lib.dart";
Future<Stream> create<T extends Object>(Iterable<T> data, {bool Function(T element)? isError}) async {
HttpServer? server;
server = await spawnWebSocketServer((WebSocket ws) {
data.forEach((T x) {
if (isError != null && isError(x)){
ws.addError(x);
} else {
ws.add(x);
}
});
ws.close(WebSocketStatus.normalClosure).then((_) {
server?.close();
});
});
return WebSocket.connect("ws://${server.address.address}:${server.port}/");
}
main() {
test(create);
}