import XCTest @testable import RastrilloApple final class StreamLinesTests: XCTestCase { func testUTF8AndAllSSELineEndings() throws { var parser = NativeStreamLines() let input = "\u{FEFF}event: update\r\ndata: café 👩🏽‍💻\r\r: ping\n\n" let lines = try input.utf8.compactMap { try parser.append($0) } XCTAssertEqual(lines, ["event: update", "data: café 👩🏽‍💻", "", ": ping", ""]) } func testInvalidUTF8DoesNotReachConsumer() throws { var parser = NativeStreamLines() XCTAssertNil(try parser.append(0xff)) XCTAssertThrowsError(try parser.append(10)) } func testLineLimitRejectsBeforeUnboundedAllocation() throws { var parser = NativeStreamLines(lineLimit: 4) for byte in "data".utf8 { XCTAssertNil(try parser.append(byte)) } XCTAssertThrowsError(try parser.append(58)) } func testEventLimitSpansLinesAndResetsAtDelimiter() throws { var parser = NativeStreamLines(lineLimit: 8, eventLimit: 8) _ = try "1234\n5678\n".utf8.compactMap { try parser.append($0) } XCTAssertThrowsError(try parser.append(57)) XCTAssertEqual(try parser.append(10), "") XCTAssertNil(try parser.append(57)) } func testUnterminatedLineIsNotDelivered() throws { var parser = NativeStreamLines() XCTAssertEqual(try "event: update\ndata: partial".utf8.compactMap { try parser.append($0) }, ["event: update"]) } }