-
-
Notifications
You must be signed in to change notification settings - Fork 78
Expand file tree
/
Copy pathMultipeerKitTests.swift
More file actions
94 lines (74 loc) · 2.82 KB
/
MultipeerKitTests.swift
File metadata and controls
94 lines (74 loc) · 2.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
import XCTest
@testable import MultipeerKit
fileprivate extension MultipeerTransceiver {
var mockConnection: MockMultipeerConnection {
connection as! MockMultipeerConnection
}
}
fileprivate struct TestPayload: Hashable, Codable {
let n: Int
}
final class MultipeerKitTests: XCTestCase {
private func makeMockTransceiver() -> MultipeerTransceiver {
MultipeerTransceiver(connection: MockMultipeerConnection())
}
func testCallingResumeResumesConnection() {
let mock = makeMockTransceiver()
mock.resume()
XCTAssertEqual(mock.mockConnection.isRunning, true)
}
func testCallingStopStopsConnection() {
let mock = makeMockTransceiver()
mock.resume()
mock.stop()
XCTAssertEqual(mock.mockConnection.isRunning, false)
}
func testReceivingCustomPayload() {
let mock = makeMockTransceiver()
let tsPayload = TestPayload(n: 42)
let expect = XCTestExpectation(description: "Receive payload")
mock.receive(TestPayload.self) { payload, sender in
XCTAssertEqual(payload, tsPayload)
XCTAssertEqual(sender.id, mock.localPeerId!)
expect.fulfill()
}
mock.broadcast(tsPayload)
wait(for: [expect], timeout: 2)
}
@available(tvOS 13.0, *)
@available(iOS 13.0, *)
@available(macOS 10.15, *)
func testAsyncEventsStreamContinuesWithEachPeerEvent() throws {
let transceiver = makeMockTransceiver()
transceiver.resume()
let exp = expectation(description: "Async Peer")
exp.expectedFulfillmentCount = 4
Task.detached {
// Used to ensure that events are yielded in the right order.
var currentEvent = 0
for await event in transceiver.peerEvents {
switch event {
case .found(let peer):
XCTAssertEqual(peer.id, "A")
XCTAssertEqual(currentEvent, 0)
case .connected(let peer):
XCTAssertEqual(peer.id, "A")
XCTAssertEqual(currentEvent, 1)
case .disconnected(let peer):
XCTAssertEqual(peer.id, "A")
XCTAssertEqual(currentEvent, 2)
case .lost(let peer):
XCTAssertEqual(peer.id, "A")
XCTAssertEqual(currentEvent, 3)
}
currentEvent += 1
exp.fulfill()
}
}
let peer = transceiver.mockConnection.findFakePeer(with: "A")
transceiver.mockConnection.connectFakePeer(peer)
transceiver.mockConnection.disconnectFakePeer(peer)
transceiver.mockConnection.loseFakePeer(peer)
wait(for: [exp], timeout: 2)
}
}