diff --git a/pubspec.yaml b/pubspec.yaml index 3a95d49..032e80d 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,5 +1,5 @@ name: web_socket_channel -version: 1.0.4 +version: 1.0.5-dev description: StreamChannel wrappers for WebSockets. author: Dart Team homepage: https://github.com/dart-lang/web_socket_channel @@ -13,4 +13,4 @@ dependencies: stream_channel: '^1.2.0' dev_dependencies: - test: '^0.12.0' + test: '^0.12.18' diff --git a/test/html_test.dart b/test/html_test.dart index 9954eb6..8c9f44e 100644 --- a/test/html_test.dart +++ b/test/html_test.dart @@ -3,11 +3,6 @@ // BSD-style license that can be found in the LICENSE file. @TestOn('browser') -@Skip( - "This suite requires a WebSocket server, which is currently unsupported\n" - "by the test package (dart-lang/test#330). It's currently set up to talk\n" - "to a hard-coded server on localhost:1234 that is spawned in \n" - "html_test_server.dart.") import 'dart:async'; import 'dart:html'; @@ -20,13 +15,34 @@ import 'package:web_socket_channel/html.dart'; import 'package:web_socket_channel/web_socket_channel.dart'; void main() { - var channel; + int port; + setUpAll(() async { + var channel = spawnHybridCode(r""" + import 'dart:io'; + + import 'package:stream_channel/stream_channel.dart'; + + hybridMain(StreamChannel channel) async { + var server = await HttpServer.bind('localhost', 0); + server.transform(new WebSocketTransformer()).listen((webSocket) { + webSocket.listen((request) { + webSocket.add(request); + }); + }); + channel.sink.add(server.port); + } + """, stayAlive: true); + + port = await channel.stream.first; + }); + + WebSocketChannel channel; tearDown(() { if (channel != null) channel.sink.close(); }); test("communicates using an existing WebSocket", () async { - var webSocket = new WebSocket("ws://localhost:1234"); + var webSocket = new WebSocket("ws://localhost:$port"); channel = new HtmlWebSocketChannel(webSocket); var queue = new StreamQueue(channel.stream); @@ -42,7 +58,7 @@ void main() { }); test("communicates using an existing open WebSocket", () async { - var webSocket = new WebSocket("ws://localhost:1234"); + var webSocket = new WebSocket("ws://localhost:$port"); await webSocket.onOpen.first; channel = new HtmlWebSocketChannel(webSocket); @@ -53,7 +69,7 @@ void main() { }); test(".connect defaults to binary lists", () async { - channel = new HtmlWebSocketChannel.connect("ws://localhost:1234"); + channel = new HtmlWebSocketChannel.connect("ws://localhost:$port"); var queue = new StreamQueue(channel.stream); channel.sink.add("foo"); @@ -65,7 +81,7 @@ void main() { test(".connect can use blobs", () async { channel = new HtmlWebSocketChannel.connect( - "ws://localhost:1234", binaryType: BinaryType.blob); + "ws://localhost:$port", binaryType: BinaryType.blob); var queue = new StreamQueue(channel.stream); channel.sink.add("foo"); @@ -77,9 +93,25 @@ void main() { test(".connect wraps a connection error in WebSocketChannelException", () async { + // Spawn a server that will immediately reject the connection. + var serverChannel = spawnHybridCode(r""" + import 'dart:io'; + + import 'package:stream_channel/stream_channel.dart'; + + hybridMain(StreamChannel channel) async { + var server = await ServerSocket.bind('localhost', 0); + server.listen((socket) { + socket.close(); + }); + channel.sink.add(server.port); + } + """); + // TODO(nweiz): Make this channel use a port number that's guaranteed to be // invalid. - var channel = new HtmlWebSocketChannel.connect("ws://localhost:1235"); + var channel = new HtmlWebSocketChannel.connect( + "ws://localhost:${await serverChannel.stream.first}"); expect(channel.stream.toList(), throwsA(new isInstanceOf())); }); diff --git a/test/html_test_server.dart b/test/html_test_server.dart deleted file mode 100644 index e356695..0000000 --- a/test/html_test_server.dart +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright (c) 2016, 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. - -import 'dart:io'; - -main() async { - var server = await HttpServer.bind("localhost", 1234); - server.transform(new WebSocketTransformer()).listen((webSocket) { - print("connected"); - webSocket.listen((request) { - print("got $request"); - webSocket.add(request); - }); - }); -}