/*
 * 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 a 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 [upgrate] 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();
    });
  });
}
