// Copyright (c) 2013, 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. // // VMOptions= // VMOptions=--short_socket_read // VMOptions=--short_socket_write // VMOptions=--short_socket_read --short_socket_write import "package:expect/expect.dart"; import "dart:async"; import "dart:io"; testEmptyProtocol() { HttpServer.bind("127.0.0.1", 0).then((server) { server.listen((request) { WebSocketTransformer.upgrade(request).then((websocket) { websocket.close(); }); }); WebSocket.connect("ws://127.0.0.1:${server.port}/", protocols: []) .then((client) { Expect.isNull(client.protocol); client.close(); server.close(); }); }); } testProtocol(List protocols, String used) { selector(List receivedProtocols) { Expect.listEquals(protocols, receivedProtocols); return used; } HttpServer.bind("127.0.0.1", 0).then((server) { server.listen((request) { WebSocketTransformer.upgrade(request, protocolSelector: selector) .then((websocket) { Expect.equals(used, websocket.protocol); websocket.close(); }); }); WebSocket.connect("ws://127.0.0.1:${server.port}/", protocols: protocols) .then((client) { Expect.equals(used, client.protocol); client.close(); server.close(); }); }); } testProtocolHandler() { // Test throwing an error. HttpServer.bind("127.0.0.1", 0).then((server) { server.listen((request) { selector(List receivedProtocols) { throw "error"; } WebSocketTransformer.upgrade(request, protocolSelector: selector).then( (websocket) { Expect.fail('error expected'); }, onError: (error) { Expect.equals('error', error); }); }); WebSocket.connect("ws://127.0.0.1:${server.port}/", protocols: ["v1.example.com"]).then((client) { Expect.fail('error expected'); }, onError: (error) { server.close(); }); }); // Test returning another protocol. HttpServer.bind("127.0.0.1", 0).then((server) { server.listen((request) { selector(List receivedProtocols) => "v2.example.com"; WebSocketTransformer.upgrade(request, protocolSelector: selector).then( (websocket) { Expect.fail('error expected'); }, onError: (error) { Expect.isTrue(error is WebSocketException); }); }); WebSocket.connect("ws://127.0.0.1:${server.port}/", protocols: ["v1.example.com"]).then((client) { Expect.fail('error expected'); }, onError: (error) { server.close(); }); }); } void main() { testEmptyProtocol(); testProtocol(["v1.example.com", "v2.example.com"], "v1.example.com"); testProtocol(["v1.example.com", "v2.example.com"], "v2.example.com"); testProtocolHandler(); }