216 lines
8.0 KiB
Swift
216 lines
8.0 KiB
Swift
//
|
|
// SocketBasicPacketTest.swift
|
|
// Socket.IO-Client-Swift
|
|
//
|
|
// Created by Erik Little on 10/7/15.
|
|
//
|
|
//
|
|
|
|
import XCTest
|
|
@testable import SocketIO
|
|
|
|
class SocketBasicPacketTest : XCTestCase {
|
|
func testEmptyEmit() {
|
|
let sendData = ["test"]
|
|
let packetStr = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/", ack: false).packetString
|
|
let parsed = parser.parseSocketMessage(packetStr)!
|
|
|
|
XCTAssertEqual(parsed.type, .event)
|
|
XCTAssertTrue(compareAnyArray(input: parsed.data, expected: sendData))
|
|
}
|
|
|
|
func testNullEmit() {
|
|
let sendData: [Any] = ["test", NSNull()]
|
|
let packetStr = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/", ack: false).packetString
|
|
let parsed = parser.parseSocketMessage(packetStr)!
|
|
|
|
XCTAssertEqual(parsed.type, .event)
|
|
XCTAssertTrue(compareAnyArray(input: parsed.data, expected: sendData))
|
|
}
|
|
|
|
func testStringEmit() {
|
|
let sendData = ["test", "foo bar"]
|
|
let packetStr = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/", ack: false).packetString
|
|
let parsed = parser.parseSocketMessage(packetStr)!
|
|
|
|
XCTAssertEqual(parsed.type, .event)
|
|
XCTAssertTrue(compareAnyArray(input: parsed.data, expected: sendData))
|
|
}
|
|
|
|
func testStringEmitWithQuotes() {
|
|
let sendData = ["test", "\"he\"llo world\""]
|
|
let packetStr = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/", ack: false).packetString
|
|
let parsed = parser.parseSocketMessage(packetStr)!
|
|
|
|
XCTAssertEqual(parsed.type, .event)
|
|
XCTAssertTrue(compareAnyArray(input: parsed.data, expected: sendData))
|
|
}
|
|
|
|
func testJSONEmit() {
|
|
let sendData: [Any] = ["test", ["foobar": true, "hello": 1, "test": "hello", "null": NSNull()]]
|
|
let packetStr = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/", ack: false).packetString
|
|
let parsed = parser.parseSocketMessage(packetStr)!
|
|
|
|
XCTAssertEqual(parsed.type, .event)
|
|
XCTAssertTrue(compareAnyArray(input: parsed.data, expected: sendData))
|
|
}
|
|
|
|
func testArrayEmit() {
|
|
let sendData: [Any] = ["test", ["hello", 1, ["test": "test"]]]
|
|
let packetStr = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/", ack: false).packetString
|
|
let parsed = parser.parseSocketMessage(packetStr)!
|
|
|
|
XCTAssertEqual(parsed.type, .event)
|
|
XCTAssertTrue(compareAnyArray(input: parsed.data, expected: sendData))
|
|
}
|
|
|
|
func testBinaryEmit() {
|
|
let sendData: [Any] = ["test", data]
|
|
let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/", ack: false)
|
|
let parsed = parser.parseSocketMessage(packet.packetString)!
|
|
|
|
XCTAssertEqual(parsed.type, .binaryEvent)
|
|
XCTAssertEqual(packet.binary, [data])
|
|
XCTAssertTrue(compareAnyArray(input: parsed.data, expected: [
|
|
"test",
|
|
["_placeholder": true, "num": 0]
|
|
]))
|
|
}
|
|
|
|
func testMultipleBinaryEmit() {
|
|
let sendData: [Any] = ["test", ["data1": data, "data2": data2] as NSDictionary]
|
|
let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/", ack: false)
|
|
let parsed = parser.parseSocketMessage(packet.packetString)!
|
|
|
|
XCTAssertEqual(parsed.type, .binaryEvent)
|
|
|
|
let binaryObj = parsed.data[1] as! [String: Any]
|
|
let data1Loc = (binaryObj["data1"] as! [String: Any])["num"] as! Int
|
|
let data2Loc = (binaryObj["data2"] as! [String: Any])["num"] as! Int
|
|
|
|
XCTAssertEqual(packet.binary[data1Loc], data)
|
|
XCTAssertEqual(packet.binary[data2Loc], data2)
|
|
}
|
|
|
|
func testEmitWithAck() {
|
|
let sendData = ["test"]
|
|
let packetStr = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/", ack: false).packetString
|
|
let parsed = parser.parseSocketMessage(packetStr)!
|
|
|
|
XCTAssertEqual(parsed.type, .event)
|
|
XCTAssertEqual(parsed.id, 0)
|
|
XCTAssertTrue(compareAnyArray(input: parsed.data, expected: sendData))
|
|
}
|
|
|
|
func testEmitDataWithAck() {
|
|
let sendData: [Any] = ["test", data]
|
|
let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/", ack: false)
|
|
let parsed = parser.parseSocketMessage(packet.packetString)!
|
|
|
|
XCTAssertEqual(parsed.type, .binaryEvent)
|
|
XCTAssertEqual(parsed.id, 0)
|
|
XCTAssertTrue(compareAnyArray(input: parsed.data, expected: [
|
|
"test",
|
|
["_placeholder": true, "num": 0]
|
|
]))
|
|
XCTAssertEqual(packet.binary, [data])
|
|
}
|
|
|
|
// Acks
|
|
func testEmptyAck() {
|
|
let packetStr = SocketPacket.packetFromEmit([], id: 0, nsp: "/", ack: true).packetString
|
|
let parsed = parser.parseSocketMessage(packetStr)!
|
|
|
|
XCTAssertEqual(parsed.type, .ack)
|
|
XCTAssertEqual(parsed.id, 0)
|
|
XCTAssertTrue(compareAnyArray(input: parsed.data, expected: []))
|
|
}
|
|
|
|
func testNullAck() {
|
|
let sendData = [NSNull()]
|
|
let packetStr = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/", ack: true).packetString
|
|
let parsed = parser.parseSocketMessage(packetStr)!
|
|
|
|
XCTAssertEqual(parsed.type, .ack)
|
|
XCTAssertEqual(parsed.id, 0)
|
|
XCTAssertTrue(compareAnyArray(input: parsed.data, expected: sendData))
|
|
}
|
|
|
|
func testStringAck() {
|
|
let sendData = ["test"]
|
|
let packetStr = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/", ack: true).packetString
|
|
let parsed = parser.parseSocketMessage(packetStr)!
|
|
|
|
XCTAssertEqual(parsed.type, .ack)
|
|
XCTAssertEqual(parsed.id, 0)
|
|
XCTAssertTrue(compareAnyArray(input: parsed.data, expected: sendData))
|
|
}
|
|
|
|
func testJSONAck() {
|
|
let sendData = [["foobar": true, "hello": 1, "test": "hello", "null": NSNull()]]
|
|
let packetStr = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/", ack: true).packetString
|
|
let parsed = parser.parseSocketMessage(packetStr)!
|
|
|
|
XCTAssertEqual(parsed.type, .ack)
|
|
XCTAssertEqual(parsed.id, 0)
|
|
XCTAssertTrue(compareAnyArray(input: parsed.data, expected: sendData))
|
|
}
|
|
|
|
func testBinaryAck() {
|
|
let sendData = [data]
|
|
let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/", ack: true)
|
|
let parsed = parser.parseSocketMessage(packet.packetString)!
|
|
|
|
XCTAssertEqual(parsed.type, .binaryAck)
|
|
XCTAssertEqual(packet.binary, [data])
|
|
XCTAssertEqual(parsed.id, 0)
|
|
XCTAssertTrue(compareAnyArray(input: parsed.data, expected: [
|
|
["_placeholder": true, "num": 0]
|
|
]))
|
|
}
|
|
|
|
func testMultipleBinaryAck() {
|
|
let sendData = [["data1": data, "data2": data2]]
|
|
let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/", ack: true)
|
|
let parsed = parser.parseSocketMessage(packet.packetString)!
|
|
|
|
XCTAssertEqual(parsed.id, 0)
|
|
XCTAssertEqual(parsed.type, .binaryAck)
|
|
|
|
let binaryObj = parsed.data[0] as! [String: Any]
|
|
let data1Loc = (binaryObj["data1"] as! [String: Any])["num"] as! Int
|
|
let data2Loc = (binaryObj["data2"] as! [String: Any])["num"] as! Int
|
|
|
|
XCTAssertEqual(packet.binary[data1Loc], data)
|
|
XCTAssertEqual(packet.binary[data2Loc], data2)
|
|
}
|
|
|
|
func testBinaryStringPlaceholderInMessage() {
|
|
let engineString = "52-[\"test\",\"~~0\",{\"num\":0,\"_placeholder\":true},{\"_placeholder\":true,\"num\":1}]"
|
|
let manager = SocketManager(socketURL: URL(string: "http://localhost/")!)
|
|
|
|
var packet = try! manager.parseString(engineString)
|
|
|
|
XCTAssertEqual(packet.event, "test")
|
|
_ = packet.addData(data)
|
|
_ = packet.addData(data2)
|
|
XCTAssertEqual(packet.args[0] as? String, "~~0")
|
|
}
|
|
|
|
private func compareAnyArray(input: [Any], expected: [Any]) -> Bool {
|
|
guard input.count == expected.count else { return false }
|
|
|
|
return (input as NSArray).isEqual(to: expected)
|
|
}
|
|
|
|
let data = "test".data(using: String.Encoding.utf8)!
|
|
let data2 = "test2".data(using: String.Encoding.utf8)!
|
|
var parser: SocketParsable!
|
|
|
|
override func setUp() {
|
|
super.setUp()
|
|
|
|
parser = SocketManager(socketURL: URL(string: "http://localhost")!)
|
|
}
|
|
}
|