Don't parse twice for errors
This commit is contained in:
parent
49dfd7432c
commit
16eefa4abf
@ -27,7 +27,8 @@ class SocketParserTest: XCTestCase {
|
|||||||
"1/swift": ("/swift", [], [], -1),
|
"1/swift": ("/swift", [], [], -1),
|
||||||
"4\"ERROR\"": ("/", ["ERROR"], [], -1),
|
"4\"ERROR\"": ("/", ["ERROR"], [], -1),
|
||||||
"4{\"test\":2}": ("/", [["test": 2]], [], -1),
|
"4{\"test\":2}": ("/", [["test": 2]], [], -1),
|
||||||
"41": ("/", [1], [], -1)]
|
"41": ("/", [1], [], -1),
|
||||||
|
"4[1, \"hello\"]": ("/", [1, "hello"], [], -1)]
|
||||||
|
|
||||||
func testDisconnect() {
|
func testDisconnect() {
|
||||||
let message = "1"
|
let message = "1"
|
||||||
@ -99,6 +100,11 @@ class SocketParserTest: XCTestCase {
|
|||||||
validateParseResult(message)
|
validateParseResult(message)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func testErrorTypeArray() {
|
||||||
|
let message = "4[1, \"hello\"]"
|
||||||
|
validateParseResult(message)
|
||||||
|
}
|
||||||
|
|
||||||
func testInvalidInput() {
|
func testInvalidInput() {
|
||||||
let message = "8"
|
let message = "8"
|
||||||
switch testSocket.parseString(message) {
|
switch testSocket.parseString(message) {
|
||||||
@ -120,7 +126,7 @@ class SocketParserTest: XCTestCase {
|
|||||||
func validateParseResult(message: String) {
|
func validateParseResult(message: String) {
|
||||||
let validValues = SocketParserTest.packetTypes[message]!
|
let validValues = SocketParserTest.packetTypes[message]!
|
||||||
let packet = testSocket.parseString(message)
|
let packet = testSocket.parseString(message)
|
||||||
let type = message.substringWithRange(Range<String.Index>(message.startIndex..<message.startIndex.advancedBy(1)))
|
let type = String(message.characters.prefixUpTo(message.startIndex.advancedBy(1)))
|
||||||
if case let .Right(packet) = packet {
|
if case let .Right(packet) = packet {
|
||||||
XCTAssertEqual(packet.type, SocketPacket.PacketType(rawValue: Int(type) ?? -1)!)
|
XCTAssertEqual(packet.type, SocketPacket.PacketType(rawValue: Int(type) ?? -1)!)
|
||||||
XCTAssertEqual(packet.nsp, validValues.0)
|
XCTAssertEqual(packet.nsp, validValues.0)
|
||||||
|
|||||||
@ -107,17 +107,15 @@ extension SocketParsable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let d = message[reader.currentIndex.advancedBy(1)..<message.endIndex]
|
var dataArray = message[reader.currentIndex.advancedBy(1)..<message.endIndex]
|
||||||
|
|
||||||
switch parseData(d) {
|
if type == .Error && !dataArray.hasPrefix("[") && !dataArray.hasSuffix("]") {
|
||||||
case let .Left(err):
|
dataArray = "[" + dataArray + "]"
|
||||||
// Errors aren't always enclosed in an array
|
|
||||||
if case let .Right(data) = parseData("\([d as AnyObject])") {
|
|
||||||
return .Right(SocketPacket(type: type, data: data, id: Int(idString) ?? -1,
|
|
||||||
nsp: namespace, placeholders: placeholders))
|
|
||||||
} else {
|
|
||||||
return .Left(err)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switch parseData(dataArray) {
|
||||||
|
case let .Left(err):
|
||||||
|
return .Left(err)
|
||||||
case let .Right(data):
|
case let .Right(data):
|
||||||
return .Right(SocketPacket(type: type, data: data, id: Int(idString) ?? -1,
|
return .Right(SocketPacket(type: type, data: data, id: Int(idString) ?? -1,
|
||||||
nsp: namespace, placeholders: placeholders))
|
nsp: namespace, placeholders: placeholders))
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user