3
3
4
4
import { expect } from 'chai' ;
5
5
6
- import WebSocket from 'ws ' ;
6
+ import { WebSocket } from 'mock-socket ' ;
7
7
8
- import { SocketStream } from '@lumino/polling' ;
8
+ import { IPoll , SocketStream } from '@lumino/polling' ;
9
+
10
+ window . WebSocket = WebSocket ;
11
+
12
+ /**
13
+ * Return a promise that resolves in the given milliseconds with the given value.
14
+ */
15
+ function sleep < T > ( milliseconds : number = 0 , value ?: T ) : Promise < T | undefined > {
16
+ return new Promise ( ( resolve , reject ) => {
17
+ setTimeout ( ( ) => {
18
+ resolve ( value ) ;
19
+ } , milliseconds ) ;
20
+ } ) ;
21
+ }
22
+
23
+ class TestSocketStream < T , U > extends SocketStream < T , U > {
24
+ constructor ( sender : T , connector : ( ) => WebSocket ) {
25
+ super ( sender , connector ) ;
26
+ this . subscription . ticked . connect ( ( _ , state ) => {
27
+ this . phases . push ( state . phase ) ;
28
+ } ) ;
29
+ }
30
+ phases : IPoll . Phase < 'standby' > [ ] = [ ] ;
31
+ }
9
32
10
33
describe ( 'SocketStream' , ( ) => {
11
- let stream : SocketStream < unknown , unknown > ;
34
+ let stream : TestSocketStream < unknown , unknown > ;
12
35
13
36
afterEach ( ( ) => {
14
37
stream . dispose ( ) ;
@@ -17,8 +40,19 @@ describe('SocketStream', () => {
17
40
describe ( '#constructor()' , ( ) => {
18
41
it ( 'should create a socket stream' , ( ) => {
19
42
const url = 'https://www.example.com/' ;
20
- stream = new SocketStream ( null , ( ) => new WebSocket ( url ) as any ) ;
43
+ stream = new TestSocketStream ( null , ( ) => new WebSocket ( url ) ) ;
21
44
expect ( stream ) . to . be . an . instanceof ( SocketStream ) ;
22
45
} ) ;
23
46
} ) ;
47
+
48
+ describe ( '#dispose()' , ( ) => {
49
+ it ( 'should clean up after itself upon dispose' , async ( ) => {
50
+ const url = 'https://www.example.com/' ;
51
+ stream = new TestSocketStream ( null , ( ) => new WebSocket ( url ) ) ;
52
+ await sleep ( 500 ) ;
53
+ stream . dispose ( ) ;
54
+ expect ( stream . phases [ 0 ] ) . to . equal ( 'started' ) ;
55
+ stream . phases . slice ( 1 ) . every ( phase => expect ( phase ) . to . equal ( 'rejected' ) ) ;
56
+ } ) ;
57
+ } ) ;
24
58
} ) ;
0 commit comments