Add client event for status changes. Closes #668

This commit is contained in:
Erik 2017-05-07 10:52:17 -04:00
parent 2e492ee9bc
commit 1eb39d650a
No known key found for this signature in database
GPG Key ID: 4930B7C5FBC1A69D
2 changed files with 62 additions and 35 deletions

View File

@ -10,77 +10,67 @@ import XCTest
@testable import SocketIO @testable import SocketIO
class SocketSideEffectTest: XCTestCase { class SocketSideEffectTest: XCTestCase {
let data = "test".data(using: String.Encoding.utf8)!
let data2 = "test2".data(using: String.Encoding.utf8)!
private var socket: SocketIOClient!
override func setUp() {
super.setUp()
socket = SocketIOClient(socketURL: URL(string: "http://localhost/")!)
socket.setTestable()
}
func testInitialCurrentAck() { func testInitialCurrentAck() {
XCTAssertEqual(socket.currentAck, -1) XCTAssertEqual(socket.currentAck, -1)
} }
func testFirstAck() { func testFirstAck() {
socket.emitWithAck("test").timingOut(after: 0) {data in} socket.emitWithAck("test").timingOut(after: 0) {data in}
XCTAssertEqual(socket.currentAck, 0) XCTAssertEqual(socket.currentAck, 0)
} }
func testSecondAck() { func testSecondAck() {
socket.emitWithAck("test").timingOut(after: 0) {data in} socket.emitWithAck("test").timingOut(after: 0) {data in}
socket.emitWithAck("test").timingOut(after: 0) {data in} socket.emitWithAck("test").timingOut(after: 0) {data in}
XCTAssertEqual(socket.currentAck, 1) XCTAssertEqual(socket.currentAck, 1)
} }
func testHandleAck() { func testHandleAck() {
let expect = expectation(description: "handled ack") let expect = expectation(description: "handled ack")
socket.emitWithAck("test").timingOut(after: 0) {data in socket.emitWithAck("test").timingOut(after: 0) {data in
XCTAssertEqual(data[0] as? String, "hello world") XCTAssertEqual(data[0] as? String, "hello world")
expect.fulfill() expect.fulfill()
} }
socket.parseSocketMessage("30[\"hello world\"]") socket.parseSocketMessage("30[\"hello world\"]")
waitForExpectations(timeout: 3, handler: nil) waitForExpectations(timeout: 3, handler: nil)
} }
func testHandleAck2() { func testHandleAck2() {
let expect = expectation(description: "handled ack2") let expect = expectation(description: "handled ack2")
socket.emitWithAck("test").timingOut(after: 0) {data in socket.emitWithAck("test").timingOut(after: 0) {data in
XCTAssertTrue(data.count == 2, "Wrong number of ack items") XCTAssertTrue(data.count == 2, "Wrong number of ack items")
expect.fulfill() expect.fulfill()
} }
socket.parseSocketMessage("61-0[{\"_placeholder\":true,\"num\":0},{\"test\":true}]") socket.parseSocketMessage("61-0[{\"_placeholder\":true,\"num\":0},{\"test\":true}]")
socket.parseBinaryData(Data()) socket.parseBinaryData(Data())
waitForExpectations(timeout: 3, handler: nil) waitForExpectations(timeout: 3, handler: nil)
} }
func testHandleEvent() { func testHandleEvent() {
let expect = expectation(description: "handled event") let expect = expectation(description: "handled event")
socket.on("test") {data, ack in socket.on("test") {data, ack in
XCTAssertEqual(data[0] as? String, "hello world") XCTAssertEqual(data[0] as? String, "hello world")
expect.fulfill() expect.fulfill()
} }
socket.parseSocketMessage("2[\"test\",\"hello world\"]") socket.parseSocketMessage("2[\"test\",\"hello world\"]")
waitForExpectations(timeout: 3, handler: nil) waitForExpectations(timeout: 3, handler: nil)
} }
func testHandleStringEventWithQuotes() { func testHandleStringEventWithQuotes() {
let expect = expectation(description: "handled event") let expect = expectation(description: "handled event")
socket.on("test") {data, ack in socket.on("test") {data, ack in
XCTAssertEqual(data[0] as? String, "\"hello world\"") XCTAssertEqual(data[0] as? String, "\"hello world\"")
expect.fulfill() expect.fulfill()
} }
socket.parseSocketMessage("2[\"test\",\"\\\"hello world\\\"\"]") socket.parseSocketMessage("2[\"test\",\"\\\"hello world\\\"\"]")
waitForExpectations(timeout: 3, handler: nil) waitForExpectations(timeout: 3, handler: nil)
} }
func testHandleOnceEvent() { func testHandleOnceEvent() {
let expect = expectation(description: "handled event") let expect = expectation(description: "handled event")
socket.once("test") {data, ack in socket.once("test") {data, ack in
@ -88,11 +78,11 @@ class SocketSideEffectTest: XCTestCase {
XCTAssertEqual(self.socket.testHandlers.count, 0) XCTAssertEqual(self.socket.testHandlers.count, 0)
expect.fulfill() expect.fulfill()
} }
socket.parseSocketMessage("2[\"test\",\"hello world\"]") socket.parseSocketMessage("2[\"test\",\"hello world\"]")
waitForExpectations(timeout: 3, handler: nil) waitForExpectations(timeout: 3, handler: nil)
} }
func testOffWithEvent() { func testOffWithEvent() {
socket.on("test") {data, ack in } socket.on("test") {data, ack in }
XCTAssertEqual(socket.testHandlers.count, 1) XCTAssertEqual(socket.testHandlers.count, 1)
@ -101,7 +91,7 @@ class SocketSideEffectTest: XCTestCase {
socket.off("test") socket.off("test")
XCTAssertEqual(socket.testHandlers.count, 0) XCTAssertEqual(socket.testHandlers.count, 0)
} }
func testOffWithId() { func testOffWithId() {
let handler = socket.on("test") {data, ack in } let handler = socket.on("test") {data, ack in }
XCTAssertEqual(socket.testHandlers.count, 1) XCTAssertEqual(socket.testHandlers.count, 1)
@ -110,7 +100,7 @@ class SocketSideEffectTest: XCTestCase {
socket.off(id: handler) socket.off(id: handler)
XCTAssertEqual(socket.testHandlers.count, 1) XCTAssertEqual(socket.testHandlers.count, 1)
} }
func testHandlesErrorPacket() { func testHandlesErrorPacket() {
let expect = expectation(description: "Handled error") let expect = expectation(description: "Handled error")
socket.on("error") {data, ack in socket.on("error") {data, ack in
@ -118,11 +108,11 @@ class SocketSideEffectTest: XCTestCase {
expect.fulfill() expect.fulfill()
} }
} }
socket.parseSocketMessage("4\"test error\"") socket.parseSocketMessage("4\"test error\"")
waitForExpectations(timeout: 3, handler: nil) waitForExpectations(timeout: 3, handler: nil)
} }
func testHandleBinaryEvent() { func testHandleBinaryEvent() {
let expect = expectation(description: "handled binary event") let expect = expectation(description: "handled binary event")
socket.on("test") {data, ack in socket.on("test") {data, ack in
@ -131,12 +121,12 @@ class SocketSideEffectTest: XCTestCase {
expect.fulfill() expect.fulfill()
} }
} }
socket.parseSocketMessage("51-[\"test\",{\"test\":{\"_placeholder\":true,\"num\":0}}]") socket.parseSocketMessage("51-[\"test\",{\"test\":{\"_placeholder\":true,\"num\":0}}]")
socket.parseBinaryData(data) socket.parseBinaryData(data)
waitForExpectations(timeout: 3, handler: nil) waitForExpectations(timeout: 3, handler: nil)
} }
func testHandleMultipleBinaryEvent() { func testHandleMultipleBinaryEvent() {
let expect = expectation(description: "handled multiple binary event") let expect = expectation(description: "handled multiple binary event")
socket.on("test") {data, ack in socket.on("test") {data, ack in
@ -147,22 +137,53 @@ class SocketSideEffectTest: XCTestCase {
expect.fulfill() expect.fulfill()
} }
} }
socket.parseSocketMessage("52-[\"test\",{\"test\":{\"_placeholder\":true,\"num\":0},\"test2\":{\"_placeholder\":true,\"num\":1}}]") socket.parseSocketMessage("52-[\"test\",{\"test\":{\"_placeholder\":true,\"num\":0},\"test2\":{\"_placeholder\":true,\"num\":1}}]")
socket.parseBinaryData(data) socket.parseBinaryData(data)
socket.parseBinaryData(data2) socket.parseBinaryData(data2)
waitForExpectations(timeout: 3, handler: nil) waitForExpectations(timeout: 3, handler: nil)
} }
func testSocketManager() { func testSocketManager() {
let manager = SocketClientManager.sharedManager let manager = SocketClientManager.sharedManager
manager["test"] = socket manager["test"] = socket
XCTAssert(manager["test"] === socket, "failed to get socket") XCTAssert(manager["test"] === socket, "failed to get socket")
manager["test"] = nil manager["test"] = nil
XCTAssert(manager["test"] == nil, "socket not removed") XCTAssert(manager["test"] == nil, "socket not removed")
} }
func testChangingStatusCallsStatusChangeHandler() {
let expect = expectation(description: "The client should announce when the status changes")
let statusChange = SocketIOClientStatus.connecting
socket.on("statusChange") {data, ack in
guard let status = data[0] as? SocketIOClientStatus else {
XCTFail("Status should be one of the defined statuses")
return
}
XCTAssertEqual(status, statusChange, "The status changed should be the one set")
expect.fulfill()
}
socket.setTestStatus(statusChange)
waitForExpectations(timeout: 0.2)
}
let data = "test".data(using: String.Encoding.utf8)!
let data2 = "test2".data(using: String.Encoding.utf8)!
private var socket: SocketIOClient!
override func setUp() {
super.setUp()
socket = SocketIOClient(socketURL: URL(string: "http://localhost/")!)
socket.setTestable()
}
} }

View File

@ -47,6 +47,8 @@ open class SocketIOClient : NSObject, SocketIOClientSpec, SocketEngineClient, So
default: default:
break break
} }
handleEvent("statusChange", data: [status], isInternalMessage: true)
} }
} }
@ -551,6 +553,10 @@ open class SocketIOClient : NSObject, SocketIOClientSpec, SocketEngineClient, So
status = .connected status = .connected
} }
func setTestStatus(_ status: SocketIOClientStatus) {
self.status = status
}
func setTestEngine(_ engine: SocketEngineSpec?) { func setTestEngine(_ engine: SocketEngineSpec?) {
self.engine = engine self.engine = engine
} }