Chromium Code Reviews| Index: test/io_test.dart |
| diff --git a/test/io_test.dart b/test/io_test.dart |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..31ddaba937e7c1e7d9fad6e01f6bd18efdbe9fcd |
| --- /dev/null |
| +++ b/test/io_test.dart |
| @@ -0,0 +1,101 @@ |
| +// 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. |
| + |
| +@TestOn('vm') |
| + |
| +import 'dart:io'; |
| + |
| +import 'package:stream_channel/stream_channel.dart'; |
|
kevmoo
2016/03/01 23:24:47
unused import?
nweiz
2016/03/02 00:10:20
Done.
|
| +import 'package:test/test.dart'; |
| + |
| +import 'package:web_socket_channel/io.dart'; |
| + |
| +void main() { |
| + var server; |
| + tearDown(() async { |
| + if (server != null) await server.close(); |
| + }); |
| + |
| + test("communicates using existing WebSockets", () async { |
| + server = await HttpServer.bind("localhost", 0); |
| + server.transform(new WebSocketTransformer()).listen((webSocket) { |
| + var channel = new IOWebSocketChannel(webSocket); |
| + channel.sink.add("hello!"); |
| + channel.stream.listen((request) { |
| + expect(request, equals("ping")); |
| + channel.sink.add("pong"); |
| + channel.sink.close(5678, "raisin"); |
| + }); |
| + }); |
| + |
| + var webSocket = await WebSocket.connect("ws://localhost:${server.port}"); |
| + var channel = new IOWebSocketChannel(webSocket); |
| + |
| + var n = 0; |
| + channel.stream.listen((message) { |
| + if (n == 0) { |
| + expect(message, equals("hello!")); |
| + channel.sink.add("ping"); |
| + } else if (n == 1) { |
| + expect(message, equals("pong")); |
| + } else { |
| + fail("Only expected two messages."); |
| + } |
| + n++; |
| + }, onDone: expectAsync(() { |
| + expect(channel.closeCode, equals(5678)); |
| + expect(channel.closeReason, equals("raisin")); |
| + })); |
| + }); |
| + |
| + test(".connect communicates immediately", () async { |
| + server = await HttpServer.bind("localhost", 0); |
| + server.transform(new WebSocketTransformer()).listen((webSocket) { |
| + var channel = new IOWebSocketChannel(webSocket); |
| + channel.stream.listen((request) { |
| + expect(request, equals("ping")); |
| + channel.sink.add("pong"); |
| + }); |
| + }); |
| + |
| + var channel = new IOWebSocketChannel.connect( |
| + "ws://localhost:${server.port}"); |
| + channel.sink.add("ping"); |
| + |
| + channel.stream.listen(expectAsync((message) { |
| + expect(message, equals("pong")); |
| + channel.sink.close(5678, "raisin"); |
| + }, count: 1), onDone: expectAsync(() {})); |
| + }); |
| + |
| + test(".connect with an immediate call to close", () async { |
| + server = await HttpServer.bind("localhost", 0); |
| + server.transform(new WebSocketTransformer()).listen((webSocket) { |
| + expect(() async { |
| + var channel = new IOWebSocketChannel(webSocket); |
| + await channel.stream.listen(null).asFuture(); |
| + expect(channel.closeCode, equals(5678)); |
| + expect(channel.closeReason, equals("raisin")); |
| + }(), completes); |
| + }); |
| + |
| + var channel = new IOWebSocketChannel.connect( |
| + "ws://localhost:${server.port}"); |
| + channel.sink.close(5678, "raisin"); |
| + }); |
| + |
| + test(".connect wraps a connection error in WebSocketChannelException", |
| + () async { |
| + server = await HttpServer.bind("localhost", 0); |
| + server.listen((request) { |
| + request.response.statusCode = 404; |
| + request.response.close(); |
| + }); |
| + |
| + var channel = new IOWebSocketChannel.connect( |
| + "ws://localhost:${server.port}"); |
| + expect(channel.stream.toList(), |
| + throwsA(new isInstanceOf<WebSocketChannelException>())); |
|
kevmoo
2016/03/01 23:24:46
missing import of lib w/ WebSocketChannelException
nweiz
2016/03/02 00:10:20
Done.
|
| + }); |
| +} |