Add client event for status changes. Closes #668
This commit is contained in:
parent
2e492ee9bc
commit
1eb39d650a
@ -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()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user