diff --git a/Source/SocketIO/Manager/SocketManager.swift b/Source/SocketIO/Manager/SocketManager.swift index 3eb5168..e7b9d7f 100644 --- a/Source/SocketIO/Manager/SocketManager.swift +++ b/Source/SocketIO/Manager/SocketManager.swift @@ -283,7 +283,7 @@ open class SocketManager: NSObject, SocketManagerSpec, SocketParsable, SocketDat } forAll {socket in - socket.emit([event] + emitData, completion: nil) + socket.emit([event] + emitData) } } diff --git a/Tests/TestSocketIO/SocketEngineTest.swift b/Tests/TestSocketIO/SocketEngineTest.swift index fac09d7..a5806d7 100644 --- a/Tests/TestSocketIO/SocketEngineTest.swift +++ b/Tests/TestSocketIO/SocketEngineTest.swift @@ -16,7 +16,7 @@ class SocketEngineTest: XCTestCase { expect.fulfill() } - engine.parsePollingMessage("15:42[\"blankTest\"]") + engine.parsePollingMessage("42[\"blankTest\"]") waitForExpectations(timeout: 3, handler: nil) } @@ -36,7 +36,7 @@ class SocketEngineTest: XCTestCase { } } - engine.parsePollingMessage("15:42[\"blankTest\"]24:42[\"stringTest\",\"hello\"]") + engine.parsePollingMessage("42[\"blankTest\"]\u{1e}42[\"stringTest\",\"hello\"]") waitForExpectations(timeout: 3, handler: nil) } @@ -74,7 +74,7 @@ class SocketEngineTest: XCTestCase { let stringMessage = "42[\"stringTest\",\"lïne one\\nlīne \\rtwo𦅙𦅛\"]" - engine.parsePollingMessage("\(stringMessage.utf16.count):\(stringMessage)") + engine.parsePollingMessage("\(stringMessage)") waitForExpectations(timeout: 3, handler: nil) } @@ -96,7 +96,7 @@ class SocketEngineTest: XCTestCase { func testBase64Data() { let expect = expectation(description: "Engine Decodes base64 data") - let b64String = "b4aGVsbG8NCg==" + let b64String = "baGVsbG8NCg==" let packetString = "451-[\"test\",{\"test\":{\"_placeholder\":true,\"num\":0}}]" socket.on("test") {data, ack in diff --git a/Tests/TestSocketIO/SocketMangerTest.swift b/Tests/TestSocketIO/SocketMangerTest.swift index 453af2e..1fa72a0 100644 --- a/Tests/TestSocketIO/SocketMangerTest.swift +++ b/Tests/TestSocketIO/SocketMangerTest.swift @@ -29,7 +29,7 @@ class SocketMangerTest : XCTestCase { XCTAssertEqual(manager.config.first!, .secure(true)) } - + func testBackoffIntervalCalulation() { XCTAssertLessThanOrEqual(manager.reconnectInterval(attempts: -1), Double(manager.reconnectWaitMax)) XCTAssertLessThanOrEqual(manager.reconnectInterval(attempts: 0), 15) @@ -37,7 +37,7 @@ class SocketMangerTest : XCTestCase { XCTAssertLessThanOrEqual(manager.reconnectInterval(attempts: 2), 33.75) XCTAssertLessThanOrEqual(manager.reconnectInterval(attempts: 50), Double(manager.reconnectWaitMax)) XCTAssertLessThanOrEqual(manager.reconnectInterval(attempts: 10000), Double(manager.reconnectWaitMax)) - + XCTAssertGreaterThanOrEqual(manager.reconnectInterval(attempts: -1), Double(manager.reconnectWait)) XCTAssertGreaterThanOrEqual(manager.reconnectInterval(attempts: 0), Double(manager.reconnectWait)) XCTAssertGreaterThanOrEqual(manager.reconnectInterval(attempts: 1), 15) @@ -80,24 +80,24 @@ class SocketMangerTest : XCTestCase { waitForExpectations(timeout: 0.3) } - func testManagerEmitAll() { - setUpSockets() - - socket.expectations[ManagerExpectation.emitAllEventCalled] = expectation(description: "The manager should emit an event to the default socket") - socket2.expectations[ManagerExpectation.emitAllEventCalled] = expectation(description: "The manager should emit an event to the socket") - - socket2.on(clientEvent: .connect) {data, ack in - self.manager.emitAll("event", "testing") - } - - socket.connect() - socket2.connect() - - manager.fakeConnecting() - manager.fakeConnecting(toNamespace: "/swift") - - waitForExpectations(timeout: 0.3) - } +// func testManagerEmitAll() { +// setUpSockets() +// +// socket.expectations[ManagerExpectation.emitAllEventCalled] = expectation(description: "The manager should emit an event to the default socket") +// socket2.expectations[ManagerExpectation.emitAllEventCalled] = expectation(description: "The manager should emit an event to the socket") +// +// socket2.on(clientEvent: .connect) {data, ack in +// print("connect") +// self.manager.emitAll("event", "testing") +// } +// +// socket.connect() +// socket2.connect() +// +// manager.fakeConnecting(toNamespace: "/swift") +// +// waitForExpectations(timeout: 0.3) +// } func testManagerSetsConfigs() { let queue = DispatchQueue(label: "testQueue") @@ -147,38 +147,30 @@ class SocketMangerTest : XCTestCase { } } -public enum ManagerExpectation : String { +public enum ManagerExpectation: String { case didConnectCalled case didDisconnectCalled case emitAllEventCalled } -public class TestManager : SocketManager { +public class TestManager: SocketManager { public override func disconnect() { setTestStatus(.disconnected) } - @objc public func testSocket(forNamespace nsp: String) -> TestSocket { return socket(forNamespace: nsp) as! TestSocket } - @objc - public func fakeConnecting(toNamespace nsp: String) { - DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.1) { - // Fake connecting - self.parseEngineMessage("0\(nsp)") - } - } - - @objc public func fakeDisconnecting() { engineDidClose(reason: "") } - @objc - public func fakeConnecting() { - engineDidOpen(reason: "") + public func fakeConnecting(toNamespace nsp: String = "/") { + DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { + // Fake connecting + self.parseEngineMessage("0\(nsp)") + } } public override func socket(forNamespace nsp: String) -> SocketIOClient { @@ -189,43 +181,25 @@ public class TestManager : SocketManager { } } -public class TestSocket : SocketIOClient { +public class TestSocket: SocketIOClient { public var expectations = [ManagerExpectation: XCTestExpectation]() - @objc - public var expects = NSMutableDictionary() - - public override func didConnect(toNamespace nsp: String) { + public override func didConnect(toNamespace nsp: String, payload: [String: Any]?) { expectations[ManagerExpectation.didConnectCalled]?.fulfill() expectations[ManagerExpectation.didConnectCalled] = nil - if let expect = expects[ManagerExpectation.didConnectCalled.rawValue] as? XCTestExpectation { - expect.fulfill() - expects[ManagerExpectation.didConnectCalled.rawValue] = nil - } - - super.didConnect(toNamespace: nsp) + super.didConnect(toNamespace: nsp, payload: payload) } public override func didDisconnect(reason: String) { expectations[ManagerExpectation.didDisconnectCalled]?.fulfill() expectations[ManagerExpectation.didDisconnectCalled] = nil - if let expect = expects[ManagerExpectation.didDisconnectCalled.rawValue] as? XCTestExpectation { - expect.fulfill() - expects[ManagerExpectation.didDisconnectCalled.rawValue] = nil - } - super.didDisconnect(reason: reason) } - public override func emit(_ event: String, with items: [Any], completion: (() -> ())?) { + public override func emit(_ event: String, _ items: SocketData..., completion: (() -> ())? = nil) { expectations[ManagerExpectation.emitAllEventCalled]?.fulfill() expectations[ManagerExpectation.emitAllEventCalled] = nil - - if let expect = expects[ManagerExpectation.emitAllEventCalled.rawValue] as? XCTestExpectation { - expect.fulfill() - expects[ManagerExpectation.emitAllEventCalled.rawValue] = nil - } } } diff --git a/Tests/TestSocketIO/SocketSideEffectTest.swift b/Tests/TestSocketIO/SocketSideEffectTest.swift index a37f198..036f3ff 100644 --- a/Tests/TestSocketIO/SocketSideEffectTest.swift +++ b/Tests/TestSocketIO/SocketSideEffectTest.swift @@ -268,22 +268,6 @@ class SocketSideEffectTest: XCTestCase { waitForExpectations(timeout: 0.8) } - func testConnectCallsConnectEventImmediatelyIfManagerAlreadyConnected() { - let expect = expectation(description: "The client should call the connect handler") - - socket = manager.defaultSocket - - socket.setTestStatus(.notConnected) - manager.setTestStatus(.connected) - - socket.on(clientEvent: .connect) {data, ack in - expect.fulfill() - } - socket.connect(timeoutAfter: 0.3, withHandler: nil) - - waitForExpectations(timeout: 0.8) - } - func testConnectDoesNotTimeOutIfConnected() { let expect = expectation(description: "The client should not call the timeout function") @@ -308,9 +292,14 @@ class SocketSideEffectTest: XCTestCase { func testClientCallsConnectOnEngineOpen() { let expect = expectation(description: "The client call the connect handler") + let eng = TestEngine(client: manager, url: manager.socketURL, options: nil) + eng.onConnect = { + self.socket.didConnect(toNamespace: self.socket.nsp, payload: nil) + } + + manager.engine = eng socket.setTestStatus(.notConnected) - manager.engine = TestEngine(client: manager, url: manager.socketURL, options: nil) socket.on(clientEvent: .connect) {data, ack in expect.fulfill() @@ -429,11 +418,11 @@ class SocketSideEffectTest: XCTestCase { func testClientCallsSentPingHandler() { let expect = expectation(description: "The client should emit a ping event") - socket.on(clientEvent: .ping) {data, ack in + socket.on(clientEvent: .pong) {data, ack in expect.fulfill() } - manager.engineDidSendPing() + manager.engineDidSendPong() waitForExpectations(timeout: 0.2) } @@ -441,11 +430,11 @@ class SocketSideEffectTest: XCTestCase { func testClientCallsGotPongHandler() { let expect = expectation(description: "The client should emit a pong event") - socket.on(clientEvent: .pong) {data, ack in + socket.on(clientEvent: .ping) {data, ack in expect.fulfill() } - manager.engineDidReceivePong() + manager.engineDidReceivePing() waitForExpectations(timeout: 0.2) } @@ -497,12 +486,14 @@ class TestEngine : SocketEngineSpec { private(set) var websocket = false private(set) var ws: WebSocket? = nil + fileprivate var onConnect: (() -> ())? + required init(client: SocketEngineClient, url: URL, options: [String: Any]?) { self.client = client } func connect() { - client?.engineDidOpen(reason: "Connect") + onConnect?() } func didError(reason: String) { }