11import XCTest
22@testable import LDSwiftEventSource
33
4- class MockEventHandler : EventHandler {
5- enum ReceivedEvent : Equatable {
6- case message( String , MessageEvent )
7- case comment( String )
8- }
9-
10- var received : [ ReceivedEvent ] = [ ]
11-
12- func onMessage( eventType: String , messageEvent: MessageEvent ) {
13- received. append ( . message( eventType, messageEvent) )
14- }
15-
16- func onComment( comment: String ) {
17- received. append ( . comment( comment) )
18- }
19-
20- func reset( ) {
21- received = [ ]
22- }
23-
24- // Never called by EventParser
25- func onOpened( ) { }
26- func onClosed( ) { }
27- func onError( error: Error ) { }
28- }
29-
304final class EventParserTests : XCTestCase {
315 var receivedReconnectionTime : TimeInterval ?
326 var receivedLastEventId : String ?
337 lazy var connectionHandler : ConnectionHandler = { ( setReconnectionTime: { self . receivedReconnectionTime = $0 } ,
348 setLastEventId: { self . receivedLastEventId = $0 } ) } ( )
35- let eventHandler = MockEventHandler ( )
9+ var handler : MockHandler !
3610 var parser : EventParser !
3711
3812 override func setUp( ) {
3913 super. setUp ( )
4014 resetMocks ( )
41- parser = EventParser ( handler: eventHandler , connectionHandler: connectionHandler)
15+ parser = EventParser ( handler: handler , connectionHandler: connectionHandler)
4216 }
4317
4418 override func tearDown( ) {
4519 super. tearDown ( )
20+ XCTAssertNil ( handler. events. maybeEvent ( ) )
4621 // Validate that `reset` completely resets the parser
47- resetMocks ( )
22+ receivedReconnectionTime = nil
4823 parser. reset ( )
4924 parser. parse ( line: " data: hello " )
5025 parser. parse ( line: " " )
51- XCTAssertEqual ( eventHandler. received. count, 1 )
52- guard case let . message( eventType, event) = eventHandler. received [ 0 ]
26+ guard case let . message( eventType, event) = handler. events. maybeEvent ( )
5327 else {
5428 XCTFail ( " Unexpectedly received comment event " )
5529 return
5630 }
5731 XCTAssertEqual ( eventType, " message " )
5832 XCTAssertEqual ( event. data, " hello " )
33+ XCTAssertNil ( handler. events. maybeEvent ( ) )
5934 XCTAssertNil ( receivedReconnectionTime)
6035 }
6136
6237 func resetMocks( ) {
6338 receivedReconnectionTime = nil
6439 receivedLastEventId = nil
65- eventHandler . reset ( )
40+ handler = MockHandler ( )
6641 }
6742
6843 func expectNoConnectionHandlerCalls( ) {
@@ -101,19 +76,19 @@ final class EventParserTests: XCTestCase {
10176 // MARK: Comment tests
10277 func testEmptyComment( ) {
10378 parser. parse ( line: " : " )
104- XCTAssertEqual ( eventHandler . received , [ . comment( " " ) ] )
79+ XCTAssertEqual ( handler . events . maybeEvent ( ) , . comment( " " ) )
10580 expectNoConnectionHandlerCalls ( )
10681 }
10782
10883 func testCommentBody( ) {
10984 parser. parse ( line: " : comment " )
110- XCTAssertEqual ( eventHandler . received , [ . comment( " comment " ) ] )
85+ XCTAssertEqual ( handler . events . maybeEvent ( ) , . comment( " comment " ) )
11186 expectNoConnectionHandlerCalls ( )
11287 }
11388
11489 func testCommentCanContainColon( ) {
11590 parser. parse ( line: " :comment:line " )
116- XCTAssertEqual ( eventHandler . received , [ . comment( " comment:line " ) ] )
91+ XCTAssertEqual ( handler . events . maybeEvent ( ) , . comment( " comment:line " ) )
11792 expectNoConnectionHandlerCalls ( )
11893 }
11994
@@ -125,95 +100,94 @@ final class EventParserTests: XCTestCase {
125100 parser. parse ( line: " " )
126101 parser. parse ( line: " data: " )
127102 parser. parse ( line: " " )
128- XCTAssertEqual ( eventHandler. received. count, 3 )
129- eventHandler. received. forEach {
130- XCTAssertEqual ( $0, . message( " message " , MessageEvent ( data: " " , lastEventId: nil ) ) )
131- }
103+ XCTAssertEqual ( handler. events. maybeEvent ( ) , . message( " message " , MessageEvent ( data: " " , lastEventId: nil ) ) )
104+ XCTAssertEqual ( handler. events. maybeEvent ( ) , . message( " message " , MessageEvent ( data: " " , lastEventId: nil ) ) )
105+ XCTAssertEqual ( handler. events. maybeEvent ( ) , . message( " message " , MessageEvent ( data: " " , lastEventId: nil ) ) )
132106 expectNoConnectionHandlerCalls ( )
133107 }
134108
135109 func testDoesNotRemoveTrailingSpaceWhenColonNotPresent( ) {
136110 parser. parse ( line: " data " )
137111 parser. parse ( line: " " )
138- XCTAssertTrue ( eventHandler . received . isEmpty )
112+ XCTAssertNil ( handler . events . maybeEvent ( ) )
139113 expectNoConnectionHandlerCalls ( )
140114 }
141115
142116 func testEmptyFirstDataAppendsNewline( ) {
143117 parser. parse ( line: " data: " )
144118 parser. parse ( line: " data: " )
145119 parser. parse ( line: " " )
146- XCTAssertEqual ( eventHandler . received , [ . message( " message " , MessageEvent ( data: " \n " , lastEventId: nil ) ) ] )
120+ XCTAssertEqual ( handler . events . maybeEvent ( ) , . message( " message " , MessageEvent ( data: " \n " , lastEventId: nil ) ) )
147121 expectNoConnectionHandlerCalls ( )
148122 }
149123
150124 func testDispatchesSingleLineMessage( ) {
151125 parser. parse ( line: " data: hello " )
152126 parser. parse ( line: " " )
153- XCTAssertEqual ( eventHandler . received , [ . message( " message " , MessageEvent ( data: " hello " , lastEventId: nil ) ) ] )
127+ XCTAssertEqual ( handler . events . maybeEvent ( ) , . message( " message " , MessageEvent ( data: " hello " , lastEventId: nil ) ) )
154128 expectNoConnectionHandlerCalls ( )
155129 }
156130
157131 func testEmptyDataWithBufferedDataAppendsNewline( ) {
158132 parser. parse ( line: " data: data1 " )
159133 parser. parse ( line: " data: " )
160134 parser. parse ( line: " " )
161- XCTAssertEqual ( eventHandler . received , [ . message( " message " , MessageEvent ( data: " data1 \n " , lastEventId: nil ) ) ] )
135+ XCTAssertEqual ( handler . events . maybeEvent ( ) , . message( " message " , MessageEvent ( data: " data1 \n " , lastEventId: nil ) ) )
162136 }
163137
164138 func testDataResetAfterEvent( ) {
165139 parser. parse ( line: " data: hello " )
166140 parser. parse ( line: " " )
167141 parser. parse ( line: " " )
168- XCTAssertEqual ( eventHandler . received , [ . message( " message " , MessageEvent ( data: " hello " , lastEventId: nil ) ) ] )
142+ XCTAssertEqual ( handler . events . maybeEvent ( ) , . message( " message " , MessageEvent ( data: " hello " , lastEventId: nil ) ) )
169143 expectNoConnectionHandlerCalls ( )
170144 }
171145
172146 func testRemovesOnlyFirstSpace( ) {
173147 parser. parse ( line: " data: { \" foo \" : \" bar baz \" } " )
174148 parser. parse ( line: " " )
175- XCTAssertEqual ( eventHandler . received , [ . message( " message " , MessageEvent ( data: " { \" foo \" : \" bar baz \" } " , lastEventId: nil ) ) ] )
149+ XCTAssertEqual ( handler . events . maybeEvent ( ) , . message( " message " , MessageEvent ( data: " { \" foo \" : \" bar baz \" } " , lastEventId: nil ) ) )
176150 }
177151
178152 func testDoesNotRemoveOtherWhitespace( ) {
179153 parser. parse ( line: " data: \t { \" foo \" : \" bar baz \" } " )
180154 parser. parse ( line: " " )
181- XCTAssertEqual ( eventHandler . received , [ . message( " message " , MessageEvent ( data: " \t { \" foo \" : \" bar baz \" } " , lastEventId: nil ) ) ] )
155+ XCTAssertEqual ( handler . events . maybeEvent ( ) , . message( " message " , MessageEvent ( data: " \t { \" foo \" : \" bar baz \" } " , lastEventId: nil ) ) )
182156 }
183157
184158 func testAllowsNoLeadingSpace( ) {
185159 parser. parse ( line: " data:{ \" foo \" : \" bar baz \" } " )
186160 parser. parse ( line: " " )
187- XCTAssertEqual ( eventHandler . received , [ . message( " message " , MessageEvent ( data: " { \" foo \" : \" bar baz \" } " , lastEventId: nil ) ) ] )
161+ XCTAssertEqual ( handler . events . maybeEvent ( ) , . message( " message " , MessageEvent ( data: " { \" foo \" : \" bar baz \" } " , lastEventId: nil ) ) )
188162 }
189163
190164 func testMultipleDataDispatch( ) {
191165 parser. parse ( line: " data: data1 " )
192166 parser. parse ( line: " data: data2 " )
193167 parser. parse ( line: " " )
194- XCTAssertEqual ( eventHandler . received , [ . message( " message " , MessageEvent ( data: " data1 \n data2 " , lastEventId: nil ) ) ] )
168+ XCTAssertEqual ( handler . events . maybeEvent ( ) , . message( " message " , MessageEvent ( data: " data1 \n data2 " , lastEventId: nil ) ) )
195169 }
196170
197171 // MARK: Event type tests
198172 func testDispatchesMessageWithCustomEventType( ) {
199173 parser. parse ( line: " event: customEvent " )
200174 parser. parse ( line: " data: hello " )
201175 parser. parse ( line: " " )
202- XCTAssertEqual ( eventHandler . received , [ . message( " customEvent " , MessageEvent ( data: " hello " , lastEventId: nil ) ) ] )
176+ XCTAssertEqual ( handler . events . maybeEvent ( ) , . message( " customEvent " , MessageEvent ( data: " hello " , lastEventId: nil ) ) )
203177 }
204178
205179 func testCustomEventTypeWithoutSpace( ) {
206180 parser. parse ( line: " event:customEvent " )
207181 parser. parse ( line: " data: hello " )
208182 parser. parse ( line: " " )
209- XCTAssertEqual ( eventHandler . received , [ . message( " customEvent " , MessageEvent ( data: " hello " , lastEventId: nil ) ) ] )
183+ XCTAssertEqual ( handler . events . maybeEvent ( ) , . message( " customEvent " , MessageEvent ( data: " hello " , lastEventId: nil ) ) )
210184 }
211185
212186 func testCustomEventAfterData( ) {
213187 parser. parse ( line: " data: hello " )
214188 parser. parse ( line: " event: customEvent " )
215189 parser. parse ( line: " " )
216- XCTAssertEqual ( eventHandler . received , [ . message( " customEvent " , MessageEvent ( data: " hello " , lastEventId: nil ) ) ] )
190+ XCTAssertEqual ( handler . events . maybeEvent ( ) , . message( " customEvent " , MessageEvent ( data: " hello " , lastEventId: nil ) ) )
217191 }
218192
219193 func testEmptyEventTypesDefaultToMessage( ) {
@@ -222,18 +196,17 @@ final class EventParserTests: XCTestCase {
222196 parser. parse ( line: " data: foo " )
223197 parser. parse ( line: " " )
224198 }
225- XCTAssertEqual ( eventHandler. received. count, 3 )
226- eventHandler. received. forEach {
227- XCTAssertEqual ( $0, . message( " message " , MessageEvent ( data: " foo " , lastEventId: nil ) ) )
228- }
199+ XCTAssertEqual ( handler. events. maybeEvent ( ) , . message( " message " , MessageEvent ( data: " foo " , lastEventId: nil ) ) )
200+ XCTAssertEqual ( handler. events. maybeEvent ( ) , . message( " message " , MessageEvent ( data: " foo " , lastEventId: nil ) ) )
201+ XCTAssertEqual ( handler. events. maybeEvent ( ) , . message( " message " , MessageEvent ( data: " foo " , lastEventId: nil ) ) )
229202 }
230203
231204 func testDispatchWithoutDataResetsMessageType( ) {
232205 parser. parse ( line: " event: customEvent " )
233206 parser. parse ( line: " " )
234207 parser. parse ( line: " data: foo " )
235208 parser. parse ( line: " " )
236- XCTAssertEqual ( eventHandler . received , [ . message( " message " , MessageEvent ( data: " foo " , lastEventId: nil ) ) ] )
209+ XCTAssertEqual ( handler . events . maybeEvent ( ) , . message( " message " , MessageEvent ( data: " foo " , lastEventId: nil ) ) )
237210 }
238211
239212 func testDispatchWithDataResetsMessageType( ) {
@@ -242,8 +215,8 @@ final class EventParserTests: XCTestCase {
242215 parser. parse ( line: " " )
243216 parser. parse ( line: " data: bar " )
244217 parser. parse ( line: " " )
245- XCTAssertEqual ( eventHandler . received , [ . message( " customEvent " , MessageEvent ( data: " foo " , lastEventId: nil ) ) ,
246- . message( " message " , MessageEvent ( data: " bar " , lastEventId: nil ) ) ] )
218+ XCTAssertEqual ( handler . events . maybeEvent ( ) , . message( " customEvent " , MessageEvent ( data: " foo " , lastEventId: nil ) ) )
219+ XCTAssertEqual ( handler . events . maybeEvent ( ) , . message( " message " , MessageEvent ( data: " bar " , lastEventId: nil ) ) )
247220 }
248221
249222 // MARK: Last event ID tests
@@ -252,7 +225,7 @@ final class EventParserTests: XCTestCase {
252225 // Should not have set until we dispatch with an empty line
253226 expectNoConnectionHandlerCalls ( )
254227 parser. parse ( line: " " )
255- XCTAssertEqual ( eventHandler . received , [ ] )
228+ XCTAssertNil ( handler . events . maybeEvent ( ) )
256229 XCTAssertEqual ( receivedLastEventId, " 1 " )
257230 XCTAssertNil ( receivedReconnectionTime)
258231 }
@@ -261,7 +234,7 @@ final class EventParserTests: XCTestCase {
261234 parser. parse ( line: " data: hello " )
262235 parser. parse ( line: " id: 1 " )
263236 parser. parse ( line: " " )
264- XCTAssertEqual ( eventHandler . received , [ . message( " message " , MessageEvent ( data: " hello " , lastEventId: " 1 " ) ) ] )
237+ XCTAssertEqual ( handler . events . maybeEvent ( ) , . message( " message " , MessageEvent ( data: " hello " , lastEventId: " 1 " ) ) )
265238 XCTAssertEqual ( receivedLastEventId, " 1 " )
266239 XCTAssertNil ( receivedReconnectionTime)
267240 }
@@ -272,8 +245,8 @@ final class EventParserTests: XCTestCase {
272245 parser. parse ( line: " " )
273246 parser. parse ( line: " data: world " )
274247 parser. parse ( line: " " )
275- XCTAssertEqual ( eventHandler . received , [ . message( " message " , MessageEvent ( data: " hello " , lastEventId: " reused " ) ) ,
276- . message( " message " , MessageEvent ( data: " world " , lastEventId: " reused " ) ) ] )
248+ XCTAssertEqual ( handler . events . maybeEvent ( ) , . message( " message " , MessageEvent ( data: " hello " , lastEventId: " reused " ) ) )
249+ XCTAssertEqual ( handler . events . maybeEvent ( ) , . message( " message " , MessageEvent ( data: " world " , lastEventId: " reused " ) ) )
277250 XCTAssertEqual ( receivedLastEventId, " reused " )
278251 XCTAssertNil ( receivedReconnectionTime)
279252 }
@@ -286,7 +259,7 @@ final class EventParserTests: XCTestCase {
286259 parser. parse ( line: " data " )
287260 XCTAssertNil ( receivedLastEventId)
288261 parser. parse ( line: " " )
289- XCTAssertEqual ( eventHandler . received , [ . message( " message " , MessageEvent ( data: " " , lastEventId: " def " ) ) ] )
262+ XCTAssertEqual ( handler . events . maybeEvent ( ) , . message( " message " , MessageEvent ( data: " " , lastEventId: " def " ) ) )
290263 XCTAssertEqual ( receivedLastEventId, " def " )
291264 XCTAssertNil ( receivedReconnectionTime)
292265 }
@@ -296,7 +269,7 @@ final class EventParserTests: XCTestCase {
296269 parser. parse ( line: " id: abc \u{0000} def " )
297270 parser. parse ( line: " data " )
298271 parser. parse ( line: " " )
299- XCTAssertEqual ( eventHandler . received , [ . message( " message " , MessageEvent ( data: " " , lastEventId: " reused " ) ) ] )
272+ XCTAssertEqual ( handler . events . maybeEvent ( ) , . message( " message " , MessageEvent ( data: " " , lastEventId: " reused " ) ) )
300273 XCTAssertEqual ( receivedLastEventId, " reused " )
301274 XCTAssertNil ( receivedReconnectionTime)
302275 }
@@ -306,7 +279,7 @@ final class EventParserTests: XCTestCase {
306279 parser. reset ( )
307280 parser. parse ( line: " data: hello " )
308281 parser. parse ( line: " " )
309- XCTAssertEqual ( eventHandler . received , [ . message( " message " , MessageEvent ( data: " hello " , lastEventId: " 1 " ) ) ] )
282+ XCTAssertEqual ( handler . events . maybeEvent ( ) , . message( " message " , MessageEvent ( data: " hello " , lastEventId: " 1 " ) ) )
310283 XCTAssertEqual ( receivedLastEventId, " 1 " )
311284 XCTAssertNil ( receivedReconnectionTime)
312285 }
@@ -316,13 +289,13 @@ final class EventParserTests: XCTestCase {
316289 parser. parse ( line: " " )
317290 parser. parse ( line: " " )
318291 parser. parse ( line: " " )
319- XCTAssertEqual ( eventHandler . received , [ ] )
292+ XCTAssertNil ( handler . events . maybeEvent ( ) )
320293 expectNoConnectionHandlerCalls ( )
321294 }
322295
323296 func testNothingDoneForInvalidFieldName( ) {
324297 parser. parse ( line: " invalid: bar " )
325- XCTAssertEqual ( eventHandler . received , [ ] )
298+ XCTAssertNil ( handler . events . maybeEvent ( ) )
326299 expectNoConnectionHandlerCalls ( )
327300 }
328301
@@ -331,15 +304,15 @@ final class EventParserTests: XCTestCase {
331304 parser. parse ( line: " invalid: bar " )
332305 parser. parse ( line: " event: msg " )
333306 parser. parse ( line: " " )
334- XCTAssertEqual ( eventHandler . received , [ . message( " msg " , MessageEvent ( data: " foo " , lastEventId: nil ) ) ] )
307+ XCTAssertEqual ( handler . events . maybeEvent ( ) , . message( " msg " , MessageEvent ( data: " foo " , lastEventId: nil ) ) )
335308 }
336309
337310 func testCommentInEvent( ) {
338311 parser. parse ( line: " data: foo " )
339312 parser. parse ( line: " :bar " )
340313 parser. parse ( line: " event: msg " )
341314 parser. parse ( line: " " )
342- XCTAssertEqual ( eventHandler . received , [ . comment( " bar " ) ,
343- . message( " msg " , MessageEvent ( data: " foo " , lastEventId: nil ) ) ] )
315+ XCTAssertEqual ( handler . events . maybeEvent ( ) , . comment( " bar " ) )
316+ XCTAssertEqual ( handler . events . maybeEvent ( ) , . message( " msg " , MessageEvent ( data: " foo " , lastEventId: nil ) ) )
344317 }
345318}
0 commit comments