diff --git a/Socket.IO-Client-Swift.xcodeproj/project.pbxproj b/Socket.IO-Client-Swift.xcodeproj/project.pbxproj index 7a27c30..515bc45 100644 --- a/Socket.IO-Client-Swift.xcodeproj/project.pbxproj +++ b/Socket.IO-Client-Swift.xcodeproj/project.pbxproj @@ -55,6 +55,8 @@ 7472A5EE1BB6ECE800CD4F59 /* WebSocket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5764DF881B51F254004FF46E /* WebSocket.swift */; }; 7472C65C1BCAB53E003CA70D /* SocketNamespacePacketTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7472C65B1BCAB53E003CA70D /* SocketNamespacePacketTest.swift */; settings = {ASSET_TAGS = (); }; }; 7472C65D1BCAB53E003CA70D /* SocketNamespacePacketTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7472C65B1BCAB53E003CA70D /* SocketNamespacePacketTest.swift */; settings = {ASSET_TAGS = (); }; }; + 7472C65F1BCAC46E003CA70D /* SocketSideEffectTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7472C65E1BCAC46E003CA70D /* SocketSideEffectTest.swift */; settings = {ASSET_TAGS = (); }; }; + 7472C6601BCAC46E003CA70D /* SocketSideEffectTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7472C65E1BCAC46E003CA70D /* SocketSideEffectTest.swift */; settings = {ASSET_TAGS = (); }; }; 74781D5A1B7E83930042CACA /* SocketIOClientStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74781D591B7E83930042CACA /* SocketIOClientStatus.swift */; }; 74781D5B1B7E83930042CACA /* SocketIOClientStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74781D591B7E83930042CACA /* SocketIOClientStatus.swift */; }; 74781D5C1B7E83930042CACA /* SocketIOClientStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74781D591B7E83930042CACA /* SocketIOClientStatus.swift */; }; @@ -137,6 +139,7 @@ 5764DF871B51F254004FF46E /* SwiftRegex.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SwiftRegex.swift; path = SocketIOClientSwift/SwiftRegex.swift; sourceTree = ""; }; 5764DF881B51F254004FF46E /* WebSocket.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = WebSocket.swift; path = SocketIOClientSwift/WebSocket.swift; sourceTree = ""; }; 7472C65B1BCAB53E003CA70D /* SocketNamespacePacketTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SocketNamespacePacketTest.swift; sourceTree = ""; }; + 7472C65E1BCAC46E003CA70D /* SocketSideEffectTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SocketSideEffectTest.swift; sourceTree = ""; }; 74781D591B7E83930042CACA /* SocketIOClientStatus.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SocketIOClientStatus.swift; path = SocketIOClientSwift/SocketIOClientStatus.swift; sourceTree = ""; }; 749A7F8A1BA9D42D00782993 /* SocketAckEmitter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SocketAckEmitter.swift; path = SocketIOClientSwift/SocketAckEmitter.swift; sourceTree = ""; }; 74D765611B9F0D870028551C /* SocketStringReader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = SocketStringReader.swift; path = SocketIOClientSwift/SocketStringReader.swift; sourceTree = ""; }; @@ -262,6 +265,7 @@ 74F124EF1BC574CF002966F4 /* SocketBasicPacketTest.swift */, 7472C65B1BCAB53E003CA70D /* SocketNamespacePacketTest.swift */, 949FAE8C1B9B94E600073BE9 /* SocketParserTest.swift */, + 7472C65E1BCAC46E003CA70D /* SocketSideEffectTest.swift */, 74F124EC1BC572A8002966F4 /* SocketTestEngine.swift */, 572EF2471B51F18A00EEBB58 /* Supporting Files */, ); @@ -507,6 +511,7 @@ 749A7F8C1BA9D42D00782993 /* SocketAckEmitter.swift in Sources */, 74F124ED1BC572A8002966F4 /* SocketTestEngine.swift in Sources */, 945B65371B5FCEEA0081E995 /* SocketEngine.swift in Sources */, + 7472C65F1BCAC46E003CA70D /* SocketSideEffectTest.swift in Sources */, 945B65351B5FCEEA0081E995 /* SocketAckManager.swift in Sources */, 945B65401B5FCEEA0081E995 /* SwiftRegex.swift in Sources */, 945B653C1B5FCEEA0081E995 /* SocketLogger.swift in Sources */, @@ -562,6 +567,7 @@ 7472A5E51BB6ECE800CD4F59 /* SocketEventHandler.swift in Sources */, 74F124EE1BC572A8002966F4 /* SocketTestEngine.swift in Sources */, 7472A5E61BB6ECE800CD4F59 /* SocketFixUTF8.swift in Sources */, + 7472C6601BCAC46E003CA70D /* SocketSideEffectTest.swift in Sources */, 7472A5E71BB6ECE800CD4F59 /* SocketIOClient.swift in Sources */, 7472A5E81BB6ECE800CD4F59 /* SocketLogger.swift in Sources */, 7472A5E91BB6ECE800CD4F59 /* SocketPacket.swift in Sources */, diff --git a/SocketIO-MacTests/SocketSideEffectTest.swift b/SocketIO-MacTests/SocketSideEffectTest.swift new file mode 100644 index 0000000..d6af57c --- /dev/null +++ b/SocketIO-MacTests/SocketSideEffectTest.swift @@ -0,0 +1,57 @@ +// +// SocketSideEffectTest.swift +// Socket.IO-Client-Swift +// +// Created by Erik Little on 10/11/15. +// +// + +import XCTest + +class SocketSideEffectTest: XCTestCase { + private var socket: SocketIOClient! + + override func setUp() { + super.setUp() + socket = SocketIOClient(socketURL: "") + socket.setTestable() + } + + func testInitialCurrentAck() { + XCTAssertEqual(socket.currentAck, -1) + } + + func testFirstAck() { + socket.emitWithAck("test")(timeoutAfter: 0) {data in} + XCTAssertEqual(socket.currentAck, 0) + } + + func testSecondAck() { + socket.emitWithAck("test")(timeoutAfter: 0) {data in} + socket.emitWithAck("test")(timeoutAfter: 0) {data in} + + XCTAssertEqual(self.socket.currentAck, 1) + } + + func testHandleAck() { + let expectation = expectationWithDescription("handled ack") + socket.emitWithAck("test")(timeoutAfter: 0) {data in + XCTAssertEqual(data[0] as? String, "hello world") + expectation.fulfill() + } + + socket.handleAck(0, data: ["hello world"]) + waitForExpectationsWithTimeout(3, handler: nil) + } + + func testHandleEvent() { + let expectation = expectationWithDescription("handled event") + socket.on("test") {data, ack in + XCTAssertEqual(data[0] as? String, "hello world") + expectation.fulfill() + } + + socket.parseSocketMessage("2[\"test\",\"hello world\"]") + waitForExpectationsWithTimeout(3, handler: nil) + } +} diff --git a/SocketIO-MacTests/SocketTestEngine.swift b/SocketIO-MacTests/SocketTestEngine.swift index 1bf75d7..af476fa 100644 --- a/SocketIO-MacTests/SocketTestEngine.swift +++ b/SocketIO-MacTests/SocketTestEngine.swift @@ -80,7 +80,6 @@ class SocketTestEngine: NSObject, SocketEngineSpec { expectation?.fulfill() return true } else { - print(sendString) return false } } diff --git a/SocketIO-iOSTests/SocketParserTest.swift b/SocketIO-iOSTests/SocketParserTest.swift index 0e42f6f..bb94f16 100644 --- a/SocketIO-iOSTests/SocketParserTest.swift +++ b/SocketIO-iOSTests/SocketParserTest.swift @@ -13,6 +13,7 @@ class SocketParserTest: XCTestCase { //Format key: message; namespace-data-binary-id static let packetTypes: Dictionary = [ "0": ("/", [], [], -1), "1": ("/", [], [], -1), + "25[\"test\"]": ("/", ["test"], [], 5), "2/swift,[\"testArrayEmitReturn\",[\"test3\",\"test4\"]]": ("/swift", ["testArrayEmitReturn", ["test3", "test4"]], [], -1), "51-/swift,[\"testMultipleItemsWithBufferEmitReturn\",[1,2],{\"test\":\"bob\"},25,\"polo\",{\"_placeholder\":true,\"num\":0}]": ("/swift", ["testMultipleItemsWithBufferEmitReturn", [1, 2], ["test": "bob"], 25, "polo", "~~0"], [], -1), "3/swift,0[[\"test3\",\"test4\"]]": ("/swift", [["test3", "test4"]], [], 0), @@ -43,6 +44,11 @@ class SocketParserTest: XCTestCase { validateParseResult(message) } + func testNamespaceEvent() { + let message = "25[\"test\"]" + validateParseResult(message) + } + func testNameSpaceArrayParse() { let message = "2/swift,[\"testArrayEmitReturn\",[\"test3\",\"test4\"]]" validateParseResult(message) diff --git a/SocketIOClientSwift/SocketIOClient.swift b/SocketIOClientSwift/SocketIOClient.swift index 0a7a15d..dc00c5e 100644 --- a/SocketIOClientSwift/SocketIOClient.swift +++ b/SocketIOClientSwift/SocketIOClient.swift @@ -50,8 +50,8 @@ public final class SocketIOClient: NSObject, SocketEngineClient { private var connectParams: [String: AnyObject]? private var reconnectTimer: NSTimer? private var ackHandlers = SocketAckManager() - private var currentAck = -1 - + + private(set) var currentAck = -1 var waitingData = [SocketPacket]() /**