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")), []) } }