@@ -394,6 +394,81 @@ describe('Observable.webSocket', () => {
394394 } ) ;
395395
396396 describe ( 'multiplex' , ( ) => {
397+ it ( 'should be retryable' , ( ) => {
398+ const results = [ ] ;
399+ const subject = Observable . webSocket ( 'ws://websocket' ) ;
400+ const source = subject . multiplex ( ( ) => {
401+ return { sub : 'foo' } ;
402+ } , ( ) => {
403+ return { unsub : 'foo' } ;
404+ } , function ( value : any ) {
405+ return value . name === 'foo' ;
406+ } ) ;
407+
408+ source
409+ . retry ( 1 )
410+ . map ( ( x : any ) => x . value )
411+ . take ( 2 )
412+ . subscribe ( ( x : any ) => {
413+ results . push ( x ) ;
414+ } ) ;
415+
416+ const socket = MockWebSocket . lastSocket ;
417+ socket . open ( ) ;
418+
419+ expect ( socket . lastMessageSent ) . to . deep . equal ( { sub : 'foo' } ) ;
420+ socket . triggerClose ( { wasClean : false } ) ; // Bad connection
421+
422+ const socket2 = MockWebSocket . lastSocket ;
423+ expect ( socket2 ) . not . to . equal ( socket ) ;
424+
425+ socket2 . open ( ) ;
426+ expect ( socket2 . lastMessageSent ) . to . deep . equal ( { sub : 'foo' } ) ;
427+
428+ socket2 . triggerMessage ( JSON . stringify ( { name : 'foo' , value : 'test' } ) ) ;
429+ socket2 . triggerMessage ( JSON . stringify ( { name : 'foo' , value : 'this' } ) ) ;
430+
431+ expect ( results ) . to . deep . equal ( [ 'test' , 'this' ] ) ;
432+ } ) ;
433+
434+ it ( 'should be repeatable' , ( ) => {
435+ const results = [ ] ;
436+ const subject = Observable . webSocket ( 'ws://websocket' ) ;
437+ const source = subject . multiplex ( ( ) => {
438+ return { sub : 'foo' } ;
439+ } , ( ) => {
440+ return { unsub : 'foo' } ;
441+ } , function ( value : any ) {
442+ return value . name === 'foo' ;
443+ } ) ;
444+
445+ source
446+ . repeat ( 2 )
447+ . map ( ( x : any ) => x . value )
448+ . subscribe ( ( x : any ) => {
449+ results . push ( x ) ;
450+ } ) ;
451+
452+ const socket = MockWebSocket . lastSocket ;
453+ socket . open ( ) ;
454+
455+ expect ( socket . lastMessageSent ) . to . deep . equal ( { sub : 'foo' } , 'first multiplexed sub' ) ;
456+ socket . triggerMessage ( JSON . stringify ( { name : 'foo' , value : 'test' } ) ) ;
457+ socket . triggerMessage ( JSON . stringify ( { name : 'foo' , value : 'this' } ) ) ;
458+ socket . triggerClose ( { wasClean : true } ) ;
459+
460+ const socket2 = MockWebSocket . lastSocket ;
461+ expect ( socket2 ) . not . to . equal ( socket , 'a new socket was not created' ) ;
462+
463+ socket2 . open ( ) ;
464+ expect ( socket2 . lastMessageSent ) . to . deep . equal ( { sub : 'foo' } , 'second multiplexed sub' ) ;
465+ socket2 . triggerMessage ( JSON . stringify ( { name : 'foo' , value : 'test' } ) ) ;
466+ socket2 . triggerMessage ( JSON . stringify ( { name : 'foo' , value : 'this' } ) ) ;
467+ socket2 . triggerClose ( { wasClean : true } ) ;
468+
469+ expect ( results ) . to . deep . equal ( [ 'test' , 'this' , 'test' , 'this' ] , 'results were not equal' ) ;
470+ } ) ;
471+
397472 it ( 'should multiplex over the websocket' , ( ) => {
398473 const results = [ ] ;
399474 const subject = Observable . webSocket ( 'ws://websocket' ) ;
@@ -432,28 +507,6 @@ describe('Observable.webSocket', () => {
432507 ( < any > socket . close ) . restore ( ) ;
433508 } ) ;
434509
435- it ( 'should work in combination with retry (issue #1466)' , ( ) => {
436- const error = { wasClean : false } ;
437- const results = [ ] ;
438-
439- const subject = Observable . webSocket ( < any > { url : 'ws://mysocket' } )
440- . multiplex (
441- ( ) => results . push ( 'sub' ) ,
442- ( ) => results . push ( 'unsub' ) ,
443- ( ) => true )
444- . retry ( 1 ) ;
445-
446- subject . subscribe (
447- ( ) => results . push ( 'next' ) ,
448- ( e ) => results . push ( e ) ) ;
449-
450- let socket = MockWebSocket . lastSocket ;
451-
452- socket . triggerClose ( error ) ;
453-
454- expect ( results ) . to . deep . equal ( [ 'sub' , 'unsub' , 'sub' , error , 'unsub' ] ) ;
455- } ) ;
456-
457510 it ( 'should not close the socket until all subscriptions complete' , ( ) => {
458511 const socketSubject = Rx . Observable . webSocket ( < any > { url : 'ws://mysocket' } ) ;
459512 const results = [ ] ;
0 commit comments