// 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 int closeCode
/// The close code set when the WebSocket connection is closed. If there is no
/// close code available this property will be null.
/// @description Checks that the [closeCode] is null when connection is not
/// closed and is set to int value if the WebSocket connection is closed.
/// @author ngl@unipro.ru

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

main() {
  HttpServer.bind("127.0.0.1", 0).then((server) {
    server.listen((request) {
      WebSocketTransformer
          .upgrade(request)
          .then((websocket) {
        websocket.close();
      });
    });

    var webs = WebSocket.connect("ws://127.0.0.1:${server.port}/");
    webs.then((client) async {
      Expect.isNull(client.closeCode);
      await server.close();
      client.close().then((_) {
        Expect.equals(WebSocketStatus.noStatusReceived, client.closeCode);
      });
    });
  });
}
