Skip to content

Commit cecc863

Browse files
authored
Share mock handler implementation for EventParser and EventSource tests. (#35)
1 parent a711b20 commit cecc863

File tree

6 files changed

+89
-101
lines changed

6 files changed

+89
-101
lines changed

LDSwiftEventSource.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
objects = {
88

99
/* Begin PBXBuildFile section */
10+
B426585E272849AF007B711A /* MockHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = B426585D272849AF007B711A /* MockHandler.swift */; };
1011
B495D4A9248652DF00AE9233 /* Types.swift in Sources */ = {isa = PBXBuildFile; fileRef = B495D4A7248652DF00AE9233 /* Types.swift */; };
1112
B49B5E4B24667F62008BF867 /* UTF8LineParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = B49B5E4524667F43008BF867 /* UTF8LineParser.swift */; };
1213
B49B5E4C24667F62008BF867 /* EventParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = B49B5E4624667F43008BF867 /* EventParser.swift */; };
@@ -31,6 +32,7 @@
3132
/* End PBXContainerItemProxy section */
3233

3334
/* Begin PBXFileReference section */
35+
B426585D272849AF007B711A /* MockHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockHandler.swift; sourceTree = "<group>"; };
3436
B495D4A7248652DF00AE9233 /* Types.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Types.swift; sourceTree = "<group>"; };
3537
B49B5DE324667D06008BF867 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
3638
B49B5DFC24667D41008BF867 /* LDSwiftEventSource.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = LDSwiftEventSource.framework; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -97,6 +99,7 @@
9799
B49B5E4224667F43008BF867 /* UTF8LineParserTests.swift */,
98100
B49B5E4324667F43008BF867 /* LDSwiftEventSourceTests.swift */,
99101
B4BCAE6D272753FA000EBD43 /* TestUtil.swift */,
102+
B426585D272849AF007B711A /* MockHandler.swift */,
100103
);
101104
path = Tests;
102105
sourceTree = "<group>";
@@ -274,6 +277,7 @@
274277
files = (
275278
B49B5E5824668031008BF867 /* EventParserTests.swift in Sources */,
276279
B49B5E5A24668031008BF867 /* UTF8LineParserTests.swift in Sources */,
280+
B426585E272849AF007B711A /* MockHandler.swift in Sources */,
277281
B49B5E5B24668031008BF867 /* LDSwiftEventSourceTests.swift in Sources */,
278282
B4BCAE6E272753FA000EBD43 /* TestUtil.swift in Sources */,
279283
);

LDSwiftEventSource.xcodeproj/xcshareddata/xcschemes/LDSwiftEventSource.xcscheme

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
2828
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
2929
shouldUseLaunchSchemeArgsEnv = "YES"
30+
systemAttachmentLifetime = "keepNever"
3031
codeCoverageEnabled = "YES">
3132
<Testables>
3233
<TestableReference

Tests/EventParserTests.swift

Lines changed: 43 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -1,68 +1,43 @@
11
import 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-
304
final 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\ndata2", lastEventId: nil))])
168+
XCTAssertEqual(handler.events.maybeEvent(), .message("message", MessageEvent(data: "data1\ndata2", 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

Comments
 (0)