@@ -15,7 +15,7 @@ describe('Observable.webSocket', function () {
15
15
teardownMockWebSocket ( ) ;
16
16
} ) ;
17
17
18
- it ( 'should send a message ' , function ( ) {
18
+ it ( 'should send and receive messages ' , function ( ) {
19
19
var messageReceived = false ;
20
20
var subject = Observable . webSocket ( 'ws://mysocket' ) ;
21
21
@@ -27,6 +27,7 @@ describe('Observable.webSocket', function () {
27
27
} ) ;
28
28
29
29
var socket = MockWebSocket . lastSocket ( ) ;
30
+ expect ( socket . url ) . toBe ( 'ws://mysocket' ) ;
30
31
31
32
socket . open ( ) ;
32
33
expect ( socket . lastMessageSent ( ) ) . toBe ( 'ping' ) ;
@@ -35,7 +36,7 @@ describe('Observable.webSocket', function () {
35
36
expect ( messageReceived ) . toBe ( true ) ;
36
37
} ) ;
37
38
38
- it ( 'receive multiple messages' , function ( ) {
39
+ it ( 'receive multiple messages' , function ( ) {
39
40
var expected = [ 'what' , 'do' , 'you' , 'do' , 'with' , 'a' , 'drunken' , 'sailor?' ] ;
40
41
var results = [ ] ;
41
42
var subject = Observable . webSocket ( 'ws://mysocket' ) ;
@@ -55,7 +56,7 @@ describe('Observable.webSocket', function () {
55
56
expect ( results ) . toEqual ( expected ) ;
56
57
} ) ;
57
58
58
- it ( 'should queue messages prior to subscription' , function ( ) {
59
+ it ( 'should queue messages prior to subscription' , function ( ) {
59
60
var expected = [ 'make' , 'him' , 'walk' , 'the' , 'plank' ] ;
60
61
var subject = Observable . webSocket ( 'ws://mysocket' ) ;
61
62
@@ -75,7 +76,7 @@ describe('Observable.webSocket', function () {
75
76
expect ( socket . sent . length ) . toBe ( expected . length ) ;
76
77
} ) ;
77
78
78
- it ( 'should send messages immediately if alreayd open' , function ( ) {
79
+ it ( 'should send messages immediately if already open' , function ( ) {
79
80
var subject = Observable . webSocket ( 'ws://mysocket' ) ;
80
81
subject . subscribe ( ) ;
81
82
var socket = MockWebSocket . lastSocket ( ) ;
@@ -103,7 +104,20 @@ describe('Observable.webSocket', function () {
103
104
expect ( socket . readyState ) . toBe ( 3 ) ; // closed
104
105
} ) ;
105
106
106
- it ( 'should allow resubscription after closure' , function ( ) {
107
+ it ( 'should close the socket with a code and a reason when errored' , function ( ) {
108
+ var subject = Observable . webSocket ( 'ws://mysocket' ) ;
109
+ subject . subscribe ( ) ;
110
+ var socket = MockWebSocket . lastSocket ( ) ;
111
+ socket . open ( ) ;
112
+
113
+ spyOn ( socket , 'close' ) . and . callThrough ( ) ;
114
+ expect ( socket . close ) . not . toHaveBeenCalled ( ) ;
115
+
116
+ subject . error ( { code : 1337 , reason : 'Too bad, so sad :(' } ) ;
117
+ expect ( socket . close ) . toHaveBeenCalledWith ( 1337 , 'Too bad, so sad :(' ) ;
118
+ } ) ;
119
+
120
+ it ( 'should allow resubscription after closure via complete' , function ( ) {
107
121
var subject = Observable . webSocket ( 'ws://mysocket' ) ;
108
122
subject . subscribe ( ) ;
109
123
var socket1 = MockWebSocket . lastSocket ( ) ;
@@ -118,6 +132,22 @@ describe('Observable.webSocket', function () {
118
132
expect ( socket2 ) . not . toBe ( socket1 ) ;
119
133
expect ( socket2 . lastMessageSent ( ) ) . toBe ( 'a mariner yer not. yarrr.' ) ;
120
134
} ) ;
135
+
136
+ it ( 'should allow resubscription after closure via error' , function ( ) {
137
+ var subject = Observable . webSocket ( 'ws://mysocket' ) ;
138
+ subject . subscribe ( ) ;
139
+ var socket1 = MockWebSocket . lastSocket ( ) ;
140
+ socket1 . open ( ) ;
141
+ subject . error ( { code : 1337 } ) ;
142
+
143
+ subject . next ( 'yo-ho! yo-ho!' ) ;
144
+ subject . subscribe ( ) ;
145
+ var socket2 = MockWebSocket . lastSocket ( ) ;
146
+ socket2 . open ( ) ;
147
+
148
+ expect ( socket2 ) . not . toBe ( socket1 ) ;
149
+ expect ( socket2 . lastMessageSent ( ) ) . toBe ( 'yo-ho! yo-ho!' ) ;
150
+ } ) ;
121
151
} ) ;
122
152
123
153
var sockets = [ ] ;
@@ -145,6 +175,15 @@ MockWebSocket.prototype = {
145
175
return sent . length > 0 ? sent [ sent . length - 1 ] : undefined ;
146
176
} ,
147
177
178
+ closeDirty : function ( code , reason ) {
179
+ if ( this . readyState < 2 ) {
180
+ this . readyState = 2 ;
181
+ this . closeCode = code ;
182
+ this . closeReason = reason ;
183
+ this . triggerClose ( { wasClean : false } ) ;
184
+ }
185
+ } ,
186
+
148
187
triggerClose : function ( e ) {
149
188
this . readyState = 3 ;
150
189
this . trigger ( 'close' , e ) ;
@@ -176,7 +215,7 @@ MockWebSocket.prototype = {
176
215
this . readyState = 2 ;
177
216
this . closeCode = code ;
178
217
this . closeReason = reason ;
179
- this . triggerClose ( { wasClean : ( ! code || code === 1000 ) } ) ;
218
+ this . triggerClose ( { wasClean : true } ) ;
180
219
}
181
220
} ,
182
221
0 commit comments