diff --git a/SocketIO-MacTests/SocketSideEffectTest.swift b/SocketIO-MacTests/SocketSideEffectTest.swift index 9fede35..e277aef 100644 --- a/SocketIO-MacTests/SocketSideEffectTest.swift +++ b/SocketIO-MacTests/SocketSideEffectTest.swift @@ -10,77 +10,67 @@ import XCTest @testable import SocketIO class SocketSideEffectTest: XCTestCase { - let data = "test".data(using: String.Encoding.utf8)! - let data2 = "test2".data(using: String.Encoding.utf8)! - private var socket: SocketIOClient! - - override func setUp() { - super.setUp() - socket = SocketIOClient(socketURL: URL(string: "http://localhost/")!) - socket.setTestable() - } - func testInitialCurrentAck() { XCTAssertEqual(socket.currentAck, -1) } - + func testFirstAck() { socket.emitWithAck("test").timingOut(after: 0) {data in} XCTAssertEqual(socket.currentAck, 0) } - + func testSecondAck() { socket.emitWithAck("test").timingOut(after: 0) {data in} socket.emitWithAck("test").timingOut(after: 0) {data in} - + XCTAssertEqual(socket.currentAck, 1) } - + func testHandleAck() { let expect = expectation(description: "handled ack") socket.emitWithAck("test").timingOut(after: 0) {data in XCTAssertEqual(data[0] as? String, "hello world") expect.fulfill() } - + socket.parseSocketMessage("30[\"hello world\"]") waitForExpectations(timeout: 3, handler: nil) } - + func testHandleAck2() { let expect = expectation(description: "handled ack2") socket.emitWithAck("test").timingOut(after: 0) {data in XCTAssertTrue(data.count == 2, "Wrong number of ack items") expect.fulfill() } - + socket.parseSocketMessage("61-0[{\"_placeholder\":true,\"num\":0},{\"test\":true}]") socket.parseBinaryData(Data()) waitForExpectations(timeout: 3, handler: nil) } - + func testHandleEvent() { let expect = expectation(description: "handled event") socket.on("test") {data, ack in XCTAssertEqual(data[0] as? String, "hello world") expect.fulfill() } - + socket.parseSocketMessage("2[\"test\",\"hello world\"]") waitForExpectations(timeout: 3, handler: nil) } - + func testHandleStringEventWithQuotes() { let expect = expectation(description: "handled event") socket.on("test") {data, ack in XCTAssertEqual(data[0] as? String, "\"hello world\"") expect.fulfill() } - + socket.parseSocketMessage("2[\"test\",\"\\\"hello world\\\"\"]") waitForExpectations(timeout: 3, handler: nil) } - + func testHandleOnceEvent() { let expect = expectation(description: "handled event") socket.once("test") {data, ack in @@ -88,11 +78,11 @@ class SocketSideEffectTest: XCTestCase { XCTAssertEqual(self.socket.testHandlers.count, 0) expect.fulfill() } - + socket.parseSocketMessage("2[\"test\",\"hello world\"]") waitForExpectations(timeout: 3, handler: nil) } - + func testOffWithEvent() { socket.on("test") {data, ack in } XCTAssertEqual(socket.testHandlers.count, 1) @@ -101,7 +91,7 @@ class SocketSideEffectTest: XCTestCase { socket.off("test") XCTAssertEqual(socket.testHandlers.count, 0) } - + func testOffWithId() { let handler = socket.on("test") {data, ack in } XCTAssertEqual(socket.testHandlers.count, 1) @@ -110,7 +100,7 @@ class SocketSideEffectTest: XCTestCase { socket.off(id: handler) XCTAssertEqual(socket.testHandlers.count, 1) } - + func testHandlesErrorPacket() { let expect = expectation(description: "Handled error") socket.on("error") {data, ack in @@ -118,11 +108,11 @@ class SocketSideEffectTest: XCTestCase { expect.fulfill() } } - + socket.parseSocketMessage("4\"test error\"") waitForExpectations(timeout: 3, handler: nil) } - + func testHandleBinaryEvent() { let expect = expectation(description: "handled binary event") socket.on("test") {data, ack in @@ -131,12 +121,12 @@ class SocketSideEffectTest: XCTestCase { expect.fulfill() } } - + socket.parseSocketMessage("51-[\"test\",{\"test\":{\"_placeholder\":true,\"num\":0}}]") socket.parseBinaryData(data) waitForExpectations(timeout: 3, handler: nil) } - + func testHandleMultipleBinaryEvent() { let expect = expectation(description: "handled multiple binary event") socket.on("test") {data, ack in @@ -147,22 +137,53 @@ class SocketSideEffectTest: XCTestCase { expect.fulfill() } } - + socket.parseSocketMessage("52-[\"test\",{\"test\":{\"_placeholder\":true,\"num\":0},\"test2\":{\"_placeholder\":true,\"num\":1}}]") socket.parseBinaryData(data) socket.parseBinaryData(data2) waitForExpectations(timeout: 3, handler: nil) } - + func testSocketManager() { let manager = SocketClientManager.sharedManager manager["test"] = socket - + XCTAssert(manager["test"] === socket, "failed to get socket") - + manager["test"] = nil - + XCTAssert(manager["test"] == nil, "socket not removed") } + + func testChangingStatusCallsStatusChangeHandler() { + let expect = expectation(description: "The client should announce when the status changes") + let statusChange = SocketIOClientStatus.connecting + + socket.on("statusChange") {data, ack in + guard let status = data[0] as? SocketIOClientStatus else { + XCTFail("Status should be one of the defined statuses") + + return + } + + XCTAssertEqual(status, statusChange, "The status changed should be the one set") + + expect.fulfill() + } + + socket.setTestStatus(statusChange) + + waitForExpectations(timeout: 0.2) + } + + let data = "test".data(using: String.Encoding.utf8)! + let data2 = "test2".data(using: String.Encoding.utf8)! + private var socket: SocketIOClient! + + override func setUp() { + super.setUp() + socket = SocketIOClient(socketURL: URL(string: "http://localhost/")!) + socket.setTestable() + } } diff --git a/Source/SocketIOClient.swift b/Source/SocketIOClient.swift index 186c5eb..384fbfd 100644 --- a/Source/SocketIOClient.swift +++ b/Source/SocketIOClient.swift @@ -47,6 +47,8 @@ open class SocketIOClient : NSObject, SocketIOClientSpec, SocketEngineClient, So default: break } + + handleEvent("statusChange", data: [status], isInternalMessage: true) } } @@ -551,6 +553,10 @@ open class SocketIOClient : NSObject, SocketIOClientSpec, SocketEngineClient, So status = .connected } + func setTestStatus(_ status: SocketIOClientStatus) { + self.status = status + } + func setTestEngine(_ engine: SocketEngineSpec?) { self.engine = engine }