c43dd3ca4a
A native iOS receiver so an iPhone can act as the second receiver, speaking the existing signaling + RTP protocol (no C++ changes) and mirroring the Android receiver (Phase 8) source-to-source. - RTP core (header/packet, jitter buffer, H.264 depacketizer) ported from the Android receiver - BSD-socket signaling server (dual-stack, most-recent-peer, never-throwing sends) + NSBonjourServices - VideoToolbox H.264 decode (in-band SPS/PPS, real-time, rebuilds on size change) -> AVSampleBufferDisplayLayer - PLI keyframe recovery (500 ms) + pendingOffer for late surface attach - XcodeGen project + bootstrap.sh; XCTest port of the Android suite + new coverage - .gitignore for generated artifacts; CHANGELOG; PHASES + MEMORY updated Status: authored; on-device validation pending a Mac + Xcode 26 + iPhone 16.
45 lines
1.3 KiB
Swift
45 lines
1.3 KiB
Swift
import XCTest
|
|
@testable import Receiver
|
|
|
|
final class LineAssemblerTests: XCTestCase {
|
|
private func bytes(_ s: String) -> [UInt8] { Array(s.utf8) }
|
|
|
|
func testSingleLine() {
|
|
let a = LineAssembler()
|
|
XCTAssertEqual(a.feed(bytes("hello")), [])
|
|
XCTAssertEqual(a.feed(bytes("\n")), ["hello"])
|
|
}
|
|
|
|
func testMultipleLinesInOneChunk() {
|
|
let a = LineAssembler()
|
|
XCTAssertEqual(a.feed(bytes("one\ntwo\nthree\n")), ["one", "two", "three"])
|
|
}
|
|
|
|
func testDropsCR() {
|
|
let a = LineAssembler()
|
|
XCTAssertEqual(a.feed(bytes("line\r\n")), ["line"])
|
|
}
|
|
|
|
func testIgnoresEmptyLine() {
|
|
let a = LineAssembler()
|
|
XCTAssertEqual(a.feed(bytes("\n")), [])
|
|
}
|
|
|
|
func testSplitAcrossChunks() {
|
|
let a = LineAssembler()
|
|
let payload = "{\"session_id\":\"x\"}"
|
|
var lines: [String] = []
|
|
lines += a.feed(Array(payload.prefix(5)))
|
|
lines += a.feed(Array(payload.suffix(from: 5)))
|
|
lines += a.feed(["\n".utf8.first!])
|
|
XCTAssertEqual(lines, [payload])
|
|
}
|
|
|
|
func testDropsOversizedLine() {
|
|
let a = LineAssembler()
|
|
let big = String(repeating: "a", count: SignalingMessage.maxMessageBytes + 1)
|
|
_ = a.feed(Array(big.utf8))
|
|
XCTAssertEqual(a.feed(bytes("\n")), [])
|
|
}
|
|
}
|