Skip to content

Commit 437c088

Browse files
committed
don't use placeholder strings for binary
1 parent 4ea3f40 commit 437c088

File tree

4 files changed

+32
-14
lines changed

4 files changed

+32
-14
lines changed

SocketIO-MacTests/SocketBasicPacketTest.swift

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,4 +145,20 @@ class SocketBasicPacketTest: XCTestCase {
145145
XCTAssertEqual(packet.packetString, expectedSendString)
146146
XCTAssertEqual(packet.binary, [data2, data])
147147
}
148+
149+
func testBinaryStringPlaceholderInMessage() {
150+
let engineString = "52-[\"test\",\"~~0\",{\"num\":0,\"_placeholder\":true},{\"num\":1,\"_placeholder\":true}]"
151+
let socket = SocketIOClient(socketURL: NSURL())
152+
socket.setTestable()
153+
154+
if case let .Right(packet) = socket.parseString(engineString) {
155+
var packet = packet
156+
XCTAssertEqual(packet.event, "test")
157+
packet.addData(data)
158+
packet.addData(data2)
159+
XCTAssertEqual(packet.args[0] as? String, "~~0")
160+
} else {
161+
XCTFail()
162+
}
163+
}
148164
}

SocketIO-MacTests/SocketParserTest.swift

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,10 @@ class SocketParserTest: XCTestCase {
1818
"25[\"test\"]": ("/", ["test"], [], 5),
1919
"2[\"test\",\"~~0\"]": ("/", ["test", "~~0"], [], -1),
2020
"2/swift,[\"testArrayEmitReturn\",[\"test3\",\"test4\"]]": ("/swift", ["testArrayEmitReturn", ["test3", "test4"]], [], -1),
21-
"51-/swift,[\"testMultipleItemsWithBufferEmitReturn\",[1,2],{\"test\":\"bob\"},25,\"polo\",{\"_placeholder\":true,\"num\":0}]": ("/swift", ["testMultipleItemsWithBufferEmitReturn", [1, 2], ["test": "bob"], 25, "polo", "~~0"], [], -1),
21+
"51-/swift,[\"testMultipleItemsWithBufferEmitReturn\",[1,2],{\"test\":\"bob\"},25,\"polo\",{\"_placeholder\":true,\"num\":0}]": ("/swift", ["testMultipleItemsWithBufferEmitReturn", [1, 2], ["test": "bob"], 25, "polo", ["_placeholder": true, "num": 0]], [], -1),
2222
"3/swift,0[[\"test3\",\"test4\"]]": ("/swift", [["test3", "test4"]], [], 0),
23-
"61-/swift,19[[1,2],{\"test\":\"bob\"},25,\"polo\",{\"_placeholder\":true,\"num\":0}]": ("/swift", [ [1, 2], ["test": "bob"], 25, "polo", "~~0"], [], 19),
23+
"61-/swift,19[[1,2],{\"test\":\"bob\"},25,\"polo\",{\"_placeholder\":true,\"num\":0}]":
24+
("/swift", [ [1, 2], ["test": "bob"], 25, "polo", ["_placeholder": true, "num": 0]], [], 19),
2425
"4/swift,": ("/swift", [], [], -1),
2526
"0/swift": ("/swift", [], [], -1),
2627
"1/swift": ("/swift", [], [], -1),
@@ -123,8 +124,8 @@ class SocketParserTest: XCTestCase {
123124
if case let .Right(packet) = packet {
124125
XCTAssertEqual(packet.type, SocketPacket.PacketType(rawValue: Int(type) ?? -1)!)
125126
XCTAssertEqual(packet.nsp, validValues.0)
126-
XCTAssertTrue((packet.data as NSArray).isEqualToArray(validValues.1))
127-
XCTAssertTrue((packet.binary as NSArray).isEqualToArray(validValues.2))
127+
XCTAssertTrue((packet.data as NSArray).isEqualToArray(validValues.1), "\(packet.data)")
128+
XCTAssertTrue((packet.binary as NSArray).isEqualToArray(validValues.2), "\(packet.binary)")
128129
XCTAssertEqual(packet.id, validValues.3)
129130
} else {
130131
XCTFail()

Source/SocketPacket.swift

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -187,19 +187,21 @@ struct SocketPacket {
187187
data = data.map(_fillInPlaceholders)
188188
}
189189

190-
// Helper method that looks for placeholder strings
190+
// Helper method that looks for placeholders
191191
// If object is a collection it will recurse
192192
// Returns the object if it is not a placeholder string or the corresponding
193193
// binary data
194194
private func _fillInPlaceholders(object: AnyObject) -> AnyObject {
195195
switch object {
196-
case let string as String where string["~~(\\d)"].groups() != nil:
197-
return binary[Int(string["~~(\\d)"].groups()![1])!]
198196
case let dict as NSDictionary:
199-
return dict.reduce(NSMutableDictionary(), combine: {cur, keyValue in
200-
cur[keyValue.0 as! NSCopying] = _fillInPlaceholders(keyValue.1)
201-
return cur
202-
})
197+
if dict["_placeholder"] as? Bool ?? false {
198+
return binary[dict["num"] as! Int]
199+
} else {
200+
return dict.reduce(NSMutableDictionary(), combine: {cur, keyValue in
201+
cur[keyValue.0 as! NSCopying] = _fillInPlaceholders(keyValue.1)
202+
return cur
203+
})
204+
}
203205
case let arr as [AnyObject]:
204206
return arr.map(_fillInPlaceholders)
205207
default:

Source/SocketParsable.swift

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,12 +111,11 @@ extension SocketParsable {
111111
}
112112

113113
let d = message[parser.currentIndex.advancedBy(1)..<message.endIndex]
114-
let noPlaceholders = d["(\\{\"_placeholder\":true,\"num\":(\\d*)\\})"] <~ "\"~~$2\""
115114

116-
switch parseData(noPlaceholders) {
115+
switch parseData(d) {
117116
case let .Left(err):
118117
// Errors aren't always enclosed in an array
119-
if case let .Right(data) = parseData("\([noPlaceholders as AnyObject])") {
118+
if case let .Right(data) = parseData("\([d as AnyObject])") {
120119
return .Right(SocketPacket(type: type, data: data, id: Int(idString) ?? -1,
121120
nsp: namespace, placeholders: placeholders))
122121
} else {

0 commit comments

Comments
 (0)