From c7f4c434fce10761a99b88c980122fa4554fa255 Mon Sep 17 00:00:00 2001 From: Brian Quinlan Date: Wed, 3 Apr 2024 17:43:31 -0700 Subject: [PATCH 1/4] Add the ability to create a `package:web_socket` `WebSocket` given a `dart:io` `WebSocket`. --- pkgs/web_socket/CHANGELOG.md | 5 +++ pkgs/web_socket/lib/src/io_web_socket.dart | 5 +++ pkgs/web_socket/pubspec.yaml | 2 +- pkgs/web_socket/test/io_web_socket_test.dart | 41 ++++++++++++++++++++ 4 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 pkgs/web_socket/test/io_web_socket_test.dart diff --git a/pkgs/web_socket/CHANGELOG.md b/pkgs/web_socket/CHANGELOG.md index 28b499a2f5..2e6bcbe389 100644 --- a/pkgs/web_socket/CHANGELOG.md +++ b/pkgs/web_socket/CHANGELOG.md @@ -1,3 +1,8 @@ +## 0.1.5 + +- Add the ability to create a `package:web_socket` `WebSocket` given a + `dart:io` `WebSocket`. + ## 0.1.0 - Basic functionality in place. diff --git a/pkgs/web_socket/lib/src/io_web_socket.dart b/pkgs/web_socket/lib/src/io_web_socket.dart index d44a33ecfa..0780ce807f 100644 --- a/pkgs/web_socket/lib/src/io_web_socket.dart +++ b/pkgs/web_socket/lib/src/io_web_socket.dart @@ -49,6 +49,11 @@ class IOWebSocket implements WebSocket { return IOWebSocket._(webSocket); } + // Create an `IOWebSocket` from an existing `dart:io` `WebSocket`. + factory IOWebSocket.fromWebSocket(io.WebSocket webSocket) { + return IOWebSocket._(webSocket); + } + IOWebSocket._(this._webSocket) { _webSocket.listen( (event) { diff --git a/pkgs/web_socket/pubspec.yaml b/pkgs/web_socket/pubspec.yaml index 78ec62ed26..fdc7a7821c 100644 --- a/pkgs/web_socket/pubspec.yaml +++ b/pkgs/web_socket/pubspec.yaml @@ -3,7 +3,7 @@ description: >- Any easy-to-use library for communicating with WebSockets that has multiple implementations. repository: https://github.com/dart-lang/http/tree/master/pkgs/web_socket -version: 0.1.0 +version: 0.1.5 environment: sdk: ^3.3.0 diff --git a/pkgs/web_socket/test/io_web_socket_test.dart b/pkgs/web_socket/test/io_web_socket_test.dart new file mode 100644 index 0000000000..7d8fbccd55 --- /dev/null +++ b/pkgs/web_socket/test/io_web_socket_test.dart @@ -0,0 +1,41 @@ +// Copyright (c) 2024, 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') +library; + +import 'dart:io' as io; + +import 'package:test/test.dart'; +import 'package:web_socket/io_web_socket.dart'; +import 'package:web_socket/web_socket.dart'; +import 'package:web_socket_conformance_tests/web_socket_conformance_tests.dart'; + +void main() { + group('fromWebSocket', () { + late final io.HttpServer server; + late io.HttpHeaders headers; + late Uri uri; + + setUp(() async { + server = (await io.HttpServer.bind('localhost', 0)) + ..listen((request) async { + headers = request.headers; + io.WebSocketTransformer.upgrade(request) + .then((webSocket) => webSocket.listen(webSocket.add)); + }); + uri = Uri.parse('ws://localhost:${server.port}'); + }); + + test('custom headers', () async { + final ws = IOWebSocket.fromWebSocket(await io.WebSocket.connect( + uri.toString(), + headers: {'fruit': 'apple'})); + expect(headers['fruit'], ['apple']); + ws.sendText('Hello World!'); + expect(await ws.events.first, TextDataReceived('Hello World!')); + await ws.close(); + }); + }); +} From a005af8fcd5115053d694eeb6e92c9ac4a56be08 Mon Sep 17 00:00:00 2001 From: Brian Quinlan Date: Wed, 3 Apr 2024 17:51:43 -0700 Subject: [PATCH 2/4] Fix --- pkgs/web_socket/lib/src/io_web_socket.dart | 5 ++--- pkgs/web_socket/test/io_web_socket_test.dart | 1 - 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/pkgs/web_socket/lib/src/io_web_socket.dart b/pkgs/web_socket/lib/src/io_web_socket.dart index 0780ce807f..5225c07bb9 100644 --- a/pkgs/web_socket/lib/src/io_web_socket.dart +++ b/pkgs/web_socket/lib/src/io_web_socket.dart @@ -50,9 +50,8 @@ class IOWebSocket implements WebSocket { } // Create an `IOWebSocket` from an existing `dart:io` `WebSocket`. - factory IOWebSocket.fromWebSocket(io.WebSocket webSocket) { - return IOWebSocket._(webSocket); - } + factory IOWebSocket.fromWebSocket(io.WebSocket webSocket) => + IOWebSocket._(webSocket); IOWebSocket._(this._webSocket) { _webSocket.listen( diff --git a/pkgs/web_socket/test/io_web_socket_test.dart b/pkgs/web_socket/test/io_web_socket_test.dart index 7d8fbccd55..58816d5d31 100644 --- a/pkgs/web_socket/test/io_web_socket_test.dart +++ b/pkgs/web_socket/test/io_web_socket_test.dart @@ -10,7 +10,6 @@ import 'dart:io' as io; import 'package:test/test.dart'; import 'package:web_socket/io_web_socket.dart'; import 'package:web_socket/web_socket.dart'; -import 'package:web_socket_conformance_tests/web_socket_conformance_tests.dart'; void main() { group('fromWebSocket', () { From 410d6f5e0a83d2ac817337bcf31350bd183e5628 Mon Sep 17 00:00:00 2001 From: Brian Quinlan Date: Wed, 3 Apr 2024 17:55:58 -0700 Subject: [PATCH 3/4] Fix --- pkgs/web_socket/test/io_web_socket_test.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/web_socket/test/io_web_socket_test.dart b/pkgs/web_socket/test/io_web_socket_test.dart index 58816d5d31..a0ee671ddd 100644 --- a/pkgs/web_socket/test/io_web_socket_test.dart +++ b/pkgs/web_socket/test/io_web_socket_test.dart @@ -21,7 +21,7 @@ void main() { server = (await io.HttpServer.bind('localhost', 0)) ..listen((request) async { headers = request.headers; - io.WebSocketTransformer.upgrade(request) + await io.WebSocketTransformer.upgrade(request) .then((webSocket) => webSocket.listen(webSocket.add)); }); uri = Uri.parse('ws://localhost:${server.port}'); From a4379b7cffdd22a00b198211e3b2c078fa604bb7 Mon Sep 17 00:00:00 2001 From: Brian Quinlan Date: Thu, 4 Apr 2024 08:20:35 -0700 Subject: [PATCH 4/4] Change version --- pkgs/web_socket/CHANGELOG.md | 2 +- pkgs/web_socket/pubspec.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/web_socket/CHANGELOG.md b/pkgs/web_socket/CHANGELOG.md index 2e6bcbe389..e0df6cbd19 100644 --- a/pkgs/web_socket/CHANGELOG.md +++ b/pkgs/web_socket/CHANGELOG.md @@ -1,4 +1,4 @@ -## 0.1.5 +## 0.1.1 - Add the ability to create a `package:web_socket` `WebSocket` given a `dart:io` `WebSocket`. diff --git a/pkgs/web_socket/pubspec.yaml b/pkgs/web_socket/pubspec.yaml index fdc7a7821c..1c341f7329 100644 --- a/pkgs/web_socket/pubspec.yaml +++ b/pkgs/web_socket/pubspec.yaml @@ -3,7 +3,7 @@ description: >- Any easy-to-use library for communicating with WebSockets that has multiple implementations. repository: https://github.com/dart-lang/http/tree/master/pkgs/web_socket -version: 0.1.5 +version: 0.1.1 environment: sdk: ^3.3.0