@@ -51,11 +51,15 @@ void main() {
51
51
52
52
setUp (() async {
53
53
mockServer = await HttpServer .bind ('localhost' , 0 );
54
+ WebSocketChannel ? channel;
55
+
54
56
mockServer.transform (WebSocketTransformer ()).listen ((webSocket) {
55
- final channel = IOWebSocketChannel (webSocket);
56
- channel.stream.listen ((request) {
57
- channel.sink.add (request);
57
+ channel = IOWebSocketChannel (webSocket);
58
+ channel! .stream.listen ((request) {
59
+ channel! .sink.add (request);
58
60
});
61
+ }, onDone: () {
62
+ channel? .sink.close ();
59
63
});
60
64
});
61
65
@@ -170,11 +174,15 @@ void main() {
170
174
socket.disconnect ();
171
175
});
172
176
173
- test ('establishes websocket connection with endpoint' , () {
174
- socket.connect ();
177
+ test ('establishes websocket connection with endpoint' , () async {
178
+ final connFuture = socket.connect ();
179
+ expect (socket.connState, SocketStates .connecting);
175
180
176
181
final conn = socket.conn;
177
182
183
+ await connFuture;
184
+ expect (socket.connState, SocketStates .open);
185
+
178
186
expect (conn, isA <IOWebSocketChannel >());
179
187
//! Not verifying connection url
180
188
});
@@ -239,9 +247,11 @@ void main() {
239
247
240
248
test ('removes existing connection' , () async {
241
249
await socket.connect ();
250
+
251
+ expect (socket.conn, isNotNull);
242
252
await socket.disconnect ();
243
253
244
- expect (socket.conn, null );
254
+ expect (socket.conn, isNull );
245
255
});
246
256
247
257
test ('calls callback' , () async {
@@ -284,6 +294,36 @@ void main() {
284
294
).called (1 );
285
295
});
286
296
297
+ test ('disconnecting a closed connections stays closed' , () async {
298
+ await socket.connect ();
299
+ expect (socket.connState, SocketStates .open);
300
+ await mockServer.close ();
301
+ await Future .delayed (const Duration (milliseconds: 200 ));
302
+ expect (socket.connState, SocketStates .closed);
303
+ expect (socket.conn, isNotNull);
304
+
305
+ final disconnectFuture = socket.disconnect ();
306
+
307
+ // `connState` stays `closed` during disconnect
308
+ expect (socket.connState, SocketStates .closed);
309
+ await disconnectFuture;
310
+ expect (socket.connState, SocketStates .closed);
311
+ expect (socket.conn, isNull);
312
+ });
313
+
314
+ test ('disconnecting an open connection' , () async {
315
+ await socket.connect ();
316
+ expect (socket.connState, SocketStates .open);
317
+
318
+ final disconnectFuture = socket.disconnect ();
319
+
320
+ // `connState` stays `closed` during disconnect
321
+ expect (socket.connState, SocketStates .disconnecting);
322
+ await disconnectFuture;
323
+ expect (socket.connState, SocketStates .disconnected);
324
+ expect (socket.conn, isNull);
325
+ });
326
+
287
327
test ('does not throw when no connection' , () {
288
328
expect (() => socket.disconnect (), returnsNormally);
289
329
});
0 commit comments