/*
 * 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 bool isUpgradeRequest(HttpRequest request)
 * Checks whether the request is a valid WebSocket upgrade request.
 * @description Checks that he method [isUpgradeRequest] return true if a
 * parameter is a valid WebSocket upgrade request.
 * @author ngl@unipro.ru
 */
import "dart:io";
import "../../../Utils/expect.dart";

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

  HttpServer.bind("127.0.0.1", 0).then((server) {
    server.listen((request) {
      Expect.isTrue(WebSocketTransformer.isUpgradeRequest(request));
      WebSocketTransformer
          .upgrade(request, protocolSelector: selector)
          .then((websocket) {
        websocket.close();
      });
    });
    WebSocket
        .connect("ws://127.0.0.1:${server.port}/", protocols: protocols)
        .then((client) {
      client.close();
      server.close();
    });
  });
}
