33
44import { expect } from 'chai' ;
55
6- import WebSocket from 'ws ' ;
6+ import { WebSocket } from 'mock-socket ' ;
77
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+ }
932
1033describe ( 'SocketStream' , ( ) => {
11- let stream : SocketStream < unknown , unknown > ;
34+ let stream : TestSocketStream < unknown , unknown > ;
1235
1336 afterEach ( ( ) => {
1437 stream . dispose ( ) ;
@@ -17,8 +40,19 @@ describe('SocketStream', () => {
1740 describe ( '#constructor()' , ( ) => {
1841 it ( 'should create a socket stream' , ( ) => {
1942 const url = 'https://www.example.com/' ;
20- stream = new SocketStream ( null , ( ) => new WebSocket ( url ) as any ) ;
43+ stream = new TestSocketStream ( null , ( ) => new WebSocket ( url ) ) ;
2144 expect ( stream ) . to . be . an . instanceof ( SocketStream ) ;
2245 } ) ;
2346 } ) ;
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+ } ) ;
2458} ) ;
0 commit comments