Skip to content

Commit 1eb39d6

Browse files
committed
Add client event for status changes. Closes #668
1 parent 2e492ee commit 1eb39d6

File tree

2 files changed

+62
-35
lines changed

2 files changed

+62
-35
lines changed

SocketIO-MacTests/SocketSideEffectTest.swift

Lines changed: 56 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -10,89 +10,79 @@ import XCTest
1010
@testable import SocketIO
1111

1212
class SocketSideEffectTest: XCTestCase {
13-
let data = "test".data(using: String.Encoding.utf8)!
14-
let data2 = "test2".data(using: String.Encoding.utf8)!
15-
private var socket: SocketIOClient!
16-
17-
override func setUp() {
18-
super.setUp()
19-
socket = SocketIOClient(socketURL: URL(string: "http://localhost/")!)
20-
socket.setTestable()
21-
}
22-
2313
func testInitialCurrentAck() {
2414
XCTAssertEqual(socket.currentAck, -1)
2515
}
26-
16+
2717
func testFirstAck() {
2818
socket.emitWithAck("test").timingOut(after: 0) {data in}
2919
XCTAssertEqual(socket.currentAck, 0)
3020
}
31-
21+
3222
func testSecondAck() {
3323
socket.emitWithAck("test").timingOut(after: 0) {data in}
3424
socket.emitWithAck("test").timingOut(after: 0) {data in}
35-
25+
3626
XCTAssertEqual(socket.currentAck, 1)
3727
}
38-
28+
3929
func testHandleAck() {
4030
let expect = expectation(description: "handled ack")
4131
socket.emitWithAck("test").timingOut(after: 0) {data in
4232
XCTAssertEqual(data[0] as? String, "hello world")
4333
expect.fulfill()
4434
}
45-
35+
4636
socket.parseSocketMessage("30[\"hello world\"]")
4737
waitForExpectations(timeout: 3, handler: nil)
4838
}
49-
39+
5040
func testHandleAck2() {
5141
let expect = expectation(description: "handled ack2")
5242
socket.emitWithAck("test").timingOut(after: 0) {data in
5343
XCTAssertTrue(data.count == 2, "Wrong number of ack items")
5444
expect.fulfill()
5545
}
56-
46+
5747
socket.parseSocketMessage("61-0[{\"_placeholder\":true,\"num\":0},{\"test\":true}]")
5848
socket.parseBinaryData(Data())
5949
waitForExpectations(timeout: 3, handler: nil)
6050
}
61-
51+
6252
func testHandleEvent() {
6353
let expect = expectation(description: "handled event")
6454
socket.on("test") {data, ack in
6555
XCTAssertEqual(data[0] as? String, "hello world")
6656
expect.fulfill()
6757
}
68-
58+
6959
socket.parseSocketMessage("2[\"test\",\"hello world\"]")
7060
waitForExpectations(timeout: 3, handler: nil)
7161
}
72-
62+
7363
func testHandleStringEventWithQuotes() {
7464
let expect = expectation(description: "handled event")
7565
socket.on("test") {data, ack in
7666
XCTAssertEqual(data[0] as? String, "\"hello world\"")
7767
expect.fulfill()
7868
}
79-
69+
8070
socket.parseSocketMessage("2[\"test\",\"\\\"hello world\\\"\"]")
8171
waitForExpectations(timeout: 3, handler: nil)
8272
}
83-
73+
8474
func testHandleOnceEvent() {
8575
let expect = expectation(description: "handled event")
8676
socket.once("test") {data, ack in
8777
XCTAssertEqual(data[0] as? String, "hello world")
8878
XCTAssertEqual(self.socket.testHandlers.count, 0)
8979
expect.fulfill()
9080
}
91-
81+
9282
socket.parseSocketMessage("2[\"test\",\"hello world\"]")
9383
waitForExpectations(timeout: 3, handler: nil)
9484
}
95-
85+
9686
func testOffWithEvent() {
9787
socket.on("test") {data, ack in }
9888
XCTAssertEqual(socket.testHandlers.count, 1)
@@ -101,7 +91,7 @@ class SocketSideEffectTest: XCTestCase {
10191
socket.off("test")
10292
XCTAssertEqual(socket.testHandlers.count, 0)
10393
}
104-
94+
10595
func testOffWithId() {
10696
let handler = socket.on("test") {data, ack in }
10797
XCTAssertEqual(socket.testHandlers.count, 1)
@@ -110,19 +100,19 @@ class SocketSideEffectTest: XCTestCase {
110100
socket.off(id: handler)
111101
XCTAssertEqual(socket.testHandlers.count, 1)
112102
}
113-
103+
114104
func testHandlesErrorPacket() {
115105
let expect = expectation(description: "Handled error")
116106
socket.on("error") {data, ack in
117107
if let error = data[0] as? String, error == "test error" {
118108
expect.fulfill()
119109
}
120110
}
121-
111+
122112
socket.parseSocketMessage("4\"test error\"")
123113
waitForExpectations(timeout: 3, handler: nil)
124114
}
125-
115+
126116
func testHandleBinaryEvent() {
127117
let expect = expectation(description: "handled binary event")
128118
socket.on("test") {data, ack in
@@ -131,12 +121,12 @@ class SocketSideEffectTest: XCTestCase {
131121
expect.fulfill()
132122
}
133123
}
134-
124+
135125
socket.parseSocketMessage("51-[\"test\",{\"test\":{\"_placeholder\":true,\"num\":0}}]")
136126
socket.parseBinaryData(data)
137127
waitForExpectations(timeout: 3, handler: nil)
138128
}
139-
129+
140130
func testHandleMultipleBinaryEvent() {
141131
let expect = expectation(description: "handled multiple binary event")
142132
socket.on("test") {data, ack in
@@ -147,22 +137,53 @@ class SocketSideEffectTest: XCTestCase {
147137
expect.fulfill()
148138
}
149139
}
150-
140+
151141
socket.parseSocketMessage("52-[\"test\",{\"test\":{\"_placeholder\":true,\"num\":0},\"test2\":{\"_placeholder\":true,\"num\":1}}]")
152142
socket.parseBinaryData(data)
153143
socket.parseBinaryData(data2)
154144
waitForExpectations(timeout: 3, handler: nil)
155145
}
156-
146+
157147
func testSocketManager() {
158148
let manager = SocketClientManager.sharedManager
159149
manager["test"] = socket
160-
150+
161151
XCTAssert(manager["test"] === socket, "failed to get socket")
162-
152+
163153
manager["test"] = nil
164-
154+
165155
XCTAssert(manager["test"] == nil, "socket not removed")
166156

167157
}
158+
159+
func testChangingStatusCallsStatusChangeHandler() {
160+
let expect = expectation(description: "The client should announce when the status changes")
161+
let statusChange = SocketIOClientStatus.connecting
162+
163+
socket.on("statusChange") {data, ack in
164+
guard let status = data[0] as? SocketIOClientStatus else {
165+
XCTFail("Status should be one of the defined statuses")
166+
167+
return
168+
}
169+
170+
XCTAssertEqual(status, statusChange, "The status changed should be the one set")
171+
172+
expect.fulfill()
173+
}
174+
175+
socket.setTestStatus(statusChange)
176+
177+
waitForExpectations(timeout: 0.2)
178+
}
179+
180+
let data = "test".data(using: String.Encoding.utf8)!
181+
let data2 = "test2".data(using: String.Encoding.utf8)!
182+
private var socket: SocketIOClient!
183+
184+
override func setUp() {
185+
super.setUp()
186+
socket = SocketIOClient(socketURL: URL(string: "http://localhost/")!)
187+
socket.setTestable()
188+
}
168189
}

Source/SocketIOClient.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ open class SocketIOClient : NSObject, SocketIOClientSpec, SocketEngineClient, So
4747
default:
4848
break
4949
}
50+
51+
handleEvent("statusChange", data: [status], isInternalMessage: true)
5052
}
5153
}
5254

@@ -551,6 +553,10 @@ open class SocketIOClient : NSObject, SocketIOClientSpec, SocketEngineClient, So
551553
status = .connected
552554
}
553555

556+
func setTestStatus(_ status: SocketIOClientStatus) {
557+
self.status = status
558+
}
559+
554560
func setTestEngine(_ engine: SocketEngineSpec?) {
555561
self.engine = engine
556562
}

0 commit comments

Comments
 (0)