// // 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) } }