// 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> upgrade(
///     HttpRequest request, {
///     dynamic protocolSelector(List<String> protocols),
///     CompressionOptions compression: CompressionOptions.compressionDefault
/// })
/// Upgrades an HttpRequest to a WebSocket connection. If the request is not a
/// valid WebSocket upgrade request an HTTP response with status code 500 will
/// be returned. Otherwise the returned future will complete with the WebSocket
/// when the upgrade process is complete.
/// @description Checks that the method [upgrade] returns Future<WebSocket>.
/// @author ngl@unipro.ru

import "dart:async";
import "dart:io";
import "../../../Utils/expect.dart";

main() {
  var protocols = ["p1.com", "p2.com"];
  select(List<String> receivedProtocols) {
    Expect.listEquals(protocols, receivedProtocols);
    return protocols[0];
  }

  HttpServer.bind("127.0.0.1", 0).then((server) {
    server.listen((request) {
      var webs = WebSocketTransformer.upgrade(request, protocolSelector: select);
      webs.then((WebSocket websocket) {
        websocket.close();
      });
    });
    WebSocket
        .connect("ws://127.0.0.1:${server.port}/", protocols: protocols)
        .then((client) {
      client.close();
      server.close();
    });
  });
}
