@@ -507,6 +507,61 @@ describe('Observable.webSocket', () => {
507
507
( < any > socket . close ) . restore ( ) ;
508
508
} ) ;
509
509
510
+ it ( 'should keep the same socket for multiple multiplex subscriptions' , ( ) => {
511
+ const socketSubject = Rx . Observable . webSocket ( < any > { url : 'ws://mysocket' } ) ;
512
+ const results = [ ] ;
513
+ const socketMessages = [
514
+ { id : 'A' } ,
515
+ { id : 'B' } ,
516
+ { id : 'A' } ,
517
+ { id : 'B' } ,
518
+ { id : 'B' } ,
519
+ ] ;
520
+
521
+ const sub1 = socketSubject . multiplex (
522
+ ( ) => 'no-op' ,
523
+ ( ) => results . push ( 'A unsub' ) ,
524
+ ( req : any ) => req . id === 'A' )
525
+ . takeWhile ( ( req : any ) => ! req . complete )
526
+ . subscribe (
527
+ ( ) => results . push ( 'A next' ) ,
528
+ ( e ) => results . push ( 'A error ' + e ) ,
529
+ ( ) => results . push ( 'A complete' )
530
+ ) ;
531
+
532
+ socketSubject . multiplex (
533
+ ( ) => 'no-op' ,
534
+ ( ) => results . push ( 'B unsub' ) ,
535
+ ( req : any ) => req . id === 'B' )
536
+ . subscribe (
537
+ ( ) => results . push ( 'B next' ) ,
538
+ ( e ) => results . push ( 'B error ' + e ) ,
539
+ ( ) => results . push ( 'B complete' )
540
+ ) ;
541
+
542
+ // Setup socket and send messages
543
+ let socket = MockWebSocket . lastSocket ;
544
+ socket . open ( ) ;
545
+ socketMessages . forEach ( ( msg , i ) => {
546
+ if ( i === 1 ) {
547
+ sub1 . unsubscribe ( ) ;
548
+ expect ( socketSubject . socket ) . to . equal ( socket ) ;
549
+ }
550
+ socket . triggerMessage ( JSON . stringify ( msg ) ) ;
551
+ } ) ;
552
+ socket . triggerClose ( { wasClean : true } ) ;
553
+
554
+ expect ( results ) . to . deep . equal ( [
555
+ 'A next' ,
556
+ 'A unsub' ,
557
+ 'B next' ,
558
+ 'B next' ,
559
+ 'B next' ,
560
+ 'B complete' ,
561
+ 'B unsub' ,
562
+ ] ) ;
563
+ } ) ;
564
+
510
565
it ( 'should not close the socket until all subscriptions complete' , ( ) => {
511
566
const socketSubject = Rx . Observable . webSocket ( < any > { url : 'ws://mysocket' } ) ;
512
567
const results = [ ] ;
0 commit comments