Skip to content

Commit 43bd3f5

Browse files
authored
Remove reliance on WebSocketChannel.new (#3687)
* Create a Fake * Update serve_handler_test.dart * Make this a release.
1 parent 47d9063 commit 43bd3f5

File tree

5 files changed

+91
-38
lines changed

5 files changed

+91
-38
lines changed

build_daemon/CHANGELOG.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
## 4.0.2-wip
1+
## 4.0.2
22

3+
- Support version `1.x` and `2.x` of `shelf_web_socket` and `2.x` and `3.x`
4+
of `web_socket_channel`.
35
- Bump the min sdk to 3.4.0.
46

57
## 4.0.1

build_daemon/pubspec.yaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name: build_daemon
2-
version: 4.0.2-wip
2+
version: 4.0.2
33
description: A daemon for running Dart builds.
44
repository: https://github.com/dart-lang/build/tree/master/build_daemon
55

@@ -15,10 +15,10 @@ dependencies:
1515
path: ^1.8.0
1616
pool: ^1.5.0
1717
shelf: ^1.0.0
18-
shelf_web_socket: ^1.0.0
18+
shelf_web_socket: ">=1.0.0 <3.0.0"
1919
stream_transform: ^2.0.0
2020
watcher: ^1.0.0
21-
web_socket_channel: ^2.0.0
21+
web_socket_channel: ">=2.0.0 <4.0.0"
2222

2323
dev_dependencies:
2424
analyzer: '>=3.4.0 <7.0.0'
@@ -27,7 +27,7 @@ dev_dependencies:
2727
built_value_generator: ^8.1.0
2828
dart_flutter_team_lints: ^2.0.0
2929
mockito: ^5.0.0
30-
test: ^1.16.0
30+
test: ^1.25.5
3131
test_descriptor: ^2.0.0
3232
uuid: ^3.0.0
3333

build_runner/CHANGELOG.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
## 2.4.10-wip
1+
## 2.4.10
22

3+
- Support version `1.x` and `2.x` of `shelf_web_socket` and `2.x` and `3.x`
4+
- of `web_socket_channel`.
35
- Bump the min sdk to 3.4.0.
46

57
## 2.4.9

build_runner/pubspec.yaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name: build_runner
2-
version: 2.4.10-wip
2+
version: 2.4.10
33
description: A build system for Dart code generation and modular compilation.
44
repository: https://github.com/dart-lang/build/tree/master/build_runner
55

@@ -39,12 +39,12 @@ dependencies:
3939
pub_semver: ^2.0.0
4040
pubspec_parse: ^1.0.0
4141
shelf: ^1.0.0
42-
shelf_web_socket: ^1.0.0
42+
shelf_web_socket: ">=1.0.0 <3.0.0"
4343
stack_trace: ^1.10.0
4444
stream_transform: ^2.0.0
4545
timing: ^1.0.0
4646
watcher: ^1.0.0
47-
web_socket_channel: ^2.0.0
47+
web_socket_channel: ">=2.0.0 <4.0.0"
4848
yaml: ^3.0.0
4949

5050
dev_dependencies:
@@ -54,7 +54,7 @@ dev_dependencies:
5454
build_web_compilers: ^4.0.0
5555
dart_flutter_team_lints: ^3.1.0
5656
stream_channel: ^2.0.0
57-
test: ^1.16.0
57+
test: ^1.25.5
5858
test_descriptor: ^2.0.0
5959
test_process: ^2.0.0
6060

build_runner/test/server/serve_handler_test.dart

Lines changed: 77 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import 'dart:convert';
77
import 'dart:io';
88

99
import 'package:_test_common/common.dart';
10+
import 'package:async/async.dart';
1011
import 'package:build/build.dart';
1112
import 'package:build_runner/src/entrypoint/options.dart';
1213
import 'package:build_runner/src/generate/watch_impl.dart';
@@ -24,6 +25,76 @@ import 'package:test/fake.dart';
2425
import 'package:test/test.dart';
2526
import 'package:web_socket_channel/web_socket_channel.dart';
2627

28+
class FakeSink extends DelegatingStreamSink implements WebSocketSink {
29+
final FakeWebSocketChannel _channel;
30+
31+
FakeSink(this._channel) : super(_channel._controller.sink);
32+
33+
@override
34+
Future close([int? closeCode, String? closeReason]) async {
35+
await super.close();
36+
_channel._isClosed = true;
37+
_channel._closeCode = closeCode;
38+
_channel._closeReason = closeReason;
39+
await _channel._closed(closeCode, closeReason);
40+
}
41+
}
42+
43+
class FakeWebSocketChannel extends StreamChannelMixin
44+
implements WebSocketChannel {
45+
final StreamChannel _controller;
46+
final Future Function(int? closeCode, String? closeReason) _closed;
47+
48+
bool _isClosed = false;
49+
int? _closeCode;
50+
String? _closeReason;
51+
52+
FakeWebSocketChannel(this._controller, this._closed);
53+
54+
@override
55+
int? get closeCode => _closeCode;
56+
57+
@override
58+
String? get closeReason => _closeReason;
59+
60+
@override
61+
String? get protocol => throw UnimplementedError();
62+
63+
@override
64+
Future<void> get ready => Future.value();
65+
66+
@override
67+
WebSocketSink get sink => FakeSink(this);
68+
69+
@override
70+
Stream get stream => _controller.stream;
71+
72+
Future _remoteClosed(int closeCode, String? closeReason) async {
73+
if (!_isClosed) {
74+
await sink.close(closeCode, closeReason);
75+
}
76+
}
77+
}
78+
79+
(WebSocketChannel, WebSocketChannel) createFakes() {
80+
final peer1Write = StreamController<dynamic>();
81+
final peer2Write = StreamController<dynamic>();
82+
83+
late FakeWebSocketChannel foreign;
84+
late FakeWebSocketChannel local;
85+
86+
foreign = FakeWebSocketChannel(
87+
StreamChannel(peer2Write.stream, peer1Write.sink),
88+
(closeCode, closeReason) =>
89+
local._remoteClosed(closeCode ?? 1005, closeReason));
90+
local = FakeWebSocketChannel(
91+
StreamChannel(peer1Write.stream, peer2Write.sink),
92+
(closeCode, closeReason) =>
93+
foreign._remoteClosed(closeCode ?? 1005, closeReason));
94+
95+
return (foreign, local);
96+
}
97+
2798
void main() {
2899
late ServeHandler serveHandler;
29100
late InMemoryRunnerAssetReader reader;
@@ -283,13 +354,6 @@ void main() {
283354
late BuildUpdatesWebSocketHandler handler;
284355
late Future<void> Function(WebSocketChannel, String) createMockConnection;
285356

286-
// client to server stream controlllers
287-
late StreamController<List<int>> c2sController1;
288-
late StreamController<List<int>> c2sController2;
289-
// server to client stream controlllers
290-
late StreamController<List<int>> s2cController1;
291-
late StreamController<List<int>> s2cController2;
292-
293357
late WebSocketChannel clientChannel1;
294358
late WebSocketChannel clientChannel2;
295359
late WebSocketChannel serverChannel1;
@@ -312,30 +376,15 @@ void main() {
312376

313377
handler = BuildUpdatesWebSocketHandler(watchImpl, mockHandlerFactory);
314378

315-
c2sController1 = StreamController<List<int>>();
316-
s2cController1 = StreamController<List<int>>();
317-
serverChannel1 = WebSocketChannel(
318-
StreamChannel(c2sController1.stream, s2cController1.sink),
319-
serverSide: true);
320-
clientChannel1 = WebSocketChannel(
321-
StreamChannel(s2cController1.stream, c2sController1.sink),
322-
serverSide: false);
323-
324-
c2sController2 = StreamController<List<int>>();
325-
s2cController2 = StreamController<List<int>>();
326-
serverChannel2 = WebSocketChannel(
327-
StreamChannel(c2sController2.stream, s2cController2.sink),
328-
serverSide: true);
329-
clientChannel2 = WebSocketChannel(
330-
StreamChannel(s2cController2.stream, c2sController2.sink),
331-
serverSide: false);
379+
(serverChannel1, clientChannel1) = createFakes();
380+
(serverChannel2, clientChannel2) = createFakes();
332381
});
333382

334383
tearDown(() {
335-
c2sController1.close();
336-
s2cController1.close();
337-
c2sController2.close();
338-
s2cController2.close();
384+
serverChannel1.sink.close();
385+
clientChannel1.sink.close();
386+
serverChannel2.sink.close();
387+
clientChannel2.sink.close();
339388
});
340389

341390
test('emmits a message to all listners', () async {

0 commit comments

Comments
 (0)