From 224c660e4c33e047db14f4ad5cd68f14bbffc1a4 Mon Sep 17 00:00:00 2001 From: Lukas Schmidt Date: Fri, 24 Jul 2015 19:55:35 +0200 Subject: [PATCH 01/15] basic test structure / tests --- .../project.pbxproj | 26 +++++++++ SocketIO-iOSTests/SocketIO_iOSTests.swift | 54 +++++++++++++++---- 2 files changed, 71 insertions(+), 9 deletions(-) diff --git a/Socket.IO-Client-Swift.xcodeproj/project.pbxproj b/Socket.IO-Client-Swift.xcodeproj/project.pbxproj index a54247f..acac5a0 100644 --- a/Socket.IO-Client-Swift.xcodeproj/project.pbxproj +++ b/Socket.IO-Client-Swift.xcodeproj/project.pbxproj @@ -39,6 +39,19 @@ 5764DFA01B51F254004FF46E /* SwiftRegex.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5764DF871B51F254004FF46E /* SwiftRegex.swift */; }; 5764DFA11B51F254004FF46E /* WebSocket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5764DF881B51F254004FF46E /* WebSocket.swift */; }; 5764DFA21B51F254004FF46E /* WebSocket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5764DF881B51F254004FF46E /* WebSocket.swift */; }; + 945B65351B5FCEEA0081E995 /* SocketAckManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5764DF7C1B51F254004FF46E /* SocketAckManager.swift */; }; + 945B65361B5FCEEA0081E995 /* SocketAnyEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5764DF7D1B51F254004FF46E /* SocketAnyEvent.swift */; }; + 945B65371B5FCEEA0081E995 /* SocketEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5764DF7E1B51F254004FF46E /* SocketEngine.swift */; }; + 945B65381B5FCEEA0081E995 /* SocketEngineClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5764DF7F1B51F254004FF46E /* SocketEngineClient.swift */; }; + 945B65391B5FCEEA0081E995 /* SocketEventHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5764DF801B51F254004FF46E /* SocketEventHandler.swift */; }; + 945B653A1B5FCEEA0081E995 /* SocketFixUTF8.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5764DF811B51F254004FF46E /* SocketFixUTF8.swift */; }; + 945B653B1B5FCEEA0081E995 /* SocketIOClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5764DF821B51F254004FF46E /* SocketIOClient.swift */; }; + 945B653C1B5FCEEA0081E995 /* SocketLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5764DF831B51F254004FF46E /* SocketLogger.swift */; }; + 945B653D1B5FCEEA0081E995 /* SocketPacket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5764DF841B51F254004FF46E /* SocketPacket.swift */; }; + 945B653E1B5FCEEA0081E995 /* SocketParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5764DF851B51F254004FF46E /* SocketParser.swift */; }; + 945B653F1B5FCEEA0081E995 /* SocketTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5764DF861B51F254004FF46E /* SocketTypes.swift */; }; + 945B65401B5FCEEA0081E995 /* SwiftRegex.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5764DF871B51F254004FF46E /* SwiftRegex.swift */; }; + 945B65411B5FCEEA0081E995 /* WebSocket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5764DF881B51F254004FF46E /* WebSocket.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -424,7 +437,20 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 945B653E1B5FCEEA0081E995 /* SocketParser.swift in Sources */, + 945B653D1B5FCEEA0081E995 /* SocketPacket.swift in Sources */, + 945B653A1B5FCEEA0081E995 /* SocketFixUTF8.swift in Sources */, + 945B65391B5FCEEA0081E995 /* SocketEventHandler.swift in Sources */, + 945B65371B5FCEEA0081E995 /* SocketEngine.swift in Sources */, + 945B65351B5FCEEA0081E995 /* SocketAckManager.swift in Sources */, + 945B65401B5FCEEA0081E995 /* SwiftRegex.swift in Sources */, 572EF22C1B51F16C00EEBB58 /* SocketIO_iOSTests.swift in Sources */, + 945B653C1B5FCEEA0081E995 /* SocketLogger.swift in Sources */, + 945B65381B5FCEEA0081E995 /* SocketEngineClient.swift in Sources */, + 945B65361B5FCEEA0081E995 /* SocketAnyEvent.swift in Sources */, + 945B653F1B5FCEEA0081E995 /* SocketTypes.swift in Sources */, + 945B653B1B5FCEEA0081E995 /* SocketIOClient.swift in Sources */, + 945B65411B5FCEEA0081E995 /* WebSocket.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/SocketIO-iOSTests/SocketIO_iOSTests.swift b/SocketIO-iOSTests/SocketIO_iOSTests.swift index 8e9aad8..d1914ec 100644 --- a/SocketIO-iOSTests/SocketIO_iOSTests.swift +++ b/SocketIO-iOSTests/SocketIO_iOSTests.swift @@ -10,27 +10,63 @@ import UIKit import XCTest class SocketIO_iOSTests: XCTestCase { + var socketClient:SocketIOClient! override func setUp() { super.setUp() - // Put setup code here. This method is called before the invocation of each test method in the class. + self.socketClient = SocketIOClient(socketURL: "localhost:8080") + openConnection() } override func tearDown() { - // Put teardown code here. This method is called after the invocation of each test method in the class. super.tearDown() } - func testExample() { - // This is an example of a functional test case. - XCTAssert(true, "Pass") + func testConnectionStatus() { + XCTAssertTrue(socketClient.connected) + XCTAssertFalse(socketClient.connecting) + XCTAssertFalse(socketClient.reconnecting) + XCTAssertFalse(socketClient.closed) } - func testPerformanceExample() { - // This is an example of a performance test case. - self.measureBlock() { - // Put the code you want to measure the time of here. + func testeventWithAcknowledgements() { + let sendedValue = 15; + let expection = self.expectationWithDescription("AcknowledgementTestIncomming") + func didGetEmit(result:NSArray?) { + let resultValue = result?.firstObject as! Int + XCTAssertEqual(sendedValue + 20, resultValue) + expection.fulfill() } + socketClient.emitWithAck("AcknowledgementTestIncomming", sendedValue)(timeout: 0, callback: didGetEmit) + waitForExpectationsWithTimeout(10, handler: nil) + } + + func testoutGoingEmit() { + let sendedValue = 15; + let expection = self.expectationWithDescription("firstEmitTestIncomming") + func didGetEmit(result:NSArray?, ack:AckEmitter?) { + let resultValue = result?.firstObject as! Int + XCTAssertEqual(sendedValue + 10, resultValue) + expection.fulfill() + } + socketClient.on("firstEmitTestOutGoing", callback: didGetEmit) + socketClient.emit("firstEmitTestIncomming", sendedValue) + waitForExpectationsWithTimeout(10, handler: nil) + } + + func openConnection() { + let expection = self.expectationWithDescription("connect") + socketClient.on("connect") {data, ack in + expection.fulfill() + } + socketClient.connect() + XCTAssertTrue(socketClient.connecting) + waitForExpectationsWithTimeout(10, handler: nil) + } + + func testCloseConnection() { + socketClient.close(fast: false) + XCTAssertTrue(socketClient.closed) } } From 4b9db85a49dbbf55b645c2e43d47582f66668a21 Mon Sep 17 00:00:00 2001 From: Lukas Schmidt Date: Fri, 24 Jul 2015 20:11:47 +0200 Subject: [PATCH 02/15] update api --- SocketIO-iOSTests/SocketIO_iOSTests.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/SocketIO-iOSTests/SocketIO_iOSTests.swift b/SocketIO-iOSTests/SocketIO_iOSTests.swift index d1914ec..c91a0de 100644 --- a/SocketIO-iOSTests/SocketIO_iOSTests.swift +++ b/SocketIO-iOSTests/SocketIO_iOSTests.swift @@ -27,6 +27,7 @@ class SocketIO_iOSTests: XCTestCase { XCTAssertFalse(socketClient.connecting) XCTAssertFalse(socketClient.reconnecting) XCTAssertFalse(socketClient.closed) + XCTAssertFalse(socketClient.secure) } func testeventWithAcknowledgements() { @@ -37,7 +38,7 @@ class SocketIO_iOSTests: XCTestCase { XCTAssertEqual(sendedValue + 20, resultValue) expection.fulfill() } - socketClient.emitWithAck("AcknowledgementTestIncomming", sendedValue)(timeout: 0, callback: didGetEmit) + socketClient.emitWithAck("AcknowledgementTestIncomming", sendedValue)(timeoutAfter: 0, callback: didGetEmit) waitForExpectationsWithTimeout(10, handler: nil) } From a07916fb2f437ff3f18392ae2bb70461a5843fd7 Mon Sep 17 00:00:00 2001 From: Lukas Schmidt Date: Sat, 25 Jul 2015 18:45:41 +0200 Subject: [PATCH 03/15] basic emit tests --- .../project.pbxproj | 4 + SocketIO-iOSTests/ConvertedSocketTest.swift | 190 ++++++++++++++++++ 2 files changed, 194 insertions(+) create mode 100644 SocketIO-iOSTests/ConvertedSocketTest.swift diff --git a/Socket.IO-Client-Swift.xcodeproj/project.pbxproj b/Socket.IO-Client-Swift.xcodeproj/project.pbxproj index acac5a0..01c833d 100644 --- a/Socket.IO-Client-Swift.xcodeproj/project.pbxproj +++ b/Socket.IO-Client-Swift.xcodeproj/project.pbxproj @@ -52,6 +52,7 @@ 945B653F1B5FCEEA0081E995 /* SocketTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5764DF861B51F254004FF46E /* SocketTypes.swift */; }; 945B65401B5FCEEA0081E995 /* SwiftRegex.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5764DF871B51F254004FF46E /* SwiftRegex.swift */; }; 945B65411B5FCEEA0081E995 /* WebSocket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5764DF881B51F254004FF46E /* WebSocket.swift */; }; + 945B65431B63D9DB0081E995 /* ConvertedSocketTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 945B65421B63D9DB0081E995 /* ConvertedSocketTest.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -97,6 +98,7 @@ 5764DF861B51F254004FF46E /* SocketTypes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SocketTypes.swift; path = SocketIOClientSwift/SocketTypes.swift; sourceTree = ""; }; 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 = ""; }; + 945B65421B63D9DB0081E995 /* ConvertedSocketTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConvertedSocketTest.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -176,6 +178,7 @@ 572EF2281B51F16C00EEBB58 /* SocketIO-iOSTests */ = { isa = PBXGroup; children = ( + 945B65421B63D9DB0081E995 /* ConvertedSocketTest.swift */, 572EF22B1B51F16C00EEBB58 /* SocketIO_iOSTests.swift */, 572EF2291B51F16C00EEBB58 /* Supporting Files */, ); @@ -443,6 +446,7 @@ 945B65391B5FCEEA0081E995 /* SocketEventHandler.swift in Sources */, 945B65371B5FCEEA0081E995 /* SocketEngine.swift in Sources */, 945B65351B5FCEEA0081E995 /* SocketAckManager.swift in Sources */, + 945B65431B63D9DB0081E995 /* ConvertedSocketTest.swift in Sources */, 945B65401B5FCEEA0081E995 /* SwiftRegex.swift in Sources */, 572EF22C1B51F16C00EEBB58 /* SocketIO_iOSTests.swift in Sources */, 945B653C1B5FCEEA0081E995 /* SocketLogger.swift in Sources */, diff --git a/SocketIO-iOSTests/ConvertedSocketTest.swift b/SocketIO-iOSTests/ConvertedSocketTest.swift new file mode 100644 index 0000000..fed9352 --- /dev/null +++ b/SocketIO-iOSTests/ConvertedSocketTest.swift @@ -0,0 +1,190 @@ +// +// ConvertedSocketTest.swift +// Socket.IO-Client-Swift +// +// Created by Lukas Schmidt on 25.07.15. +// +// + +import XCTest +import Foundation + +class ConvertedSocketTest: XCTestCase { + + var socket:SocketIOClient! + + + let headers = ["testing": "blah", "testing2": "b/:lah"] + let testCytube = false + + override func setUp() { + super.setUp() + if testCytube { + socket = SocketIOClient(socketURL: "https://cytu.be:10443", opts: [ + "forcePolling": false, + "forceWebsockets": false, + "log": true + ]) + } else { + socket = SocketIOClient(socketURL: "127.0.0.1:8080", opts: [ + "reconnects": true, // default true + "reconnectAttempts": -1, // default -1 + "reconnectWait": 5, // default 10 + "forcePolling": false, + "forceWebsockets": false,// default false + "nsp": "/swift", + "path": "", + "extraHeaders": headers, + // "connectParams": [ + // "test": 2.1, + // "d": "{}" + // ], + //"cookies": cookieArray + ]) + } + openConnection() + } + + override func tearDown() { + + super.tearDown() + } + + func openConnection() { + let expection = self.expectationWithDescription("connect") + socket.on("connect") {data, ack in + expection.fulfill() + } + socket.connect() + XCTAssertTrue(socket.connecting) + waitForExpectationsWithTimeout(5, handler: nil) + } + + func testConnectionStatus() { + XCTAssertTrue(socket.connected) + XCTAssertFalse(socket.connecting) + XCTAssertFalse(socket.reconnecting) + XCTAssertFalse(socket.closed) + XCTAssertFalse(socket.secure) + } + + func testEmit() { + let testName = "testEmit" + func didGetEmit(result:NSArray?, ack:AckEmitter?) { + + } + abstractSocketEmitTest(testName, emitData: nil, callback: didGetEmit) + } + + func testEmitNull() { + let testName = "testEmitNull" + func didGetEmit(result:NSArray?, ack:AckEmitter?) { + if let _ = result?.firstObject as? NSNull { + + }else + { + XCTFail("Should have NSNull as result") + } + } + abstractSocketEmitTest(testName, emitData: NSNull(), callback: didGetEmit) + } + + func testEmitBinary() { + let testName = "testEmitBinary" + func didGetEmit(result:NSArray?, ack:AckEmitter?) { + if let data = result?.firstObject as? NSData { + let string = NSString(data: data, encoding: NSUTF8StringEncoding)! + XCTAssertEqual(string, "gakgakgak2") + }else { + XCTFail("Should have NSData as result") + } + } + let data = NSString(string: "gakgakgak2").dataUsingEncoding(NSUTF8StringEncoding)! + abstractSocketEmitTest(testName, emitData: data, callback: didGetEmit) + } + + func testArrayEmit() { + let testName = "testEmitArray" + func didGetEmit(result:NSArray?, ack:AckEmitter?) { + if let array = result?.firstObject as? NSArray { + XCTAssertEqual(array.count, 2) + XCTAssertEqual(array.firstObject! as! String, "test3") + }else { + XCTFail("Should have NSArray as result") + } + } + abstractSocketEmitTest(testName, emitData: ["test1", "test2"], callback: didGetEmit) + } + + func testStringEmit() { + let testName = "testStringEmit" + func didGetEmit(result:NSArray?, ack:AckEmitter?) { + if let string = result?.firstObject as? String { + XCTAssertEqual(string, "polo") + }else { + XCTFail("Should have String as result") + } + } + abstractSocketEmitTest(testName, emitData: "marco", callback: didGetEmit) + } + + func testBoolEmit() { + let testName = "testBoolEmit" + func didGetEmit(result:NSArray?, ack:AckEmitter?) { + if let bool = result?.firstObject as? NSNumber { + XCTAssertTrue(bool.boolValue) + }else { + XCTFail("Should have Boolean as result") + } + } + abstractSocketEmitTest(testName, emitData: false, callback: didGetEmit) + } + + func testIntegerEmit() { + let testName = "testIntegerEmit" + func didGetEmit(result:NSArray?, ack:AckEmitter?) { + if let integer = result?.firstObject as? Int { + XCTAssertEqual(integer, 20) + }else { + XCTFail("Should have Integer as result") + } + } + abstractSocketEmitTest(testName, emitData: 10, callback: didGetEmit) + } + + func testDoubleEmit() { + let testName = "testDoubleEmit" + func didGetEmit(result:NSArray?, ack:AckEmitter?) { + if let double = result?.firstObject as? NSNumber { + XCTAssertEqual(double.floatValue, 1.2) + }else { + XCTFail("Should have String as result") + } + } + abstractSocketEmitTest(testName, emitData: 1.1, callback: didGetEmit) + } + + + func abstractSocketEmitTest(testName:String, emitData:AnyObject?, callback:NormalCallback){ + let expection = self.expectationWithDescription(testName) + func didGetEmit(result:NSArray?, ack:AckEmitter?) { + callback(result, ack) + expection.fulfill() + } + + socket.on(testName + "Return", callback: didGetEmit) + if let emitData = emitData { + socket.emit(testName, emitData) + } else { + socket.emit(testName) + } + + waitForExpectationsWithTimeout(5, handler: nil) + } + + func testCloseConnection() { +// socket.close(fast: false) +// XCTAssertTrue(socket.closed) + } + +} From aa6db7c837ccc32eeff817b50b18119ccf8f7980 Mon Sep 17 00:00:00 2001 From: Lukas Schmidt Date: Sun, 26 Jul 2015 12:42:18 +0200 Subject: [PATCH 04/15] remove old files --- .../project.pbxproj | 4 - SocketIO-iOSTests/SocketIO_iOSTests.swift | 73 ------------------- 2 files changed, 77 deletions(-) delete mode 100644 SocketIO-iOSTests/SocketIO_iOSTests.swift diff --git a/Socket.IO-Client-Swift.xcodeproj/project.pbxproj b/Socket.IO-Client-Swift.xcodeproj/project.pbxproj index 01c833d..053773a 100644 --- a/Socket.IO-Client-Swift.xcodeproj/project.pbxproj +++ b/Socket.IO-Client-Swift.xcodeproj/project.pbxproj @@ -9,7 +9,6 @@ /* Begin PBXBuildFile section */ 572EF21F1B51F16C00EEBB58 /* SocketIO-iOS.h in Headers */ = {isa = PBXBuildFile; fileRef = 572EF21E1B51F16C00EEBB58 /* SocketIO-iOS.h */; settings = {ATTRIBUTES = (Public, ); }; }; 572EF2251B51F16C00EEBB58 /* SocketIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 572EF2191B51F16C00EEBB58 /* SocketIO.framework */; }; - 572EF22C1B51F16C00EEBB58 /* SocketIO_iOSTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 572EF22B1B51F16C00EEBB58 /* SocketIO_iOSTests.swift */; }; 572EF23D1B51F18A00EEBB58 /* SocketIO-Mac.h in Headers */ = {isa = PBXBuildFile; fileRef = 572EF23C1B51F18A00EEBB58 /* SocketIO-Mac.h */; settings = {ATTRIBUTES = (Public, ); }; }; 572EF2431B51F18A00EEBB58 /* SocketIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 572EF2381B51F18A00EEBB58 /* SocketIO.framework */; }; 572EF24A1B51F18A00EEBB58 /* SocketIO_MacTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 572EF2491B51F18A00EEBB58 /* SocketIO_MacTests.swift */; }; @@ -78,7 +77,6 @@ 572EF21E1B51F16C00EEBB58 /* SocketIO-iOS.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SocketIO-iOS.h"; sourceTree = ""; }; 572EF2241B51F16C00EEBB58 /* SocketIO-iOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "SocketIO-iOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 572EF22A1B51F16C00EEBB58 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 572EF22B1B51F16C00EEBB58 /* SocketIO_iOSTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SocketIO_iOSTests.swift; sourceTree = ""; }; 572EF2381B51F18A00EEBB58 /* SocketIO.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SocketIO.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 572EF23B1B51F18A00EEBB58 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 572EF23C1B51F18A00EEBB58 /* SocketIO-Mac.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SocketIO-Mac.h"; sourceTree = ""; }; @@ -179,7 +177,6 @@ isa = PBXGroup; children = ( 945B65421B63D9DB0081E995 /* ConvertedSocketTest.swift */, - 572EF22B1B51F16C00EEBB58 /* SocketIO_iOSTests.swift */, 572EF2291B51F16C00EEBB58 /* Supporting Files */, ); path = "SocketIO-iOSTests"; @@ -448,7 +445,6 @@ 945B65351B5FCEEA0081E995 /* SocketAckManager.swift in Sources */, 945B65431B63D9DB0081E995 /* ConvertedSocketTest.swift in Sources */, 945B65401B5FCEEA0081E995 /* SwiftRegex.swift in Sources */, - 572EF22C1B51F16C00EEBB58 /* SocketIO_iOSTests.swift in Sources */, 945B653C1B5FCEEA0081E995 /* SocketLogger.swift in Sources */, 945B65381B5FCEEA0081E995 /* SocketEngineClient.swift in Sources */, 945B65361B5FCEEA0081E995 /* SocketAnyEvent.swift in Sources */, diff --git a/SocketIO-iOSTests/SocketIO_iOSTests.swift b/SocketIO-iOSTests/SocketIO_iOSTests.swift deleted file mode 100644 index c91a0de..0000000 --- a/SocketIO-iOSTests/SocketIO_iOSTests.swift +++ /dev/null @@ -1,73 +0,0 @@ -// -// SocketIO_iOSTests.swift -// SocketIO-iOSTests -// -// Created by Nacho Soto on 7/11/15. -// -// - -import UIKit -import XCTest - -class SocketIO_iOSTests: XCTestCase { - var socketClient:SocketIOClient! - - override func setUp() { - super.setUp() - self.socketClient = SocketIOClient(socketURL: "localhost:8080") - openConnection() - } - - override func tearDown() { - super.tearDown() - } - - func testConnectionStatus() { - XCTAssertTrue(socketClient.connected) - XCTAssertFalse(socketClient.connecting) - XCTAssertFalse(socketClient.reconnecting) - XCTAssertFalse(socketClient.closed) - XCTAssertFalse(socketClient.secure) - } - - func testeventWithAcknowledgements() { - let sendedValue = 15; - let expection = self.expectationWithDescription("AcknowledgementTestIncomming") - func didGetEmit(result:NSArray?) { - let resultValue = result?.firstObject as! Int - XCTAssertEqual(sendedValue + 20, resultValue) - expection.fulfill() - } - socketClient.emitWithAck("AcknowledgementTestIncomming", sendedValue)(timeoutAfter: 0, callback: didGetEmit) - waitForExpectationsWithTimeout(10, handler: nil) - } - - func testoutGoingEmit() { - let sendedValue = 15; - let expection = self.expectationWithDescription("firstEmitTestIncomming") - func didGetEmit(result:NSArray?, ack:AckEmitter?) { - let resultValue = result?.firstObject as! Int - XCTAssertEqual(sendedValue + 10, resultValue) - expection.fulfill() - } - socketClient.on("firstEmitTestOutGoing", callback: didGetEmit) - socketClient.emit("firstEmitTestIncomming", sendedValue) - waitForExpectationsWithTimeout(10, handler: nil) - } - - func openConnection() { - let expection = self.expectationWithDescription("connect") - socketClient.on("connect") {data, ack in - expection.fulfill() - } - socketClient.connect() - XCTAssertTrue(socketClient.connecting) - waitForExpectationsWithTimeout(10, handler: nil) - } - - func testCloseConnection() { - socketClient.close(fast: false) - XCTAssertTrue(socketClient.closed) - } - -} From a1af98e1731de939c4b464ad95596e7b6f9f0e8f Mon Sep 17 00:00:00 2001 From: Lukas Schmidt Date: Sun, 26 Jul 2015 16:58:08 +0200 Subject: [PATCH 05/15] refactor --- .../project.pbxproj | 8 +- ...dSocketTest.swift => SocketEmitTest.swift} | 97 +++++++++++++++---- 2 files changed, 84 insertions(+), 21 deletions(-) rename SocketIO-iOSTests/{ConvertedSocketTest.swift => SocketEmitTest.swift} (60%) diff --git a/Socket.IO-Client-Swift.xcodeproj/project.pbxproj b/Socket.IO-Client-Swift.xcodeproj/project.pbxproj index 053773a..75f5ac1 100644 --- a/Socket.IO-Client-Swift.xcodeproj/project.pbxproj +++ b/Socket.IO-Client-Swift.xcodeproj/project.pbxproj @@ -51,7 +51,7 @@ 945B653F1B5FCEEA0081E995 /* SocketTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5764DF861B51F254004FF46E /* SocketTypes.swift */; }; 945B65401B5FCEEA0081E995 /* SwiftRegex.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5764DF871B51F254004FF46E /* SwiftRegex.swift */; }; 945B65411B5FCEEA0081E995 /* WebSocket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5764DF881B51F254004FF46E /* WebSocket.swift */; }; - 945B65431B63D9DB0081E995 /* ConvertedSocketTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 945B65421B63D9DB0081E995 /* ConvertedSocketTest.swift */; }; + 945B65431B63D9DB0081E995 /* SocketEmitTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 945B65421B63D9DB0081E995 /* SocketEmitTest.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -96,7 +96,7 @@ 5764DF861B51F254004FF46E /* SocketTypes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SocketTypes.swift; path = SocketIOClientSwift/SocketTypes.swift; sourceTree = ""; }; 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 = ""; }; - 945B65421B63D9DB0081E995 /* ConvertedSocketTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConvertedSocketTest.swift; sourceTree = ""; }; + 945B65421B63D9DB0081E995 /* SocketEmitTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SocketEmitTest.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -176,7 +176,7 @@ 572EF2281B51F16C00EEBB58 /* SocketIO-iOSTests */ = { isa = PBXGroup; children = ( - 945B65421B63D9DB0081E995 /* ConvertedSocketTest.swift */, + 945B65421B63D9DB0081E995 /* SocketEmitTest.swift */, 572EF2291B51F16C00EEBB58 /* Supporting Files */, ); path = "SocketIO-iOSTests"; @@ -443,7 +443,7 @@ 945B65391B5FCEEA0081E995 /* SocketEventHandler.swift in Sources */, 945B65371B5FCEEA0081E995 /* SocketEngine.swift in Sources */, 945B65351B5FCEEA0081E995 /* SocketAckManager.swift in Sources */, - 945B65431B63D9DB0081E995 /* ConvertedSocketTest.swift in Sources */, + 945B65431B63D9DB0081E995 /* SocketEmitTest.swift in Sources */, 945B65401B5FCEEA0081E995 /* SwiftRegex.swift in Sources */, 945B653C1B5FCEEA0081E995 /* SocketLogger.swift in Sources */, 945B65381B5FCEEA0081E995 /* SocketEngineClient.swift in Sources */, diff --git a/SocketIO-iOSTests/ConvertedSocketTest.swift b/SocketIO-iOSTests/SocketEmitTest.swift similarity index 60% rename from SocketIO-iOSTests/ConvertedSocketTest.swift rename to SocketIO-iOSTests/SocketEmitTest.swift index fed9352..d2866d6 100644 --- a/SocketIO-iOSTests/ConvertedSocketTest.swift +++ b/SocketIO-iOSTests/SocketEmitTest.swift @@ -9,8 +9,8 @@ import XCTest import Foundation -class ConvertedSocketTest: XCTestCase { - +class SocketEmitTest: XCTestCase { + private static let TEST_TIMEOUT = 20.0 var socket:SocketIOClient! @@ -32,15 +32,8 @@ class ConvertedSocketTest: XCTestCase { "reconnectWait": 5, // default 10 "forcePolling": false, "forceWebsockets": false,// default false - "nsp": "/swift", "path": "", - "extraHeaders": headers, - // "connectParams": [ - // "test": 2.1, - // "d": "{}" - // ], - //"cookies": cookieArray - ]) + "extraHeaders": headers]) } openConnection() } @@ -158,11 +151,86 @@ class ConvertedSocketTest: XCTestCase { if let double = result?.firstObject as? NSNumber { XCTAssertEqual(double.floatValue, 1.2) }else { - XCTFail("Should have String as result") + XCTFail("Should have Double as result") } } abstractSocketEmitTest(testName, emitData: 1.1, callback: didGetEmit) } + + func testJSONEmit() { + let testName = "testJSONEmit" + func didGetEmit(result:NSArray?, ack:AckEmitter?) { + if let json = result?.firstObject as? NSDictionary { + XCTAssertEqual(json.valueForKey("testString")! as! String, "test") + XCTAssertEqual(json.valueForKey("testNumber")! as! Int, 15) + XCTAssertEqual((json.valueForKey("testArray")! as! Array).count, 2) + XCTAssertEqual((json.valueForKey("testArray")! as! Array).last! as! Int, 1) + let string = NSString(data: (json.valueForKey("testArray")! as! Array).first! as! NSData, encoding: NSUTF8StringEncoding)! + XCTAssertEqual(string, "gakgakgak2") + }else { + XCTFail("Should have NSDictionary as result") + } + } + let json = ["name": "test", "testArray": ["hallo"], "nestedTest": ["test": "test"], "number": 15] + + abstractSocketEmitTest(testName, emitData: json, callback: didGetEmit) + } + + func testUnicodeEmit() { + let testName = "testUnicodeEmit" + func didGetEmit(result:NSArray?, ack:AckEmitter?) { + if let unicode = result?.firstObject as? String { + XCTAssertEqual(unicode, "🚄") + }else { + XCTFail("Should have String as result") + } + } + abstractSocketEmitTest(testName, emitData: "🚀", callback: didGetEmit) + } + + func testMultipleItemsEmit() { + let testName = "testMultipleItemsEmit" + let expection = self.expectationWithDescription(testName) + func didGetEmit(result:NSArray?, ack:AckEmitter?) { + XCTAssertEqual(result!.count, 5) + if let array = result?.firstObject as? Array { + XCTAssertEqual(array.last! as! Int, 2) + let string = NSString(data: array.first! as! NSData, encoding: NSUTF8StringEncoding)! + XCTAssertEqual(string, "gakgakgak2") + }else { + XCTFail("Should have Array as result") + } + if let dict = result?[1] as? NSDictionary { + XCTAssertEqual(dict.valueForKey("test") as! String, "bob") + + }else { + XCTFail("Should have NSDictionary as result") + } + if let number = result?[2] as? Int { + XCTAssertEqual(number, 25) + + }else { + XCTFail("Should have Integer as result") + } + if let string = result?[3] as? String { + XCTAssertEqual(string, "polo") + + }else { + XCTFail("Should have Integer as result") + } + if let data = result?[4] as? NSData { + let string = NSString(data: data, encoding: NSUTF8StringEncoding)! + XCTAssertEqual(string, "gakgakgak2") + }else { + XCTFail("Should have NSData as result") + } + expection.fulfill() + } + let data = NSString(string: "gakgakgak2").dataUsingEncoding(NSUTF8StringEncoding)! + socket.emit(testName, withItems: [["test1", "test2"], ["test": "test"], 15, "marco", data]) + socket.on(testName + "Return", callback: didGetEmit) + waitForExpectationsWithTimeout(SocketEmitTest.TEST_TIMEOUT, handler: nil) + } func abstractSocketEmitTest(testName:String, emitData:AnyObject?, callback:NormalCallback){ @@ -179,12 +247,7 @@ class ConvertedSocketTest: XCTestCase { socket.emit(testName) } - waitForExpectationsWithTimeout(5, handler: nil) - } - - func testCloseConnection() { -// socket.close(fast: false) -// XCTAssertTrue(socket.closed) + waitForExpectationsWithTimeout(SocketEmitTest.TEST_TIMEOUT, handler: nil) } } From a4988e6404510e7d6945a776b1623137ab379e98 Mon Sep 17 00:00:00 2001 From: Lukas Schmidt Date: Sun, 26 Jul 2015 17:14:21 +0200 Subject: [PATCH 06/15] namespace tests --- .../project.pbxproj | 4 + SocketIO-iOSTests/SocketEmitTest.swift | 2 +- .../SocketNamespaceEmitTest.swift | 89 +++++++++++++++++++ 3 files changed, 94 insertions(+), 1 deletion(-) create mode 100644 SocketIO-iOSTests/SocketNamespaceEmitTest.swift diff --git a/Socket.IO-Client-Swift.xcodeproj/project.pbxproj b/Socket.IO-Client-Swift.xcodeproj/project.pbxproj index 75f5ac1..041d1bb 100644 --- a/Socket.IO-Client-Swift.xcodeproj/project.pbxproj +++ b/Socket.IO-Client-Swift.xcodeproj/project.pbxproj @@ -52,6 +52,7 @@ 945B65401B5FCEEA0081E995 /* SwiftRegex.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5764DF871B51F254004FF46E /* SwiftRegex.swift */; }; 945B65411B5FCEEA0081E995 /* WebSocket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5764DF881B51F254004FF46E /* WebSocket.swift */; }; 945B65431B63D9DB0081E995 /* SocketEmitTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 945B65421B63D9DB0081E995 /* SocketEmitTest.swift */; }; + 94ADAC491B652D3300FD79AE /* SocketNamespaceEmitTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94ADAC481B652D3300FD79AE /* SocketNamespaceEmitTest.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -97,6 +98,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 = ""; }; 945B65421B63D9DB0081E995 /* SocketEmitTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SocketEmitTest.swift; sourceTree = ""; }; + 94ADAC481B652D3300FD79AE /* SocketNamespaceEmitTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SocketNamespaceEmitTest.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -178,6 +180,7 @@ children = ( 945B65421B63D9DB0081E995 /* SocketEmitTest.swift */, 572EF2291B51F16C00EEBB58 /* Supporting Files */, + 94ADAC481B652D3300FD79AE /* SocketNamespaceEmitTest.swift */, ); path = "SocketIO-iOSTests"; sourceTree = ""; @@ -450,6 +453,7 @@ 945B65361B5FCEEA0081E995 /* SocketAnyEvent.swift in Sources */, 945B653F1B5FCEEA0081E995 /* SocketTypes.swift in Sources */, 945B653B1B5FCEEA0081E995 /* SocketIOClient.swift in Sources */, + 94ADAC491B652D3300FD79AE /* SocketNamespaceEmitTest.swift in Sources */, 945B65411B5FCEEA0081E995 /* WebSocket.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/SocketIO-iOSTests/SocketEmitTest.swift b/SocketIO-iOSTests/SocketEmitTest.swift index d2866d6..d669070 100644 --- a/SocketIO-iOSTests/SocketEmitTest.swift +++ b/SocketIO-iOSTests/SocketEmitTest.swift @@ -39,7 +39,7 @@ class SocketEmitTest: XCTestCase { } override func tearDown() { - + socket.close(fast: false) super.tearDown() } diff --git a/SocketIO-iOSTests/SocketNamespaceEmitTest.swift b/SocketIO-iOSTests/SocketNamespaceEmitTest.swift new file mode 100644 index 0000000..8e50c11 --- /dev/null +++ b/SocketIO-iOSTests/SocketNamespaceEmitTest.swift @@ -0,0 +1,89 @@ +// +// SocketNamespaceEmitTest.swift +// Socket.IO-Client-Swift +// +// Created by Lukas Schmidt on 26.07.15. +// +// + +import XCTest + +class SocketNamespaceEmitTest: SocketEmitTest { + + override func setUp() { + super.setUp() + if testCytube { + socket = SocketIOClient(socketURL: "https://cytu.be:10443", opts: [ + "forcePolling": false, + "forceWebsockets": false, + "log": true + ]) + } else { + socket = SocketIOClient(socketURL: "127.0.0.1:8080", opts: [ + "reconnects": true, // default true + "reconnectAttempts": -1, // default -1 + "reconnectWait": 5, // default 10 + "forcePolling": false, + "forceWebsockets": false,// default false + "path": "", + "nsp": "/swift", + "extraHeaders": headers]) + } + openConnection() + + } + + override func tearDown() { + socket.close(fast: false) + super.tearDown() + } + + override func testConnectionStatus() { + super.testConnectionStatus() + } + + override func testEmit() { + super.testEmit() + } + + override func testEmitNull() { + super.testEmitNull() + } + + override func testEmitBinary() { + super.testEmitBinary() + } + + override func testArrayEmit() { + super.testArrayEmit() + } + + override func testStringEmit() { + super.testStringEmit() + } + + override func testBoolEmit() { + super.testBoolEmit() + } + + override func testIntegerEmit() { + super.testIntegerEmit() + } + + override func testDoubleEmit() { + super.testDoubleEmit() + } + + override func testJSONEmit() { + super.testJSONEmit() + } + + override func testUnicodeEmit() { + super.testUnicodeEmit() + } + + override func testMultipleItemsEmit() { + super.testMultipleItemsEmit() + } + +} From 252181b0c5428d3357bcff6856a4d7adb4129994 Mon Sep 17 00:00:00 2001 From: Lukas Schmidt Date: Mon, 27 Jul 2015 11:33:41 +0200 Subject: [PATCH 07/15] clean up --- .../project.pbxproj | 2 +- SocketIO-iOSTests/SocketEmitTest.swift | 25 ++++++------------- 2 files changed, 9 insertions(+), 18 deletions(-) diff --git a/Socket.IO-Client-Swift.xcodeproj/project.pbxproj b/Socket.IO-Client-Swift.xcodeproj/project.pbxproj index 041d1bb..c3dc8fc 100644 --- a/Socket.IO-Client-Swift.xcodeproj/project.pbxproj +++ b/Socket.IO-Client-Swift.xcodeproj/project.pbxproj @@ -179,8 +179,8 @@ isa = PBXGroup; children = ( 945B65421B63D9DB0081E995 /* SocketEmitTest.swift */, - 572EF2291B51F16C00EEBB58 /* Supporting Files */, 94ADAC481B652D3300FD79AE /* SocketNamespaceEmitTest.swift */, + 572EF2291B51F16C00EEBB58 /* Supporting Files */, ); path = "SocketIO-iOSTests"; sourceTree = ""; diff --git a/SocketIO-iOSTests/SocketEmitTest.swift b/SocketIO-iOSTests/SocketEmitTest.swift index d669070..1e599c5 100644 --- a/SocketIO-iOSTests/SocketEmitTest.swift +++ b/SocketIO-iOSTests/SocketEmitTest.swift @@ -15,26 +15,17 @@ class SocketEmitTest: XCTestCase { let headers = ["testing": "blah", "testing2": "b/:lah"] - let testCytube = false override func setUp() { super.setUp() - if testCytube { - socket = SocketIOClient(socketURL: "https://cytu.be:10443", opts: [ - "forcePolling": false, - "forceWebsockets": false, - "log": true - ]) - } else { - socket = SocketIOClient(socketURL: "127.0.0.1:8080", opts: [ - "reconnects": true, // default true - "reconnectAttempts": -1, // default -1 - "reconnectWait": 5, // default 10 - "forcePolling": false, - "forceWebsockets": false,// default false - "path": "", - "extraHeaders": headers]) - } + socket = SocketIOClient(socketURL: "127.0.0.1:8080", opts: [ + "reconnects": true, // default true + "reconnectAttempts": -1, // default -1 + "reconnectWait": 5, // default 10 + "forcePolling": false, + "forceWebsockets": false,// default false + "path": "", + "extraHeaders": headers]) openConnection() } From b1b9a7edaf273ad28fbde9748b5a714aed48beef Mon Sep 17 00:00:00 2001 From: Lukas Schmidt Date: Tue, 28 Jul 2015 14:25:15 +0200 Subject: [PATCH 08/15] more tests --- .../project.pbxproj | 8 ++ .../SocketAcknowledgementTest.swift | 93 +++++++++++++++++++ SocketIO-iOSTests/SocketEmitTest.swift | 37 ++++---- .../SocketNamespaceEmitTest.swift | 9 -- SocketIO-iOSTests/TestKind.swift | 13 +++ 5 files changed, 133 insertions(+), 27 deletions(-) create mode 100644 SocketIO-iOSTests/SocketAcknowledgementTest.swift create mode 100644 SocketIO-iOSTests/TestKind.swift diff --git a/Socket.IO-Client-Swift.xcodeproj/project.pbxproj b/Socket.IO-Client-Swift.xcodeproj/project.pbxproj index c3dc8fc..03e8493 100644 --- a/Socket.IO-Client-Swift.xcodeproj/project.pbxproj +++ b/Socket.IO-Client-Swift.xcodeproj/project.pbxproj @@ -38,6 +38,7 @@ 5764DFA01B51F254004FF46E /* SwiftRegex.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5764DF871B51F254004FF46E /* SwiftRegex.swift */; }; 5764DFA11B51F254004FF46E /* WebSocket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5764DF881B51F254004FF46E /* WebSocket.swift */; }; 5764DFA21B51F254004FF46E /* WebSocket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5764DF881B51F254004FF46E /* WebSocket.swift */; }; + 941A4ABA1B67A56C00C42318 /* TestKind.swift in Sources */ = {isa = PBXBuildFile; fileRef = 941A4AB91B67A56C00C42318 /* TestKind.swift */; }; 945B65351B5FCEEA0081E995 /* SocketAckManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5764DF7C1B51F254004FF46E /* SocketAckManager.swift */; }; 945B65361B5FCEEA0081E995 /* SocketAnyEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5764DF7D1B51F254004FF46E /* SocketAnyEvent.swift */; }; 945B65371B5FCEEA0081E995 /* SocketEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5764DF7E1B51F254004FF46E /* SocketEngine.swift */; }; @@ -53,6 +54,7 @@ 945B65411B5FCEEA0081E995 /* WebSocket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5764DF881B51F254004FF46E /* WebSocket.swift */; }; 945B65431B63D9DB0081E995 /* SocketEmitTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 945B65421B63D9DB0081E995 /* SocketEmitTest.swift */; }; 94ADAC491B652D3300FD79AE /* SocketNamespaceEmitTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94ADAC481B652D3300FD79AE /* SocketNamespaceEmitTest.swift */; }; + 94ADAC4B1B6632DD00FD79AE /* SocketAcknowledgementTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94ADAC4A1B6632DD00FD79AE /* SocketAcknowledgementTest.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -97,8 +99,10 @@ 5764DF861B51F254004FF46E /* SocketTypes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SocketTypes.swift; path = SocketIOClientSwift/SocketTypes.swift; sourceTree = ""; }; 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 = ""; }; + 941A4AB91B67A56C00C42318 /* TestKind.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestKind.swift; sourceTree = ""; }; 945B65421B63D9DB0081E995 /* SocketEmitTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SocketEmitTest.swift; sourceTree = ""; }; 94ADAC481B652D3300FD79AE /* SocketNamespaceEmitTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SocketNamespaceEmitTest.swift; sourceTree = ""; }; + 94ADAC4A1B6632DD00FD79AE /* SocketAcknowledgementTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SocketAcknowledgementTest.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -180,7 +184,9 @@ children = ( 945B65421B63D9DB0081E995 /* SocketEmitTest.swift */, 94ADAC481B652D3300FD79AE /* SocketNamespaceEmitTest.swift */, + 94ADAC4A1B6632DD00FD79AE /* SocketAcknowledgementTest.swift */, 572EF2291B51F16C00EEBB58 /* Supporting Files */, + 941A4AB91B67A56C00C42318 /* TestKind.swift */, ); path = "SocketIO-iOSTests"; sourceTree = ""; @@ -446,11 +452,13 @@ 945B65391B5FCEEA0081E995 /* SocketEventHandler.swift in Sources */, 945B65371B5FCEEA0081E995 /* SocketEngine.swift in Sources */, 945B65351B5FCEEA0081E995 /* SocketAckManager.swift in Sources */, + 941A4ABA1B67A56C00C42318 /* TestKind.swift in Sources */, 945B65431B63D9DB0081E995 /* SocketEmitTest.swift in Sources */, 945B65401B5FCEEA0081E995 /* SwiftRegex.swift in Sources */, 945B653C1B5FCEEA0081E995 /* SocketLogger.swift in Sources */, 945B65381B5FCEEA0081E995 /* SocketEngineClient.swift in Sources */, 945B65361B5FCEEA0081E995 /* SocketAnyEvent.swift in Sources */, + 94ADAC4B1B6632DD00FD79AE /* SocketAcknowledgementTest.swift in Sources */, 945B653F1B5FCEEA0081E995 /* SocketTypes.swift in Sources */, 945B653B1B5FCEEA0081E995 /* SocketIOClient.swift in Sources */, 94ADAC491B652D3300FD79AE /* SocketNamespaceEmitTest.swift in Sources */, diff --git a/SocketIO-iOSTests/SocketAcknowledgementTest.swift b/SocketIO-iOSTests/SocketAcknowledgementTest.swift new file mode 100644 index 0000000..e8f6633 --- /dev/null +++ b/SocketIO-iOSTests/SocketAcknowledgementTest.swift @@ -0,0 +1,93 @@ +// +// SocketAcknowledgementTest.swift +// Socket.IO-Client-Swift +// +// Created by Lukas Schmidt on 27.07.15. +// +// + +import XCTest + +class SocketAcknowledgementTest: SocketEmitTest { + override func setUp() { + super.setUp() + testKind = TestKind.Acknowledgement + socket = SocketIOClient(socketURL: "127.0.0.1:8080", opts: [ + "reconnects": true, // default true + "reconnectAttempts": -1, // default -1 + "reconnectWait": 5, // default 10 + "forcePolling": false, + "forceWebsockets": false,// default false + "path": "", + "nsp": "/swift", + "extraHeaders": headers]) + openConnection() + } + + override func testConnectionStatus() { + super.testConnectionStatus() + } + + override func testEmit() { + super.testEmit() + } + + override func testEmitNull() { + super.testEmitNull() + } + + override func testEmitBinary() { + super.testEmitBinary() + } + + override func testArrayEmit() { + super.testArrayEmit() + } + + override func testStringEmit() { + super.testStringEmit() + } + + override func testBoolEmit() { + super.testBoolEmit() + } + + override func testIntegerEmit() { + super.testIntegerEmit() + } + + override func testDoubleEmit() { + super.testDoubleEmit() + } + + override func testJSONEmit() { + super.testJSONEmit() + } + + override func testUnicodeEmit() { + super.testUnicodeEmit() + } + + override func testMultipleItemsEmit() { + super.testMultipleItemsEmit() + } + + override func abstractSocketEmitTest(testName:String, emitData:AnyObject?, callback:NormalCallback){ + let finalTestname = testName + testKind.rawValue + let expection = self.expectationWithDescription(finalTestname) + func didGetEmit(result:NSArray?) { + callback(result, nil) + expection.fulfill() + } + var ack:OnAckCallback! + if let emitData = emitData { + ack = socket.emitWithAck(finalTestname, emitData) + } else { + ack = socket.emitWithAck(finalTestname) + } + ack(timeoutAfter: 20, callback: didGetEmit) + + waitForExpectationsWithTimeout(SocketEmitTest.TEST_TIMEOUT, handler: nil) + } + +} diff --git a/SocketIO-iOSTests/SocketEmitTest.swift b/SocketIO-iOSTests/SocketEmitTest.swift index 1e599c5..f6a16d2 100644 --- a/SocketIO-iOSTests/SocketEmitTest.swift +++ b/SocketIO-iOSTests/SocketEmitTest.swift @@ -10,11 +10,10 @@ import XCTest import Foundation class SocketEmitTest: XCTestCase { - private static let TEST_TIMEOUT = 20.0 + static let TEST_TIMEOUT = 5.0 var socket:SocketIOClient! - - let headers = ["testing": "blah", "testing2": "b/:lah"] + var testKind = TestKind.Emit override func setUp() { super.setUp() @@ -53,7 +52,7 @@ class SocketEmitTest: XCTestCase { } func testEmit() { - let testName = "testEmit" + let testName = "basicTest" func didGetEmit(result:NSArray?, ack:AckEmitter?) { } @@ -61,7 +60,7 @@ class SocketEmitTest: XCTestCase { } func testEmitNull() { - let testName = "testEmitNull" + let testName = "testNull" func didGetEmit(result:NSArray?, ack:AckEmitter?) { if let _ = result?.firstObject as? NSNull { @@ -74,7 +73,7 @@ class SocketEmitTest: XCTestCase { } func testEmitBinary() { - let testName = "testEmitBinary" + let testName = "testBinary" func didGetEmit(result:NSArray?, ack:AckEmitter?) { if let data = result?.firstObject as? NSData { let string = NSString(data: data, encoding: NSUTF8StringEncoding)! @@ -88,11 +87,12 @@ class SocketEmitTest: XCTestCase { } func testArrayEmit() { - let testName = "testEmitArray" + let testName = "testArray" func didGetEmit(result:NSArray?, ack:AckEmitter?) { if let array = result?.firstObject as? NSArray { XCTAssertEqual(array.count, 2) XCTAssertEqual(array.firstObject! as! String, "test3") + XCTAssertEqual(array.lastObject! as! String, "test4") }else { XCTFail("Should have NSArray as result") } @@ -101,7 +101,7 @@ class SocketEmitTest: XCTestCase { } func testStringEmit() { - let testName = "testStringEmit" + let testName = "testString" func didGetEmit(result:NSArray?, ack:AckEmitter?) { if let string = result?.firstObject as? String { XCTAssertEqual(string, "polo") @@ -113,7 +113,7 @@ class SocketEmitTest: XCTestCase { } func testBoolEmit() { - let testName = "testBoolEmit" + let testName = "testBool" func didGetEmit(result:NSArray?, ack:AckEmitter?) { if let bool = result?.firstObject as? NSNumber { XCTAssertTrue(bool.boolValue) @@ -125,7 +125,7 @@ class SocketEmitTest: XCTestCase { } func testIntegerEmit() { - let testName = "testIntegerEmit" + let testName = "testInteger" func didGetEmit(result:NSArray?, ack:AckEmitter?) { if let integer = result?.firstObject as? Int { XCTAssertEqual(integer, 20) @@ -137,7 +137,7 @@ class SocketEmitTest: XCTestCase { } func testDoubleEmit() { - let testName = "testDoubleEmit" + let testName = "testDouble" func didGetEmit(result:NSArray?, ack:AckEmitter?) { if let double = result?.firstObject as? NSNumber { XCTAssertEqual(double.floatValue, 1.2) @@ -149,7 +149,7 @@ class SocketEmitTest: XCTestCase { } func testJSONEmit() { - let testName = "testJSONEmit" + let testName = "testJSON" func didGetEmit(result:NSArray?, ack:AckEmitter?) { if let json = result?.firstObject as? NSDictionary { XCTAssertEqual(json.valueForKey("testString")! as! String, "test") @@ -168,7 +168,7 @@ class SocketEmitTest: XCTestCase { } func testUnicodeEmit() { - let testName = "testUnicodeEmit" + let testName = "testUnicode" func didGetEmit(result:NSArray?, ack:AckEmitter?) { if let unicode = result?.firstObject as? String { XCTAssertEqual(unicode, "🚄") @@ -180,7 +180,7 @@ class SocketEmitTest: XCTestCase { } func testMultipleItemsEmit() { - let testName = "testMultipleItemsEmit" + let testName = "testMultipleItems" let expection = self.expectationWithDescription(testName) func didGetEmit(result:NSArray?, ack:AckEmitter?) { XCTAssertEqual(result!.count, 5) @@ -225,17 +225,18 @@ class SocketEmitTest: XCTestCase { func abstractSocketEmitTest(testName:String, emitData:AnyObject?, callback:NormalCallback){ - let expection = self.expectationWithDescription(testName) + let finalTestname = testName + testKind.rawValue + let expection = self.expectationWithDescription(finalTestname) func didGetEmit(result:NSArray?, ack:AckEmitter?) { callback(result, ack) expection.fulfill() } - socket.on(testName + "Return", callback: didGetEmit) + socket.on(finalTestname + "Return", callback: didGetEmit) if let emitData = emitData { - socket.emit(testName, emitData) + socket.emit(finalTestname, emitData) } else { - socket.emit(testName) + socket.emit(finalTestname) } waitForExpectationsWithTimeout(SocketEmitTest.TEST_TIMEOUT, handler: nil) diff --git a/SocketIO-iOSTests/SocketNamespaceEmitTest.swift b/SocketIO-iOSTests/SocketNamespaceEmitTest.swift index 8e50c11..945a242 100644 --- a/SocketIO-iOSTests/SocketNamespaceEmitTest.swift +++ b/SocketIO-iOSTests/SocketNamespaceEmitTest.swift @@ -12,13 +12,6 @@ class SocketNamespaceEmitTest: SocketEmitTest { override func setUp() { super.setUp() - if testCytube { - socket = SocketIOClient(socketURL: "https://cytu.be:10443", opts: [ - "forcePolling": false, - "forceWebsockets": false, - "log": true - ]) - } else { socket = SocketIOClient(socketURL: "127.0.0.1:8080", opts: [ "reconnects": true, // default true "reconnectAttempts": -1, // default -1 @@ -28,9 +21,7 @@ class SocketNamespaceEmitTest: SocketEmitTest { "path": "", "nsp": "/swift", "extraHeaders": headers]) - } openConnection() - } override func tearDown() { diff --git a/SocketIO-iOSTests/TestKind.swift b/SocketIO-iOSTests/TestKind.swift new file mode 100644 index 0000000..d83c59b --- /dev/null +++ b/SocketIO-iOSTests/TestKind.swift @@ -0,0 +1,13 @@ +// +// TestKind.swift +// Socket.IO-Client-Swift +// +// Created by Lukas Schmidt on 28.07.15. +// +// + +import Foundation + +enum TestKind: String { + case Emit, Acknowledgement +} \ No newline at end of file From 30cf2bb67a53fe0783b1e271981f6d5fdd2b0b8a Mon Sep 17 00:00:00 2001 From: Lukas Schmidt Date: Tue, 28 Jul 2015 14:46:30 +0200 Subject: [PATCH 09/15] namespace tests --- .../project.pbxproj | 8 +- .../SocketAcknowledgementTest.swift | 3 +- SocketIO-iOSTests/SocketEmitTest.swift | 47 +++++---- .../SocketNamespaceAcknowledgementTest.swift | 95 +++++++++++++++++++ 4 files changed, 133 insertions(+), 20 deletions(-) create mode 100644 SocketIO-iOSTests/SocketNamespaceAcknowledgementTest.swift diff --git a/Socket.IO-Client-Swift.xcodeproj/project.pbxproj b/Socket.IO-Client-Swift.xcodeproj/project.pbxproj index 03e8493..de8ab5f 100644 --- a/Socket.IO-Client-Swift.xcodeproj/project.pbxproj +++ b/Socket.IO-Client-Swift.xcodeproj/project.pbxproj @@ -39,6 +39,7 @@ 5764DFA11B51F254004FF46E /* WebSocket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5764DF881B51F254004FF46E /* WebSocket.swift */; }; 5764DFA21B51F254004FF46E /* WebSocket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5764DF881B51F254004FF46E /* WebSocket.swift */; }; 941A4ABA1B67A56C00C42318 /* TestKind.swift in Sources */ = {isa = PBXBuildFile; fileRef = 941A4AB91B67A56C00C42318 /* TestKind.swift */; }; + 94242BB81B67B0E500AAAC9D /* SocketNamespaceAcknowledgementTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94242BB71B67B0E500AAAC9D /* SocketNamespaceAcknowledgementTest.swift */; }; 945B65351B5FCEEA0081E995 /* SocketAckManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5764DF7C1B51F254004FF46E /* SocketAckManager.swift */; }; 945B65361B5FCEEA0081E995 /* SocketAnyEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5764DF7D1B51F254004FF46E /* SocketAnyEvent.swift */; }; 945B65371B5FCEEA0081E995 /* SocketEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5764DF7E1B51F254004FF46E /* SocketEngine.swift */; }; @@ -100,6 +101,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 = ""; }; 941A4AB91B67A56C00C42318 /* TestKind.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestKind.swift; sourceTree = ""; }; + 94242BB71B67B0E500AAAC9D /* SocketNamespaceAcknowledgementTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SocketNamespaceAcknowledgementTest.swift; sourceTree = ""; }; 945B65421B63D9DB0081E995 /* SocketEmitTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SocketEmitTest.swift; sourceTree = ""; }; 94ADAC481B652D3300FD79AE /* SocketNamespaceEmitTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SocketNamespaceEmitTest.swift; sourceTree = ""; }; 94ADAC4A1B6632DD00FD79AE /* SocketAcknowledgementTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SocketAcknowledgementTest.swift; sourceTree = ""; }; @@ -183,10 +185,11 @@ isa = PBXGroup; children = ( 945B65421B63D9DB0081E995 /* SocketEmitTest.swift */, - 94ADAC481B652D3300FD79AE /* SocketNamespaceEmitTest.swift */, 94ADAC4A1B6632DD00FD79AE /* SocketAcknowledgementTest.swift */, - 572EF2291B51F16C00EEBB58 /* Supporting Files */, + 94ADAC481B652D3300FD79AE /* SocketNamespaceEmitTest.swift */, + 94242BB71B67B0E500AAAC9D /* SocketNamespaceAcknowledgementTest.swift */, 941A4AB91B67A56C00C42318 /* TestKind.swift */, + 572EF2291B51F16C00EEBB58 /* Supporting Files */, ); path = "SocketIO-iOSTests"; sourceTree = ""; @@ -463,6 +466,7 @@ 945B653B1B5FCEEA0081E995 /* SocketIOClient.swift in Sources */, 94ADAC491B652D3300FD79AE /* SocketNamespaceEmitTest.swift in Sources */, 945B65411B5FCEEA0081E995 /* WebSocket.swift in Sources */, + 94242BB81B67B0E500AAAC9D /* SocketNamespaceAcknowledgementTest.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/SocketIO-iOSTests/SocketAcknowledgementTest.swift b/SocketIO-iOSTests/SocketAcknowledgementTest.swift index e8f6633..81247d9 100644 --- a/SocketIO-iOSTests/SocketAcknowledgementTest.swift +++ b/SocketIO-iOSTests/SocketAcknowledgementTest.swift @@ -19,7 +19,6 @@ class SocketAcknowledgementTest: SocketEmitTest { "forcePolling": false, "forceWebsockets": false,// default false "path": "", - "nsp": "/swift", "extraHeaders": headers]) openConnection() } @@ -72,7 +71,7 @@ class SocketAcknowledgementTest: SocketEmitTest { super.testMultipleItemsEmit() } - override func abstractSocketEmitTest(testName:String, emitData:AnyObject?, callback:NormalCallback){ + override func abstractSocketEmit(testName:String, emitData:AnyObject?, callback:NormalCallback){ let finalTestname = testName + testKind.rawValue let expection = self.expectationWithDescription(finalTestname) func didGetEmit(result:NSArray?) { diff --git a/SocketIO-iOSTests/SocketEmitTest.swift b/SocketIO-iOSTests/SocketEmitTest.swift index f6a16d2..7516224 100644 --- a/SocketIO-iOSTests/SocketEmitTest.swift +++ b/SocketIO-iOSTests/SocketEmitTest.swift @@ -56,7 +56,7 @@ class SocketEmitTest: XCTestCase { func didGetEmit(result:NSArray?, ack:AckEmitter?) { } - abstractSocketEmitTest(testName, emitData: nil, callback: didGetEmit) + abstractSocketEmit(testName, emitData: nil, callback: didGetEmit) } func testEmitNull() { @@ -69,7 +69,7 @@ class SocketEmitTest: XCTestCase { XCTFail("Should have NSNull as result") } } - abstractSocketEmitTest(testName, emitData: NSNull(), callback: didGetEmit) + abstractSocketEmit(testName, emitData: NSNull(), callback: didGetEmit) } func testEmitBinary() { @@ -83,7 +83,7 @@ class SocketEmitTest: XCTestCase { } } let data = NSString(string: "gakgakgak2").dataUsingEncoding(NSUTF8StringEncoding)! - abstractSocketEmitTest(testName, emitData: data, callback: didGetEmit) + abstractSocketEmit(testName, emitData: data, callback: didGetEmit) } func testArrayEmit() { @@ -97,7 +97,7 @@ class SocketEmitTest: XCTestCase { XCTFail("Should have NSArray as result") } } - abstractSocketEmitTest(testName, emitData: ["test1", "test2"], callback: didGetEmit) + abstractSocketEmit(testName, emitData: ["test1", "test2"], callback: didGetEmit) } func testStringEmit() { @@ -109,7 +109,7 @@ class SocketEmitTest: XCTestCase { XCTFail("Should have String as result") } } - abstractSocketEmitTest(testName, emitData: "marco", callback: didGetEmit) + abstractSocketEmit(testName, emitData: "marco", callback: didGetEmit) } func testBoolEmit() { @@ -121,7 +121,7 @@ class SocketEmitTest: XCTestCase { XCTFail("Should have Boolean as result") } } - abstractSocketEmitTest(testName, emitData: false, callback: didGetEmit) + abstractSocketEmit(testName, emitData: false, callback: didGetEmit) } func testIntegerEmit() { @@ -133,7 +133,7 @@ class SocketEmitTest: XCTestCase { XCTFail("Should have Integer as result") } } - abstractSocketEmitTest(testName, emitData: 10, callback: didGetEmit) + abstractSocketEmit(testName, emitData: 10, callback: didGetEmit) } func testDoubleEmit() { @@ -145,7 +145,7 @@ class SocketEmitTest: XCTestCase { XCTFail("Should have Double as result") } } - abstractSocketEmitTest(testName, emitData: 1.1, callback: didGetEmit) + abstractSocketEmit(testName, emitData: 1.1, callback: didGetEmit) } func testJSONEmit() { @@ -164,7 +164,7 @@ class SocketEmitTest: XCTestCase { } let json = ["name": "test", "testArray": ["hallo"], "nestedTest": ["test": "test"], "number": 15] - abstractSocketEmitTest(testName, emitData: json, callback: didGetEmit) + abstractSocketEmit(testName, emitData: json, callback: didGetEmit) } func testUnicodeEmit() { @@ -176,12 +176,11 @@ class SocketEmitTest: XCTestCase { XCTFail("Should have String as result") } } - abstractSocketEmitTest(testName, emitData: "🚀", callback: didGetEmit) + abstractSocketEmit(testName, emitData: "🚀", callback: didGetEmit) } func testMultipleItemsEmit() { let testName = "testMultipleItems" - let expection = self.expectationWithDescription(testName) func didGetEmit(result:NSArray?, ack:AckEmitter?) { XCTAssertEqual(result!.count, 5) if let array = result?.firstObject as? Array { @@ -215,17 +214,33 @@ class SocketEmitTest: XCTestCase { }else { XCTFail("Should have NSData as result") } - expection.fulfill() } let data = NSString(string: "gakgakgak2").dataUsingEncoding(NSUTF8StringEncoding)! - socket.emit(testName, withItems: [["test1", "test2"], ["test": "test"], 15, "marco", data]) - socket.on(testName + "Return", callback: didGetEmit) + let emitArray = [["test1", "test2"], ["test": "test"], 15, "marco", data] + abstractSocketMultipleEmit(testName, emitData: emitArray, callback: didGetEmit) + } + + func generateTestName(rawTestName:String) ->String { + return rawTestName + testKind.rawValue + } + + func abstractSocketMultipleEmit(testName:String, emitData:Array, callback:NormalCallback){ + let finalTestname = generateTestName(testName) + let expection = self.expectationWithDescription(finalTestname) + func didGetEmit(result:NSArray?, ack:AckEmitter?) { + callback(result, ack) + expection.fulfill() + } + + socket.emit(finalTestname, withItems: emitData) + socket.on(finalTestname + "Return", callback: didGetEmit) waitForExpectationsWithTimeout(SocketEmitTest.TEST_TIMEOUT, handler: nil) + } - func abstractSocketEmitTest(testName:String, emitData:AnyObject?, callback:NormalCallback){ - let finalTestname = testName + testKind.rawValue + func abstractSocketEmit(testName:String, emitData:AnyObject?, callback:NormalCallback){ + let finalTestname = generateTestName(testName) let expection = self.expectationWithDescription(finalTestname) func didGetEmit(result:NSArray?, ack:AckEmitter?) { callback(result, ack) diff --git a/SocketIO-iOSTests/SocketNamespaceAcknowledgementTest.swift b/SocketIO-iOSTests/SocketNamespaceAcknowledgementTest.swift new file mode 100644 index 0000000..318ba76 --- /dev/null +++ b/SocketIO-iOSTests/SocketNamespaceAcknowledgementTest.swift @@ -0,0 +1,95 @@ +// +// SocketNamespaceAcknowledgementTest.swift +// Socket.IO-Client-Swift +// +// Created by Lukas Schmidt on 28.07.15. +// +// + +import XCTest + +class SocketNamespaceAcknowledgementTest: SocketEmitTest { + + override func setUp() { + super.setUp() + testKind = TestKind.Acknowledgement + socket = SocketIOClient(socketURL: "127.0.0.1:8080", opts: [ + "reconnects": true, // default true + "reconnectAttempts": -1, // default -1 + "reconnectWait": 5, // default 10 + "forcePolling": false, + "forceWebsockets": false,// default false + "path": "", + "nsp": "/swift", + "extraHeaders": headers]) + openConnection() + } + + override func testConnectionStatus() { + super.testConnectionStatus() + } + + override func testEmit() { + super.testEmit() + } + + override func testEmitNull() { + super.testEmitNull() + } + + override func testEmitBinary() { + super.testEmitBinary() + } + + override func testArrayEmit() { + super.testArrayEmit() + } + + override func testStringEmit() { + super.testStringEmit() + } + + override func testBoolEmit() { + super.testBoolEmit() + } + + override func testIntegerEmit() { + super.testIntegerEmit() + } + + override func testDoubleEmit() { + super.testDoubleEmit() + } + + override func testJSONEmit() { + super.testJSONEmit() + } + + override func testUnicodeEmit() { + super.testUnicodeEmit() + } + + override func testMultipleItemsEmit() { + super.testMultipleItemsEmit() + } + + override func abstractSocketEmit(testName:String, emitData:AnyObject?, callback:NormalCallback){ + let finalTestname = testName + testKind.rawValue + let expection = self.expectationWithDescription(finalTestname) + func didGetEmit(result:NSArray?) { + callback(result, nil) + expection.fulfill() + } + var ack:OnAckCallback! + if let emitData = emitData { + ack = socket.emitWithAck(finalTestname, emitData) + } else { + ack = socket.emitWithAck(finalTestname) + } + ack(timeoutAfter: 20, callback: didGetEmit) + + waitForExpectationsWithTimeout(SocketEmitTest.TEST_TIMEOUT, handler: nil) + } + + +} From 79848b1ce07a4a8825657a521b813cac78c203f6 Mon Sep 17 00:00:00 2001 From: Lukas Schmidt Date: Tue, 28 Jul 2015 16:15:12 +0200 Subject: [PATCH 10/15] cleanup --- .../SocketAcknowledgementTest.swift | 13 +++++++++++ SocketIO-iOSTests/SocketEmitTest.swift | 5 ++--- .../SocketNamespaceAcknowledgementTest.swift | 22 +------------------ 3 files changed, 16 insertions(+), 24 deletions(-) diff --git a/SocketIO-iOSTests/SocketAcknowledgementTest.swift b/SocketIO-iOSTests/SocketAcknowledgementTest.swift index 81247d9..733ef74 100644 --- a/SocketIO-iOSTests/SocketAcknowledgementTest.swift +++ b/SocketIO-iOSTests/SocketAcknowledgementTest.swift @@ -71,6 +71,19 @@ class SocketAcknowledgementTest: SocketEmitTest { super.testMultipleItemsEmit() } + override func abstractSocketMultipleEmit(testName:String, emitData:Array, callback:NormalCallback){ + let finalTestname = generateTestName(testName) + let expection = self.expectationWithDescription(finalTestname) + func didGetEmit(result:NSArray?) { + callback(result, nil) + expection.fulfill() + } + + socket.emitWithAck(finalTestname, withItems: emitData)(timeoutAfter: 5, callback: didGetEmit) + waitForExpectationsWithTimeout(SocketEmitTest.TEST_TIMEOUT, handler: nil) + + } + override func abstractSocketEmit(testName:String, emitData:AnyObject?, callback:NormalCallback){ let finalTestname = testName + testKind.rawValue let expection = self.expectationWithDescription(finalTestname) diff --git a/SocketIO-iOSTests/SocketEmitTest.swift b/SocketIO-iOSTests/SocketEmitTest.swift index 7516224..48a43f7 100644 --- a/SocketIO-iOSTests/SocketEmitTest.swift +++ b/SocketIO-iOSTests/SocketEmitTest.swift @@ -10,7 +10,7 @@ import XCTest import Foundation class SocketEmitTest: XCTestCase { - static let TEST_TIMEOUT = 5.0 + static let TEST_TIMEOUT = 15.0 var socket:SocketIOClient! let headers = ["testing": "blah", "testing2": "b/:lah"] var testKind = TestKind.Emit @@ -185,8 +185,7 @@ class SocketEmitTest: XCTestCase { XCTAssertEqual(result!.count, 5) if let array = result?.firstObject as? Array { XCTAssertEqual(array.last! as! Int, 2) - let string = NSString(data: array.first! as! NSData, encoding: NSUTF8StringEncoding)! - XCTAssertEqual(string, "gakgakgak2") + XCTAssertEqual(array.first! as! Int, 1) }else { XCTFail("Should have Array as result") } diff --git a/SocketIO-iOSTests/SocketNamespaceAcknowledgementTest.swift b/SocketIO-iOSTests/SocketNamespaceAcknowledgementTest.swift index 318ba76..a8d715e 100644 --- a/SocketIO-iOSTests/SocketNamespaceAcknowledgementTest.swift +++ b/SocketIO-iOSTests/SocketNamespaceAcknowledgementTest.swift @@ -8,7 +8,7 @@ import XCTest -class SocketNamespaceAcknowledgementTest: SocketEmitTest { +class SocketNamespaceAcknowledgementTest: SocketAcknowledgementTest { override func setUp() { super.setUp() @@ -72,24 +72,4 @@ class SocketNamespaceAcknowledgementTest: SocketEmitTest { override func testMultipleItemsEmit() { super.testMultipleItemsEmit() } - - override func abstractSocketEmit(testName:String, emitData:AnyObject?, callback:NormalCallback){ - let finalTestname = testName + testKind.rawValue - let expection = self.expectationWithDescription(finalTestname) - func didGetEmit(result:NSArray?) { - callback(result, nil) - expection.fulfill() - } - var ack:OnAckCallback! - if let emitData = emitData { - ack = socket.emitWithAck(finalTestname, emitData) - } else { - ack = socket.emitWithAck(finalTestname) - } - ack(timeoutAfter: 20, callback: didGetEmit) - - waitForExpectationsWithTimeout(SocketEmitTest.TEST_TIMEOUT, handler: nil) - } - - } From a0e30528933d4680db8205761af07d100925697a Mon Sep 17 00:00:00 2001 From: Lukas Schmidt Date: Tue, 28 Jul 2015 17:02:44 +0200 Subject: [PATCH 11/15] test server --- .gitignore | 2 + Socket.IO-Test-Server/TestCases.js | 78 +++++++++++++++++++ .../acknowledgementEvents.js | 10 +++ Socket.IO-Test-Server/emitEvents.js | 20 +++++ Socket.IO-Test-Server/main.js | 13 ++++ Socket.IO-Test-Server/package.json | 15 ++++ Socket.IO-Test-Server/socketEventRegister.js | 13 ++++ 7 files changed, 151 insertions(+) create mode 100644 Socket.IO-Test-Server/TestCases.js create mode 100644 Socket.IO-Test-Server/acknowledgementEvents.js create mode 100644 Socket.IO-Test-Server/emitEvents.js create mode 100644 Socket.IO-Test-Server/main.js create mode 100644 Socket.IO-Test-Server/package.json create mode 100644 Socket.IO-Test-Server/socketEventRegister.js diff --git a/.gitignore b/.gitignore index 8fcf4d1..2f7122e 100644 --- a/.gitignore +++ b/.gitignore @@ -42,3 +42,5 @@ DerivedData *.hmap *.ipa *.xcuserstate + +Socket.IO-Test-Server/node_modules/* diff --git a/Socket.IO-Test-Server/TestCases.js b/Socket.IO-Test-Server/TestCases.js new file mode 100644 index 0000000..f0fa660 --- /dev/null +++ b/Socket.IO-Test-Server/TestCases.js @@ -0,0 +1,78 @@ +var assert = require("assert") + +module.exports = { + basicTest: { + assert: function(inputData) { + + }, + returnData: [] + }, + testNull: { + assert: function(inputData) { + assert(!inputData) + }, + returnData: [null] + }, + testBinary: { + assert: function(inputData) { + assert.equal(inputData.toString(), "gakgakgak2") + }, + returnData: [new Buffer("gakgakgak2", "utf-8")] + }, + testArray: { + assert: function(inputData) { + assert.equal(inputData.length, 2) + assert.equal(inputData[0], "test1") + assert.equal(inputData[1], "test2") + }, + returnData: [["test3", "test4"]] + }, + testString: { + assert: function(inputData) { + assert.equal(inputData, "marco") + }, + returnData: ["polo"] + }, + testBool: { + assert: function(inputData) { + assert(!inputData) + }, + returnData: [true] + }, + testInteger: { + assert: function(inputData) { + assert.equal(inputData, 10) + }, + returnData: [20] + }, + testDouble: { + assert: function(inputData) { + assert.equal(inputData, 1.1) + }, + returnData: [1.2] + }, + testJSON: { + assert: function(inputData) { + assert.equal(inputData.name, "test") + assert.equal(inputData.nestedTest.test, "test") + assert.equal(inputData.testArray.length, 1) + }, + returnData: [{testString: "test", testNumber: 15, nestedTest: {test: "test"}, testArray: [new Buffer("gakgakgak2", "utf-8"), 1]}] + },testUnicode: { + assert: function(inputData) { + assert.equal(inputData, "🚀") + }, + returnData: ["🚄"] + },testMultipleItems: { + assert: function(array, object, number, string, binary) { + assert.equal(array.length, 2) + assert.equal(array[0], "test1") + assert.equal(array[1], "test2") + assert.equal(number, 15) + assert.equal(string, "marco") + assert.equal(binary.toString(), "gakgakgak2") + + }, + returnData: [[1, 2], {test: "bob"}, 25, "polo", new Buffer("gakgakgak2")] + }, +} \ No newline at end of file diff --git a/Socket.IO-Test-Server/acknowledgementEvents.js b/Socket.IO-Test-Server/acknowledgementEvents.js new file mode 100644 index 0000000..a4c2c9d --- /dev/null +++ b/Socket.IO-Test-Server/acknowledgementEvents.js @@ -0,0 +1,10 @@ +function socketCallback(testKey, socket, testCase) { + return function() { + testCase.assert.apply(undefined , arguments) + var emitArguments = testCase.returnData; + var ack = arguments[arguments.length - 1] + ack.apply(socket, emitArguments) + } +} + +module.exports.socketCallback = socketCallback diff --git a/Socket.IO-Test-Server/emitEvents.js b/Socket.IO-Test-Server/emitEvents.js new file mode 100644 index 0000000..14f9ce5 --- /dev/null +++ b/Socket.IO-Test-Server/emitEvents.js @@ -0,0 +1,20 @@ +function socketCallback(testKey, socket, testCase) { + return function() { + testCase.assert.apply(undefined , arguments) + + var emitArguments = addArrays([testKey + "EmitReturn"], testCase.returnData) + socket.emit.apply(socket, emitArguments) + } +} + +function addArrays(firstArray, secondArray) { + var length = secondArray.length + var i; + for(i = 0; i < length; i++) { + firstArray.push(secondArray[i]) + } + + return firstArray; +} + +module.exports.socketCallback = socketCallback \ No newline at end of file diff --git a/Socket.IO-Test-Server/main.js b/Socket.IO-Test-Server/main.js new file mode 100644 index 0000000..ae83f97 --- /dev/null +++ b/Socket.IO-Test-Server/main.js @@ -0,0 +1,13 @@ +var app = require('express')() +var server = app.listen(8080) +var io = require('socket.io')(server) +var acknowledgementsEvents = require("./acknowledgementEvents.js") +var emitEvents = require("./emitEvents.js") +var socketEventRegister = require("./socketEventRegister.js") + +socketEventRegister.register(io, emitEvents.socketCallback, "Emit") +socketEventRegister.register(io, acknowledgementsEvents.socketCallback, "Acknowledgement") + +var nsp = io.of("/swift") +socketEventRegister.register(nsp, emitEvents.socketCallback, "Emit") +socketEventRegister.register(nsp, acknowledgementsEvents.socketCallback, "Acknowledgement") diff --git a/Socket.IO-Test-Server/package.json b/Socket.IO-Test-Server/package.json new file mode 100644 index 0000000..a62aa0b --- /dev/null +++ b/Socket.IO-Test-Server/package.json @@ -0,0 +1,15 @@ +{ + "name": "socket.io-client-swift-test-server", + "version": "0.0.1", + "description": "A simple server to test aginst", + "main": "main.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "Lukas Schmidt", + "license": "MIT", + "dependencies": { + "express": "^4.13.1", + "socket.io": "^1.3.6" + } +} diff --git a/Socket.IO-Test-Server/socketEventRegister.js b/Socket.IO-Test-Server/socketEventRegister.js new file mode 100644 index 0000000..9e0c208 --- /dev/null +++ b/Socket.IO-Test-Server/socketEventRegister.js @@ -0,0 +1,13 @@ +var testCases = require("./TestCases.js") + +function registerSocketForEvents(ioSocket, socketCallback, testKind) { + ioSocket.on('connection', function(socket) { + var testCase; + for(testKey in testCases) { + testCase = testCases[testKey] + socket.on((testKey + testKind), socketCallback(testKey, socket, testCase)) + } + }) +} + +module.exports.register = registerSocketForEvents \ No newline at end of file From 4086ce7d75a30e011749e04efb065632d3e4b0c7 Mon Sep 17 00:00:00 2001 From: Lukas Schmidt Date: Sun, 2 Aug 2015 15:07:05 +0200 Subject: [PATCH 12/15] relocate test cases for better understanding --- .../project.pbxproj | 4 + Socket.IO-Test-Server/TestCases.js | 8 + .../SocketAcknowledgementTest.swift | 4 + SocketIO-iOSTests/SocketEmitTest.swift | 3 +- SocketIO-iOSTests/SocketTestCases.swift | 201 ++++++++++++++++++ 5 files changed, 219 insertions(+), 1 deletion(-) create mode 100644 SocketIO-iOSTests/SocketTestCases.swift diff --git a/Socket.IO-Client-Swift.xcodeproj/project.pbxproj b/Socket.IO-Client-Swift.xcodeproj/project.pbxproj index de8ab5f..05ec9e0 100644 --- a/Socket.IO-Client-Swift.xcodeproj/project.pbxproj +++ b/Socket.IO-Client-Swift.xcodeproj/project.pbxproj @@ -56,6 +56,7 @@ 945B65431B63D9DB0081E995 /* SocketEmitTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 945B65421B63D9DB0081E995 /* SocketEmitTest.swift */; }; 94ADAC491B652D3300FD79AE /* SocketNamespaceEmitTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94ADAC481B652D3300FD79AE /* SocketNamespaceEmitTest.swift */; }; 94ADAC4B1B6632DD00FD79AE /* SocketAcknowledgementTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94ADAC4A1B6632DD00FD79AE /* SocketAcknowledgementTest.swift */; }; + 94CB8F0B1B6E48B90019ED53 /* SocketTestCases.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94CB8F0A1B6E48B90019ED53 /* SocketTestCases.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -105,6 +106,7 @@ 945B65421B63D9DB0081E995 /* SocketEmitTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SocketEmitTest.swift; sourceTree = ""; }; 94ADAC481B652D3300FD79AE /* SocketNamespaceEmitTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SocketNamespaceEmitTest.swift; sourceTree = ""; }; 94ADAC4A1B6632DD00FD79AE /* SocketAcknowledgementTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SocketAcknowledgementTest.swift; sourceTree = ""; }; + 94CB8F0A1B6E48B90019ED53 /* SocketTestCases.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SocketTestCases.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -189,6 +191,7 @@ 94ADAC481B652D3300FD79AE /* SocketNamespaceEmitTest.swift */, 94242BB71B67B0E500AAAC9D /* SocketNamespaceAcknowledgementTest.swift */, 941A4AB91B67A56C00C42318 /* TestKind.swift */, + 94CB8F0A1B6E48B90019ED53 /* SocketTestCases.swift */, 572EF2291B51F16C00EEBB58 /* Supporting Files */, ); path = "SocketIO-iOSTests"; @@ -453,6 +456,7 @@ 945B653D1B5FCEEA0081E995 /* SocketPacket.swift in Sources */, 945B653A1B5FCEEA0081E995 /* SocketFixUTF8.swift in Sources */, 945B65391B5FCEEA0081E995 /* SocketEventHandler.swift in Sources */, + 94CB8F0B1B6E48B90019ED53 /* SocketTestCases.swift in Sources */, 945B65371B5FCEEA0081E995 /* SocketEngine.swift in Sources */, 945B65351B5FCEEA0081E995 /* SocketAckManager.swift in Sources */, 941A4ABA1B67A56C00C42318 /* TestKind.swift in Sources */, diff --git a/Socket.IO-Test-Server/TestCases.js b/Socket.IO-Test-Server/TestCases.js index f0fa660..c40ab2f 100644 --- a/Socket.IO-Test-Server/TestCases.js +++ b/Socket.IO-Test-Server/TestCases.js @@ -51,6 +51,14 @@ module.exports = { }, returnData: [1.2] }, + testJSONWithoutBuffer: { + assert: function(inputData) { + assert.equal(inputData.name, "test") + assert.equal(inputData.nestedTest.test, "test") + assert.equal(inputData.testArray.length, 1) + }, + returnData: [{testString: "test", testNumber: 15, nestedTest: {test: "test"}, testArray: [1, 1]}] + }, testJSON: { assert: function(inputData) { assert.equal(inputData.name, "test") diff --git a/SocketIO-iOSTests/SocketAcknowledgementTest.swift b/SocketIO-iOSTests/SocketAcknowledgementTest.swift index 733ef74..7c27622 100644 --- a/SocketIO-iOSTests/SocketAcknowledgementTest.swift +++ b/SocketIO-iOSTests/SocketAcknowledgementTest.swift @@ -63,6 +63,10 @@ class SocketAcknowledgementTest: SocketEmitTest { super.testJSONEmit() } + func testJSONWithoutBuffer() { + SocketTestCases.testJSONEmit(abstractSocketEmit, testKind: self.testKind) + } + override func testUnicodeEmit() { super.testUnicodeEmit() } diff --git a/SocketIO-iOSTests/SocketEmitTest.swift b/SocketIO-iOSTests/SocketEmitTest.swift index 48a43f7..cbdaeff 100644 --- a/SocketIO-iOSTests/SocketEmitTest.swift +++ b/SocketIO-iOSTests/SocketEmitTest.swift @@ -24,7 +24,8 @@ class SocketEmitTest: XCTestCase { "forcePolling": false, "forceWebsockets": false,// default false "path": "", - "extraHeaders": headers]) + "extraHeaders": headers] + ) openConnection() } diff --git a/SocketIO-iOSTests/SocketTestCases.swift b/SocketIO-iOSTests/SocketTestCases.swift new file mode 100644 index 0000000..53c4489 --- /dev/null +++ b/SocketIO-iOSTests/SocketTestCases.swift @@ -0,0 +1,201 @@ +// +// SocketTestCases.swift +// Socket.IO-Client-Swift +// +// Created by Lukas Schmidt on 02.08.15. +// +// + +import XCTest +import Foundation + +class SocketTestCases: NSObject { + typealias SocketSendFunction = (testName:String, emitData:AnyObject?, callback:NormalCallback)->() + + static func testBasic(abstractSocketSend:SocketSendFunction, testKind:TestKind) { + let testName = "basicTest" + func didGetResult(result:NSArray?, ack:AckEmitter?) { + + } + abstractSocketSend(testName: testName, emitData: nil, callback: didGetResult) + } + + static func testNull(abstractSocketSend:SocketSendFunction, testKind:TestKind) { + let testName = "testNull" + func didGetResult(result:NSArray?, ack:AckEmitter?) { + if let _ = result?.firstObject as? NSNull { + + }else + { + XCTFail("Should have NSNull as result") + } + } + abstractSocketSend(testName: testName, emitData: NSNull(), callback: didGetResult) + } + + static func testBinary(abstractSocketSend:SocketSendFunction, testKind:TestKind) { + let testName = "testBinary" + func didGetResult(result:NSArray?, ack:AckEmitter?) { + if let data = result?.firstObject as? NSData { + let string = NSString(data: data, encoding: NSUTF8StringEncoding)! + XCTAssertEqual(string, "gakgakgak2") + }else { + XCTFail("Should have NSData as result") + } + } + let data = NSString(string: "gakgakgak2").dataUsingEncoding(NSUTF8StringEncoding)! + abstractSocketSend(testName: testName, emitData: data, callback: didGetResult) + } + + static func testArray(abstractSocketSend:SocketSendFunction, testKind:TestKind) { + let testName = "testArray" + func didGetResult(result:NSArray?, ack:AckEmitter?) { + if let array = result?.firstObject as? NSArray { + XCTAssertEqual(array.count, 2) + XCTAssertEqual(array.firstObject! as! String, "test3") + XCTAssertEqual(array.lastObject! as! String, "test4") + }else { + XCTFail("Should have NSArray as result") + } + } + abstractSocketSend(testName: testName, emitData: ["test1", "test2"], callback: didGetResult) + } + + static func testString(abstractSocketSend:SocketSendFunction, testKind:TestKind) { + let testName = "testString" + func didGetResult(result:NSArray?, ack:AckEmitter?) { + if let string = result?.firstObject as? String { + XCTAssertEqual(string, "polo") + }else { + XCTFail("Should have String as result") + } + } + abstractSocketSend(testName: testName, emitData: "marco", callback: didGetResult) + } + + static func testBool(abstractSocketSend:SocketSendFunction, testKind:TestKind) { + let testName = "testBool" + func didGetResult(result:NSArray?, ack:AckEmitter?) { + if let bool = result?.firstObject as? NSNumber { + XCTAssertTrue(bool.boolValue) + }else { + XCTFail("Should have Boolean as result") + } + } + abstractSocketSend(testName: testName, emitData: false, callback: didGetResult) + } + + static func testInteger(abstractSocketSend:SocketSendFunction, testKind:TestKind) { + let testName = "testInteger" + func didGetResult(result:NSArray?, ack:AckEmitter?) { + if let integer = result?.firstObject as? Int { + XCTAssertEqual(integer, 20) + }else { + XCTFail("Should have Integer as result") + } + } + abstractSocketSend(testName: testName, emitData: 10, callback: didGetResult) + } + + static func testDouble(abstractSocketSend:SocketSendFunction, testKind:TestKind) { + let testName = "testDouble" + func didGetResult(result:NSArray?, ack:AckEmitter?) { + if let double = result?.firstObject as? NSNumber { + XCTAssertEqual(double.floatValue, 1.2) + }else { + XCTFail("Should have Double as result") + } + } + abstractSocketSend(testName: testName, emitData: 1.1, callback: didGetResult) + } + + static func testJSON(abstractSocketSend:SocketSendFunction, testKind:TestKind) { + let testName = "testJSON" + func didGetResult(result:NSArray?, ack:AckEmitter?) { + if let json = result?.firstObject as? NSDictionary { + XCTAssertEqual(json.valueForKey("testString")! as! String, "test") + XCTAssertEqual(json.valueForKey("testNumber")! as! Int, 15) + XCTAssertEqual((json.valueForKey("testArray")! as! Array).count, 2) + XCTAssertEqual((json.valueForKey("testArray")! as! Array).last! as! Int, 1) + let string = NSString(data: (json.valueForKey("testArray")! as! Array).first! as! NSData, encoding: NSUTF8StringEncoding)! + XCTAssertEqual(string, "gakgakgak2") + }else { + XCTFail("Should have NSDictionary as result") + } + } + let json = ["name": "test", "testArray": ["hallo"], "nestedTest": ["test": "test"], "number": 15] + + abstractSocketSend(testName: testName, emitData: json, callback: didGetResult) + } + + static func testJSONWithoutBuffer(abstractSocketSend:SocketSendFunction, testKind:TestKind) { + let testName = "testJSONWithoutBuffer" + func didGetResult(result:NSArray?, ack:AckEmitter?) { + if let json = result?.firstObject as? NSDictionary { + XCTAssertEqual(json.valueForKey("testString")! as! String, "test") + XCTAssertEqual(json.valueForKey("testNumber")! as! Int, 15) + XCTAssertEqual((json.valueForKey("testArray")! as! Array).count, 2) + XCTAssertEqual((json.valueForKey("testArray")! as! Array).first! as! Int, 1) + XCTAssertEqual((json.valueForKey("testArray")! as! Array).last! as! Int, 1) + + }else { + XCTFail("Should have NSDictionary as result") + } + } + let json = ["name": "test", "testArray": ["hallo"], "nestedTest": ["test": "test"], "number": 15] + + abstractSocketSend(testName: testName, emitData: json, callback: didGetResult) + } + + static func testUnicode(abstractSocketSend:SocketSendFunction, testKind:TestKind) { + let testName = "testUnicode" + func didGetResult(result:NSArray?, ack:AckEmitter?) { + if let unicode = result?.firstObject as? String { + XCTAssertEqual(unicode, "🚄") + }else { + XCTFail("Should have String as result") + } + } + abstractSocketSend(testName: testName, emitData: "🚀", callback: didGetResult) + } + + static func testMultipleItems(abstractSocketMultipleSend:(testName:String, emitData:Array, callback:NormalCallback)->(), testKind:TestKind) { + let testName = "testMultipleItems" + func didGetResult(result:NSArray?, ack:AckEmitter?) { + XCTAssertEqual(result!.count, 5) + if let array = result?.firstObject as? Array { + XCTAssertEqual(array.last! as! Int, 2) + XCTAssertEqual(array.first! as! Int, 1) + }else { + XCTFail("Should have Array as result") + } + if let dict = result?[1] as? NSDictionary { + XCTAssertEqual(dict.valueForKey("test") as! String, "bob") + + }else { + XCTFail("Should have NSDictionary as result") + } + if let number = result?[2] as? Int { + XCTAssertEqual(number, 25) + + }else { + XCTFail("Should have Integer as result") + } + if let string = result?[3] as? String { + XCTAssertEqual(string, "polo") + + }else { + XCTFail("Should have Integer as result") + } + if let data = result?[4] as? NSData { + let string = NSString(data: data, encoding: NSUTF8StringEncoding)! + XCTAssertEqual(string, "gakgakgak2") + }else { + XCTFail("Should have NSData as result") + } + } + let data = NSString(string: "gakgakgak2").dataUsingEncoding(NSUTF8StringEncoding)! + let emitArray = [["test1", "test2"], ["test": "test"], 15, "marco", data] + abstractSocketMultipleSend(testName: testName, emitData: emitArray, callback: didGetResult) + } +} From bf3e28df81e523276d8ba528a3c1d4e7d177347e Mon Sep 17 00:00:00 2001 From: Lukas Schmidt Date: Sun, 2 Aug 2015 17:28:09 +0200 Subject: [PATCH 13/15] improve tests on server --- Socket.IO-Test-Server/TestCases.js | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/Socket.IO-Test-Server/TestCases.js b/Socket.IO-Test-Server/TestCases.js index c40ab2f..1f7511f 100644 --- a/Socket.IO-Test-Server/TestCases.js +++ b/Socket.IO-Test-Server/TestCases.js @@ -51,7 +51,7 @@ module.exports = { }, returnData: [1.2] }, - testJSONWithoutBuffer: { + testJSON: { assert: function(inputData) { assert.equal(inputData.name, "test") assert.equal(inputData.nestedTest.test, "test") @@ -59,7 +59,7 @@ module.exports = { }, returnData: [{testString: "test", testNumber: 15, nestedTest: {test: "test"}, testArray: [1, 1]}] }, - testJSON: { + testJSONWithBuffer: { assert: function(inputData) { assert.equal(inputData.name, "test") assert.equal(inputData.nestedTest.test, "test") @@ -72,6 +72,16 @@ module.exports = { }, returnData: ["🚄"] },testMultipleItems: { + assert: function(array, object, number, string, bool) { + assert.equal(array.length, 2) + assert.equal(array[0], "test1") + assert.equal(array[1], "test2") + assert.equal(number, 15) + assert.equal(string, "marco") + assert.equal(bool, false) + }, + returnData: [[1, 2], {test: "bob"}, 25, "polo", false] + },testMultipleItemsWithBuffer: { assert: function(array, object, number, string, binary) { assert.equal(array.length, 2) assert.equal(array[0], "test1") @@ -79,8 +89,7 @@ module.exports = { assert.equal(number, 15) assert.equal(string, "marco") assert.equal(binary.toString(), "gakgakgak2") - }, returnData: [[1, 2], {test: "bob"}, 25, "polo", new Buffer("gakgakgak2")] - }, + } } \ No newline at end of file From 1b08411ed4b14f75351a6608be4a7606706c5e91 Mon Sep 17 00:00:00 2001 From: Lukas Schmidt Date: Sun, 2 Aug 2015 17:29:16 +0200 Subject: [PATCH 14/15] refactored iOS testcases Add test cases for complex data structure (JSON, multiple data emit) without binary Buffer attached --- .../project.pbxproj | 4 + SocketIO-iOSTests/AbstractSocketTest.swift | 104 ++++++++ .../SocketAcknowledgementTest.swift | 89 +++---- SocketIO-iOSTests/SocketEmitTest.swift | 232 +++--------------- .../SocketNamespaceAcknowledgementTest.swift | 61 +++-- .../SocketNamespaceEmitTest.swift | 77 +++--- SocketIO-iOSTests/SocketTestCases.swift | 75 ++++-- 7 files changed, 303 insertions(+), 339 deletions(-) create mode 100644 SocketIO-iOSTests/AbstractSocketTest.swift diff --git a/Socket.IO-Client-Swift.xcodeproj/project.pbxproj b/Socket.IO-Client-Swift.xcodeproj/project.pbxproj index 05ec9e0..653762f 100644 --- a/Socket.IO-Client-Swift.xcodeproj/project.pbxproj +++ b/Socket.IO-Client-Swift.xcodeproj/project.pbxproj @@ -57,6 +57,7 @@ 94ADAC491B652D3300FD79AE /* SocketNamespaceEmitTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94ADAC481B652D3300FD79AE /* SocketNamespaceEmitTest.swift */; }; 94ADAC4B1B6632DD00FD79AE /* SocketAcknowledgementTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94ADAC4A1B6632DD00FD79AE /* SocketAcknowledgementTest.swift */; }; 94CB8F0B1B6E48B90019ED53 /* SocketTestCases.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94CB8F0A1B6E48B90019ED53 /* SocketTestCases.swift */; }; + 94CB8F0D1B6E66E60019ED53 /* AbstractSocketTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94CB8F0C1B6E66E60019ED53 /* AbstractSocketTest.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -107,6 +108,7 @@ 94ADAC481B652D3300FD79AE /* SocketNamespaceEmitTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SocketNamespaceEmitTest.swift; sourceTree = ""; }; 94ADAC4A1B6632DD00FD79AE /* SocketAcknowledgementTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SocketAcknowledgementTest.swift; sourceTree = ""; }; 94CB8F0A1B6E48B90019ED53 /* SocketTestCases.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SocketTestCases.swift; sourceTree = ""; }; + 94CB8F0C1B6E66E60019ED53 /* AbstractSocketTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AbstractSocketTest.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -192,6 +194,7 @@ 94242BB71B67B0E500AAAC9D /* SocketNamespaceAcknowledgementTest.swift */, 941A4AB91B67A56C00C42318 /* TestKind.swift */, 94CB8F0A1B6E48B90019ED53 /* SocketTestCases.swift */, + 94CB8F0C1B6E66E60019ED53 /* AbstractSocketTest.swift */, 572EF2291B51F16C00EEBB58 /* Supporting Files */, ); path = "SocketIO-iOSTests"; @@ -460,6 +463,7 @@ 945B65371B5FCEEA0081E995 /* SocketEngine.swift in Sources */, 945B65351B5FCEEA0081E995 /* SocketAckManager.swift in Sources */, 941A4ABA1B67A56C00C42318 /* TestKind.swift in Sources */, + 94CB8F0D1B6E66E60019ED53 /* AbstractSocketTest.swift in Sources */, 945B65431B63D9DB0081E995 /* SocketEmitTest.swift in Sources */, 945B65401B5FCEEA0081E995 /* SwiftRegex.swift in Sources */, 945B653C1B5FCEEA0081E995 /* SocketLogger.swift in Sources */, diff --git a/SocketIO-iOSTests/AbstractSocketTest.swift b/SocketIO-iOSTests/AbstractSocketTest.swift new file mode 100644 index 0000000..ee1e335 --- /dev/null +++ b/SocketIO-iOSTests/AbstractSocketTest.swift @@ -0,0 +1,104 @@ +// +// AbstractSocketTest.swift +// Socket.IO-Client-Swift +// +// Created by Lukas Schmidt on 02.08.15. +// +// + +import XCTest + +class AbstractSocketTest: XCTestCase { + static let TEST_TIMEOUT = 4.0 + var socket:SocketIOClient! + var testKind:TestKind? + + override func tearDown() { + super.tearDown() + socket.close(fast: false) + } + + func openConnection() { + let expection = self.expectationWithDescription("connect") + socket.on("connect") {data, ack in + expection.fulfill() + } + socket.connect() + XCTAssertTrue(socket.connecting) + waitForExpectationsWithTimeout(5, handler: nil) + } + + func generateTestName(rawTestName:String) ->String { + return rawTestName + testKind!.rawValue + } + + func checkConnectionStatus() { + XCTAssertTrue(socket.connected) + XCTAssertFalse(socket.connecting) + XCTAssertFalse(socket.reconnecting) + XCTAssertFalse(socket.closed) + XCTAssertFalse(socket.secure) + } + + func socketMultipleEmit(testName:String, emitData:Array, callback:NormalCallback){ + let finalTestname = generateTestName(testName) + let expection = self.expectationWithDescription(finalTestname) + func didGetEmit(result:NSArray?, ack:AckEmitter?) { + callback(result, ack) + expection.fulfill() + } + + socket.emit(finalTestname, withItems: emitData) + socket.on(finalTestname + "Return", callback: didGetEmit) + waitForExpectationsWithTimeout(SocketEmitTest.TEST_TIMEOUT, handler: nil) + } + + + func socketEmit(testName:String, emitData:AnyObject?, callback:NormalCallback){ + let finalTestname = generateTestName(testName) + let expection = self.expectationWithDescription(finalTestname) + func didGetEmit(result:NSArray?, ack:AckEmitter?) { + callback(result, ack) + expection.fulfill() + } + + socket.on(finalTestname + "Return", callback: didGetEmit) + if let emitData = emitData { + socket.emit(finalTestname, emitData) + } else { + socket.emit(finalTestname) + } + + waitForExpectationsWithTimeout(SocketEmitTest.TEST_TIMEOUT, handler: nil) + } + + func socketAcknwoledgeMultiple(testName:String, Data:Array, callback:NormalCallback){ + let finalTestname = generateTestName(testName) + let expection = self.expectationWithDescription(finalTestname) + func didGetResult(result:NSArray?) { + callback(result, nil) + expection.fulfill() + } + + socket.emitWithAck(finalTestname, withItems: Data)(timeoutAfter: 5, callback: didGetResult) + waitForExpectationsWithTimeout(SocketEmitTest.TEST_TIMEOUT, handler: nil) + } + + func socketAcknwoledge(testName:String, Data:AnyObject?, callback:NormalCallback){ + let finalTestname = generateTestName(testName) + let expection = self.expectationWithDescription(finalTestname) + func didGet(result:NSArray?) { + callback(result, nil) + expection.fulfill() + } + var ack:OnAckCallback! + if let Data = Data { + ack = socket.emitWithAck(finalTestname, Data) + } else { + ack = socket.emitWithAck(finalTestname) + } + ack(timeoutAfter: 20, callback: didGet) + + waitForExpectationsWithTimeout(SocketEmitTest.TEST_TIMEOUT, handler: nil) + } +} diff --git a/SocketIO-iOSTests/SocketAcknowledgementTest.swift b/SocketIO-iOSTests/SocketAcknowledgementTest.swift index 7c27622..801e852 100644 --- a/SocketIO-iOSTests/SocketAcknowledgementTest.swift +++ b/SocketIO-iOSTests/SocketAcknowledgementTest.swift @@ -8,7 +8,8 @@ import XCTest -class SocketAcknowledgementTest: SocketEmitTest { +class SocketAcknowledgementTest: AbstractSocketTest { + override func setUp() { super.setUp() testKind = TestKind.Acknowledgement @@ -18,92 +19,64 @@ class SocketAcknowledgementTest: SocketEmitTest { "reconnectWait": 5, // default 10 "forcePolling": false, "forceWebsockets": false,// default false - "path": "", - "extraHeaders": headers]) + "path": ""]) openConnection() } - override func testConnectionStatus() { - super.testConnectionStatus() + func testConnectionStatus() { + super.checkConnectionStatus() } - override func testEmit() { - super.testEmit() + func testBasic() { + SocketTestCases.testBasic(socketAcknwoledge) } - override func testEmitNull() { - super.testEmitNull() + func testNull() { + SocketTestCases.testNull(socketAcknwoledge) } - override func testEmitBinary() { - super.testEmitBinary() + func testBinary() { + SocketTestCases.testBinary(socketAcknwoledge) } - override func testArrayEmit() { - super.testArrayEmit() + func testArray() { + SocketTestCases.testArray(socketAcknwoledge) } - override func testStringEmit() { - super.testStringEmit() + func testString() { + SocketTestCases.testString(socketAcknwoledge) } - override func testBoolEmit() { - super.testBoolEmit() + func testBool() { + SocketTestCases.testBool(socketAcknwoledge) } - override func testIntegerEmit() { - super.testIntegerEmit() + func testInteger() { + SocketTestCases.testInteger(socketAcknwoledge) } - override func testDoubleEmit() { - super.testDoubleEmit() + func testDouble() { + SocketTestCases.testDouble(socketAcknwoledge) } - override func testJSONEmit() { - super.testJSONEmit() + func testJSON() { + SocketTestCases.testJSON(socketAcknwoledge) } - func testJSONWithoutBuffer() { - SocketTestCases.testJSONEmit(abstractSocketEmit, testKind: self.testKind) + func testJSONWithBuffer() { + SocketTestCases.testJSONWithBuffer(socketAcknwoledge) } - override func testUnicodeEmit() { - super.testUnicodeEmit() + func testUnicode() { + SocketTestCases.testUnicode(socketAcknwoledge) } - override func testMultipleItemsEmit() { - super.testMultipleItemsEmit() + func testMultipleItems() { + SocketTestCases.testMultipleItems(socketAcknwoledgeMultiple) } - override func abstractSocketMultipleEmit(testName:String, emitData:Array, callback:NormalCallback){ - let finalTestname = generateTestName(testName) - let expection = self.expectationWithDescription(finalTestname) - func didGetEmit(result:NSArray?) { - callback(result, nil) - expection.fulfill() - } - - socket.emitWithAck(finalTestname, withItems: emitData)(timeoutAfter: 5, callback: didGetEmit) - waitForExpectationsWithTimeout(SocketEmitTest.TEST_TIMEOUT, handler: nil) - - } - - override func abstractSocketEmit(testName:String, emitData:AnyObject?, callback:NormalCallback){ - let finalTestname = testName + testKind.rawValue - let expection = self.expectationWithDescription(finalTestname) - func didGetEmit(result:NSArray?) { - callback(result, nil) - expection.fulfill() - } - var ack:OnAckCallback! - if let emitData = emitData { - ack = socket.emitWithAck(finalTestname, emitData) - } else { - ack = socket.emitWithAck(finalTestname) - } - ack(timeoutAfter: 20, callback: didGetEmit) - - waitForExpectationsWithTimeout(SocketEmitTest.TEST_TIMEOUT, handler: nil) + func testMultipleWithBuffer() { + SocketTestCases.testMultipleItemsWithBuffer(socketAcknwoledgeMultiple) } } diff --git a/SocketIO-iOSTests/SocketEmitTest.swift b/SocketIO-iOSTests/SocketEmitTest.swift index cbdaeff..a970444 100644 --- a/SocketIO-iOSTests/SocketEmitTest.swift +++ b/SocketIO-iOSTests/SocketEmitTest.swift @@ -9,22 +9,17 @@ import XCTest import Foundation -class SocketEmitTest: XCTestCase { - static let TEST_TIMEOUT = 15.0 - var socket:SocketIOClient! - let headers = ["testing": "blah", "testing2": "b/:lah"] - var testKind = TestKind.Emit - +class SocketEmitTest: AbstractSocketTest { override func setUp() { super.setUp() + testKind = TestKind.Emit socket = SocketIOClient(socketURL: "127.0.0.1:8080", opts: [ "reconnects": true, // default true "reconnectAttempts": -1, // default -1 "reconnectWait": 5, // default 10 "forcePolling": false, "forceWebsockets": false,// default false - "path": "", - "extraHeaders": headers] + "path": ""] ) openConnection() } @@ -34,227 +29,60 @@ class SocketEmitTest: XCTestCase { super.tearDown() } - func openConnection() { - let expection = self.expectationWithDescription("connect") - socket.on("connect") {data, ack in - expection.fulfill() - } - socket.connect() - XCTAssertTrue(socket.connecting) - waitForExpectationsWithTimeout(5, handler: nil) - } - func testConnectionStatus() { - XCTAssertTrue(socket.connected) - XCTAssertFalse(socket.connecting) - XCTAssertFalse(socket.reconnecting) - XCTAssertFalse(socket.closed) - XCTAssertFalse(socket.secure) + super.checkConnectionStatus() } - func testEmit() { - let testName = "basicTest" - func didGetEmit(result:NSArray?, ack:AckEmitter?) { - - } - abstractSocketEmit(testName, emitData: nil, callback: didGetEmit) + func testBasic() { + SocketTestCases.testBasic(socketEmit) } - func testEmitNull() { - let testName = "testNull" - func didGetEmit(result:NSArray?, ack:AckEmitter?) { - if let _ = result?.firstObject as? NSNull { - - }else - { - XCTFail("Should have NSNull as result") - } - } - abstractSocketEmit(testName, emitData: NSNull(), callback: didGetEmit) + func testNull() { + SocketTestCases.testNull(socketEmit) } - func testEmitBinary() { - let testName = "testBinary" - func didGetEmit(result:NSArray?, ack:AckEmitter?) { - if let data = result?.firstObject as? NSData { - let string = NSString(data: data, encoding: NSUTF8StringEncoding)! - XCTAssertEqual(string, "gakgakgak2") - }else { - XCTFail("Should have NSData as result") - } - } - let data = NSString(string: "gakgakgak2").dataUsingEncoding(NSUTF8StringEncoding)! - abstractSocketEmit(testName, emitData: data, callback: didGetEmit) + func testBinary() { + SocketTestCases.testBinary(socketEmit) } - func testArrayEmit() { - let testName = "testArray" - func didGetEmit(result:NSArray?, ack:AckEmitter?) { - if let array = result?.firstObject as? NSArray { - XCTAssertEqual(array.count, 2) - XCTAssertEqual(array.firstObject! as! String, "test3") - XCTAssertEqual(array.lastObject! as! String, "test4") - }else { - XCTFail("Should have NSArray as result") - } - } - abstractSocketEmit(testName, emitData: ["test1", "test2"], callback: didGetEmit) + func testArray() { + SocketTestCases.testArray(socketEmit) } - func testStringEmit() { - let testName = "testString" - func didGetEmit(result:NSArray?, ack:AckEmitter?) { - if let string = result?.firstObject as? String { - XCTAssertEqual(string, "polo") - }else { - XCTFail("Should have String as result") - } - } - abstractSocketEmit(testName, emitData: "marco", callback: didGetEmit) + func testString() { + SocketTestCases.testString(socketEmit) } - func testBoolEmit() { - let testName = "testBool" - func didGetEmit(result:NSArray?, ack:AckEmitter?) { - if let bool = result?.firstObject as? NSNumber { - XCTAssertTrue(bool.boolValue) - }else { - XCTFail("Should have Boolean as result") - } - } - abstractSocketEmit(testName, emitData: false, callback: didGetEmit) + func testBool() { + SocketTestCases.testBool(socketEmit) } - func testIntegerEmit() { - let testName = "testInteger" - func didGetEmit(result:NSArray?, ack:AckEmitter?) { - if let integer = result?.firstObject as? Int { - XCTAssertEqual(integer, 20) - }else { - XCTFail("Should have Integer as result") - } - } - abstractSocketEmit(testName, emitData: 10, callback: didGetEmit) + func testInteger() { + SocketTestCases.testInteger(socketEmit) } - func testDoubleEmit() { - let testName = "testDouble" - func didGetEmit(result:NSArray?, ack:AckEmitter?) { - if let double = result?.firstObject as? NSNumber { - XCTAssertEqual(double.floatValue, 1.2) - }else { - XCTFail("Should have Double as result") - } - } - abstractSocketEmit(testName, emitData: 1.1, callback: didGetEmit) + func testDouble() { + SocketTestCases.testDouble(socketEmit) } - func testJSONEmit() { - let testName = "testJSON" - func didGetEmit(result:NSArray?, ack:AckEmitter?) { - if let json = result?.firstObject as? NSDictionary { - XCTAssertEqual(json.valueForKey("testString")! as! String, "test") - XCTAssertEqual(json.valueForKey("testNumber")! as! Int, 15) - XCTAssertEqual((json.valueForKey("testArray")! as! Array).count, 2) - XCTAssertEqual((json.valueForKey("testArray")! as! Array).last! as! Int, 1) - let string = NSString(data: (json.valueForKey("testArray")! as! Array).first! as! NSData, encoding: NSUTF8StringEncoding)! - XCTAssertEqual(string, "gakgakgak2") - }else { - XCTFail("Should have NSDictionary as result") - } - } - let json = ["name": "test", "testArray": ["hallo"], "nestedTest": ["test": "test"], "number": 15] - - abstractSocketEmit(testName, emitData: json, callback: didGetEmit) + func testJSON() { + SocketTestCases.testJSON(socketEmit) } - func testUnicodeEmit() { - let testName = "testUnicode" - func didGetEmit(result:NSArray?, ack:AckEmitter?) { - if let unicode = result?.firstObject as? String { - XCTAssertEqual(unicode, "🚄") - }else { - XCTFail("Should have String as result") - } - } - abstractSocketEmit(testName, emitData: "🚀", callback: didGetEmit) + func testJSONWithBuffer() { + SocketTestCases.testJSONWithBuffer(socketEmit) } - func testMultipleItemsEmit() { - let testName = "testMultipleItems" - func didGetEmit(result:NSArray?, ack:AckEmitter?) { - XCTAssertEqual(result!.count, 5) - if let array = result?.firstObject as? Array { - XCTAssertEqual(array.last! as! Int, 2) - XCTAssertEqual(array.first! as! Int, 1) - }else { - XCTFail("Should have Array as result") - } - if let dict = result?[1] as? NSDictionary { - XCTAssertEqual(dict.valueForKey("test") as! String, "bob") - - }else { - XCTFail("Should have NSDictionary as result") - } - if let number = result?[2] as? Int { - XCTAssertEqual(number, 25) - - }else { - XCTFail("Should have Integer as result") - } - if let string = result?[3] as? String { - XCTAssertEqual(string, "polo") - - }else { - XCTFail("Should have Integer as result") - } - if let data = result?[4] as? NSData { - let string = NSString(data: data, encoding: NSUTF8StringEncoding)! - XCTAssertEqual(string, "gakgakgak2") - }else { - XCTFail("Should have NSData as result") - } - } - let data = NSString(string: "gakgakgak2").dataUsingEncoding(NSUTF8StringEncoding)! - let emitArray = [["test1", "test2"], ["test": "test"], 15, "marco", data] - abstractSocketMultipleEmit(testName, emitData: emitArray, callback: didGetEmit) + func testUnicode() { + SocketTestCases.testUnicode(socketEmit) } - func generateTestName(rawTestName:String) ->String { - return rawTestName + testKind.rawValue + func testMultipleItems() { + SocketTestCases.testMultipleItems(socketMultipleEmit) } - func abstractSocketMultipleEmit(testName:String, emitData:Array, callback:NormalCallback){ - let finalTestname = generateTestName(testName) - let expection = self.expectationWithDescription(finalTestname) - func didGetEmit(result:NSArray?, ack:AckEmitter?) { - callback(result, ack) - expection.fulfill() - } - - socket.emit(finalTestname, withItems: emitData) - socket.on(finalTestname + "Return", callback: didGetEmit) - waitForExpectationsWithTimeout(SocketEmitTest.TEST_TIMEOUT, handler: nil) - - } - - - func abstractSocketEmit(testName:String, emitData:AnyObject?, callback:NormalCallback){ - let finalTestname = generateTestName(testName) - let expection = self.expectationWithDescription(finalTestname) - func didGetEmit(result:NSArray?, ack:AckEmitter?) { - callback(result, ack) - expection.fulfill() - } - - socket.on(finalTestname + "Return", callback: didGetEmit) - if let emitData = emitData { - socket.emit(finalTestname, emitData) - } else { - socket.emit(finalTestname) - } - - waitForExpectationsWithTimeout(SocketEmitTest.TEST_TIMEOUT, handler: nil) + func testMultipleWithBuffer() { + SocketTestCases.testMultipleItemsWithBuffer(socketMultipleEmit) } } diff --git a/SocketIO-iOSTests/SocketNamespaceAcknowledgementTest.swift b/SocketIO-iOSTests/SocketNamespaceAcknowledgementTest.swift index a8d715e..d25fecf 100644 --- a/SocketIO-iOSTests/SocketNamespaceAcknowledgementTest.swift +++ b/SocketIO-iOSTests/SocketNamespaceAcknowledgementTest.swift @@ -8,7 +8,7 @@ import XCTest -class SocketNamespaceAcknowledgementTest: SocketAcknowledgementTest { +class SocketNamespaceAcknowledgementTest: AbstractSocketTest { override func setUp() { super.setUp() @@ -20,56 +20,63 @@ class SocketNamespaceAcknowledgementTest: SocketAcknowledgementTest { "forcePolling": false, "forceWebsockets": false,// default false "path": "", - "nsp": "/swift", - "extraHeaders": headers]) + "nsp": "/swift"]) openConnection() } - override func testConnectionStatus() { - super.testConnectionStatus() + func testConnectionStatus() { + super.checkConnectionStatus() } - override func testEmit() { - super.testEmit() + func testBasic() { + SocketTestCases.testBasic(socketAcknwoledge) } - override func testEmitNull() { - super.testEmitNull() + func testNull() { + SocketTestCases.testNull(socketAcknwoledge) } - override func testEmitBinary() { - super.testEmitBinary() + func testBinary() { + SocketTestCases.testBinary(socketAcknwoledge) } - override func testArrayEmit() { - super.testArrayEmit() + func testArray() { + SocketTestCases.testArray(socketAcknwoledge) } - override func testStringEmit() { - super.testStringEmit() + func testString() { + SocketTestCases.testString(socketAcknwoledge) } - override func testBoolEmit() { - super.testBoolEmit() + func testBool() { + SocketTestCases.testBool(socketAcknwoledge) } - override func testIntegerEmit() { - super.testIntegerEmit() + func testInteger() { + SocketTestCases.testInteger(socketAcknwoledge) } - override func testDoubleEmit() { - super.testDoubleEmit() + func testDouble() { + SocketTestCases.testDouble(socketAcknwoledge) } - override func testJSONEmit() { - super.testJSONEmit() + func testJSON() { + SocketTestCases.testJSON(socketAcknwoledge) } - override func testUnicodeEmit() { - super.testUnicodeEmit() + func testJSONWithBuffer() { + SocketTestCases.testJSONWithBuffer(socketAcknwoledge) } - override func testMultipleItemsEmit() { - super.testMultipleItemsEmit() + func testUnicode() { + SocketTestCases.testUnicode(socketAcknwoledge) + } + + func testMultipleItems() { + SocketTestCases.testMultipleItems(socketAcknwoledgeMultiple) + } + + func testMultipleWithBuffer() { + SocketTestCases.testMultipleItemsWithBuffer(socketAcknwoledgeMultiple) } } diff --git a/SocketIO-iOSTests/SocketNamespaceEmitTest.swift b/SocketIO-iOSTests/SocketNamespaceEmitTest.swift index 945a242..057fcc1 100644 --- a/SocketIO-iOSTests/SocketNamespaceEmitTest.swift +++ b/SocketIO-iOSTests/SocketNamespaceEmitTest.swift @@ -8,73 +8,76 @@ import XCTest -class SocketNamespaceEmitTest: SocketEmitTest { +class SocketNamespaceEmitTest: AbstractSocketTest { override func setUp() { super.setUp() - socket = SocketIOClient(socketURL: "127.0.0.1:8080", opts: [ - "reconnects": true, // default true - "reconnectAttempts": -1, // default -1 - "reconnectWait": 5, // default 10 - "forcePolling": false, - "forceWebsockets": false,// default false - "path": "", - "nsp": "/swift", - "extraHeaders": headers]) + testKind = TestKind.Emit + socket = SocketIOClient(socketURL: "127.0.0.1:8080", opts: [ + "reconnects": true, // default true + "reconnectAttempts": -1, // default -1 + "reconnectWait": 5, // default 10 + "forcePolling": false, + "forceWebsockets": false,// default false + "path": "", + "nsp": "/swift"]) openConnection() } - override func tearDown() { - socket.close(fast: false) - super.tearDown() + func testConnectionStatus() { + super.checkConnectionStatus() } - override func testConnectionStatus() { - super.testConnectionStatus() + func testBasic() { + SocketTestCases.testBasic(socketEmit) } - override func testEmit() { - super.testEmit() + func testNull() { + SocketTestCases.testNull(socketEmit) } - override func testEmitNull() { - super.testEmitNull() + func testBinary() { + SocketTestCases.testBinary(socketEmit) } - override func testEmitBinary() { - super.testEmitBinary() + func testArray() { + SocketTestCases.testArray(socketEmit) } - override func testArrayEmit() { - super.testArrayEmit() + func testString() { + SocketTestCases.testString(socketEmit) } - override func testStringEmit() { - super.testStringEmit() + func testBool() { + SocketTestCases.testBool(socketEmit) } - override func testBoolEmit() { - super.testBoolEmit() + func testInteger() { + SocketTestCases.testInteger(socketEmit) } - override func testIntegerEmit() { - super.testIntegerEmit() + func testDouble() { + SocketTestCases.testDouble(socketEmit) } - override func testDoubleEmit() { - super.testDoubleEmit() + func testJSON() { + SocketTestCases.testJSON(socketEmit) } - override func testJSONEmit() { - super.testJSONEmit() + func testJSONWithBuffer() { + SocketTestCases.testJSONWithBuffer(socketEmit) } - override func testUnicodeEmit() { - super.testUnicodeEmit() + func testUnicode() { + SocketTestCases.testUnicode(socketEmit) } - override func testMultipleItemsEmit() { - super.testMultipleItemsEmit() + func testMultipleItems() { + SocketTestCases.testMultipleItems(socketMultipleEmit) + } + + func testMultipleWithBuffer() { + SocketTestCases.testMultipleItemsWithBuffer(socketMultipleEmit) } } diff --git a/SocketIO-iOSTests/SocketTestCases.swift b/SocketIO-iOSTests/SocketTestCases.swift index 53c4489..e17718e 100644 --- a/SocketIO-iOSTests/SocketTestCases.swift +++ b/SocketIO-iOSTests/SocketTestCases.swift @@ -12,7 +12,7 @@ import Foundation class SocketTestCases: NSObject { typealias SocketSendFunction = (testName:String, emitData:AnyObject?, callback:NormalCallback)->() - static func testBasic(abstractSocketSend:SocketSendFunction, testKind:TestKind) { + static func testBasic(abstractSocketSend:SocketSendFunction) { let testName = "basicTest" func didGetResult(result:NSArray?, ack:AckEmitter?) { @@ -20,7 +20,7 @@ class SocketTestCases: NSObject { abstractSocketSend(testName: testName, emitData: nil, callback: didGetResult) } - static func testNull(abstractSocketSend:SocketSendFunction, testKind:TestKind) { + static func testNull(abstractSocketSend:SocketSendFunction) { let testName = "testNull" func didGetResult(result:NSArray?, ack:AckEmitter?) { if let _ = result?.firstObject as? NSNull { @@ -33,7 +33,7 @@ class SocketTestCases: NSObject { abstractSocketSend(testName: testName, emitData: NSNull(), callback: didGetResult) } - static func testBinary(abstractSocketSend:SocketSendFunction, testKind:TestKind) { + static func testBinary(abstractSocketSend:SocketSendFunction) { let testName = "testBinary" func didGetResult(result:NSArray?, ack:AckEmitter?) { if let data = result?.firstObject as? NSData { @@ -47,7 +47,7 @@ class SocketTestCases: NSObject { abstractSocketSend(testName: testName, emitData: data, callback: didGetResult) } - static func testArray(abstractSocketSend:SocketSendFunction, testKind:TestKind) { + static func testArray(abstractSocketSend:SocketSendFunction) { let testName = "testArray" func didGetResult(result:NSArray?, ack:AckEmitter?) { if let array = result?.firstObject as? NSArray { @@ -61,7 +61,7 @@ class SocketTestCases: NSObject { abstractSocketSend(testName: testName, emitData: ["test1", "test2"], callback: didGetResult) } - static func testString(abstractSocketSend:SocketSendFunction, testKind:TestKind) { + static func testString(abstractSocketSend:SocketSendFunction) { let testName = "testString" func didGetResult(result:NSArray?, ack:AckEmitter?) { if let string = result?.firstObject as? String { @@ -73,7 +73,7 @@ class SocketTestCases: NSObject { abstractSocketSend(testName: testName, emitData: "marco", callback: didGetResult) } - static func testBool(abstractSocketSend:SocketSendFunction, testKind:TestKind) { + static func testBool(abstractSocketSend:SocketSendFunction) { let testName = "testBool" func didGetResult(result:NSArray?, ack:AckEmitter?) { if let bool = result?.firstObject as? NSNumber { @@ -85,7 +85,7 @@ class SocketTestCases: NSObject { abstractSocketSend(testName: testName, emitData: false, callback: didGetResult) } - static func testInteger(abstractSocketSend:SocketSendFunction, testKind:TestKind) { + static func testInteger(abstractSocketSend:SocketSendFunction) { let testName = "testInteger" func didGetResult(result:NSArray?, ack:AckEmitter?) { if let integer = result?.firstObject as? Int { @@ -97,7 +97,7 @@ class SocketTestCases: NSObject { abstractSocketSend(testName: testName, emitData: 10, callback: didGetResult) } - static func testDouble(abstractSocketSend:SocketSendFunction, testKind:TestKind) { + static func testDouble(abstractSocketSend:SocketSendFunction) { let testName = "testDouble" func didGetResult(result:NSArray?, ack:AckEmitter?) { if let double = result?.firstObject as? NSNumber { @@ -109,8 +109,8 @@ class SocketTestCases: NSObject { abstractSocketSend(testName: testName, emitData: 1.1, callback: didGetResult) } - static func testJSON(abstractSocketSend:SocketSendFunction, testKind:TestKind) { - let testName = "testJSON" + static func testJSONWithBuffer(abstractSocketSend:SocketSendFunction) { + let testName = "testJSONWithBuffer" func didGetResult(result:NSArray?, ack:AckEmitter?) { if let json = result?.firstObject as? NSDictionary { XCTAssertEqual(json.valueForKey("testString")! as! String, "test") @@ -128,8 +128,8 @@ class SocketTestCases: NSObject { abstractSocketSend(testName: testName, emitData: json, callback: didGetResult) } - static func testJSONWithoutBuffer(abstractSocketSend:SocketSendFunction, testKind:TestKind) { - let testName = "testJSONWithoutBuffer" + static func testJSON(abstractSocketSend:SocketSendFunction) { + let testName = "testJSON" func didGetResult(result:NSArray?, ack:AckEmitter?) { if let json = result?.firstObject as? NSDictionary { XCTAssertEqual(json.valueForKey("testString")! as! String, "test") @@ -147,7 +147,7 @@ class SocketTestCases: NSObject { abstractSocketSend(testName: testName, emitData: json, callback: didGetResult) } - static func testUnicode(abstractSocketSend:SocketSendFunction, testKind:TestKind) { + static func testUnicode(abstractSocketSend:SocketSendFunction) { let testName = "testUnicode" func didGetResult(result:NSArray?, ack:AckEmitter?) { if let unicode = result?.firstObject as? String { @@ -159,10 +159,14 @@ class SocketTestCases: NSObject { abstractSocketSend(testName: testName, emitData: "🚀", callback: didGetResult) } - static func testMultipleItems(abstractSocketMultipleSend:(testName:String, emitData:Array, callback:NormalCallback)->(), testKind:TestKind) { - let testName = "testMultipleItems" + static func testMultipleItemsWithBuffer(abstractSocketMultipleSend:(testName:String, emitData:Array, callback:NormalCallback)->()) { + let testName = "testMultipleItemsWithBuffer" func didGetResult(result:NSArray?, ack:AckEmitter?) { XCTAssertEqual(result!.count, 5) + if result!.count != 5 { + XCTFail("Fatal Fail. Lost some Data") + return + } if let array = result?.firstObject as? Array { XCTAssertEqual(array.last! as! Int, 2) XCTAssertEqual(array.first! as! Int, 1) @@ -198,4 +202,45 @@ class SocketTestCases: NSObject { let emitArray = [["test1", "test2"], ["test": "test"], 15, "marco", data] abstractSocketMultipleSend(testName: testName, emitData: emitArray, callback: didGetResult) } + + static func testMultipleItems(abstractSocketMultipleSend:(testName:String, emitData:Array, callback:NormalCallback)->()) { + let testName = "testMultipleItems" + func didGetResult(result:NSArray?, ack:AckEmitter?) { + XCTAssertEqual(result!.count, 5) + if result!.count != 5 { + XCTFail("Fatal Fail. Lost some Data") + return + } + if let array = result?.firstObject as? Array { + XCTAssertEqual(array.last! as! Int, 2) + XCTAssertEqual(array.first! as! Int, 1) + }else { + XCTFail("Should have Array as result") + } + if let dict = result?[1] as? NSDictionary { + XCTAssertEqual(dict.valueForKey("test") as! String, "bob") + + }else { + XCTFail("Should have NSDictionary as result") + } + if let number = result?[2] as? Int { + XCTAssertEqual(number, 25) + + }else { + XCTFail("Should have Integer as result") + } + if let string = result?[3] as? String { + XCTAssertEqual(string, "polo") + }else { + XCTFail("Should have Integer as result") + } + if let bool = result?[4] as? NSNumber { + XCTAssertFalse(bool.boolValue) + }else { + XCTFail("Should have NSNumber as result") + } + } + let emitArray = [["test1", "test2"], ["test": "test"], 15, "marco", false] + abstractSocketMultipleSend(testName: testName, emitData: emitArray, callback: didGetResult) + } } From f0b4f077d41cf78e75fab05039d0ddc5e6c02dac Mon Sep 17 00:00:00 2001 From: Lukas Schmidt Date: Sun, 2 Aug 2015 17:44:06 +0200 Subject: [PATCH 15/15] fix crash --- .../xcschemes/SocketIO-iOS.xcscheme | 10 +++++-- SocketIO-iOSTests/AbstractSocketTest.swift | 29 ++++++++++++------- 2 files changed, 26 insertions(+), 13 deletions(-) diff --git a/Socket.IO-Client-Swift.xcodeproj/xcshareddata/xcschemes/SocketIO-iOS.xcscheme b/Socket.IO-Client-Swift.xcodeproj/xcshareddata/xcschemes/SocketIO-iOS.xcscheme index e9b0653..baf02a7 100644 --- a/Socket.IO-Client-Swift.xcodeproj/xcshareddata/xcschemes/SocketIO-iOS.xcscheme +++ b/Socket.IO-Client-Swift.xcodeproj/xcshareddata/xcschemes/SocketIO-iOS.xcscheme @@ -37,10 +37,11 @@ + codeCoverageEnabled = "YES"> @@ -62,15 +63,18 @@ ReferencedContainer = "container:Socket.IO-Client-Swift.xcodeproj"> + + String { @@ -42,10 +42,12 @@ class AbstractSocketTest: XCTestCase { func socketMultipleEmit(testName:String, emitData:Array, callback:NormalCallback){ let finalTestname = generateTestName(testName) - let expection = self.expectationWithDescription(finalTestname) + weak var expection = self.expectationWithDescription(finalTestname) func didGetEmit(result:NSArray?, ack:AckEmitter?) { callback(result, ack) - expection.fulfill() + if let expection = expection { + expection.fulfill() + } } socket.emit(finalTestname, withItems: emitData) @@ -56,10 +58,13 @@ class AbstractSocketTest: XCTestCase { func socketEmit(testName:String, emitData:AnyObject?, callback:NormalCallback){ let finalTestname = generateTestName(testName) - let expection = self.expectationWithDescription(finalTestname) + weak var expection = self.expectationWithDescription(finalTestname) func didGetEmit(result:NSArray?, ack:AckEmitter?) { callback(result, ack) - expection.fulfill() + if let expection = expection { + expection.fulfill() + } + } socket.on(finalTestname + "Return", callback: didGetEmit) @@ -74,10 +79,12 @@ class AbstractSocketTest: XCTestCase { func socketAcknwoledgeMultiple(testName:String, Data:Array, callback:NormalCallback){ let finalTestname = generateTestName(testName) - let expection = self.expectationWithDescription(finalTestname) + weak var expection = self.expectationWithDescription(finalTestname) func didGetResult(result:NSArray?) { callback(result, nil) - expection.fulfill() + if let expection = expection { + expection.fulfill() + } } socket.emitWithAck(finalTestname, withItems: Data)(timeoutAfter: 5, callback: didGetResult) @@ -86,10 +93,12 @@ class AbstractSocketTest: XCTestCase { func socketAcknwoledge(testName:String, Data:AnyObject?, callback:NormalCallback){ let finalTestname = generateTestName(testName) - let expection = self.expectationWithDescription(finalTestname) + weak var expection = self.expectationWithDescription(finalTestname) func didGet(result:NSArray?) { callback(result, nil) - expection.fulfill() + if let expection = expection { + expection.fulfill() + } } var ack:OnAckCallback! if let Data = Data {