rastrillo / native Public

Clone
git clone https://amadan.net/rastrillo/native

Plain git — no account needed to clone.

Download

Download this file

1import XCTest
2@testable import RastrilloApple
3
4final class StreamLinesTests: XCTestCase {
5 func testUTF8AndAllSSELineEndings() throws {
6 var parser = NativeStreamLines()
7 let input = "\u{FEFF}event: update\r\ndata: café 👩🏽‍💻\r\r: ping\n\n"
8 let lines = try input.utf8.compactMap { try parser.append($0) }
9 XCTAssertEqual(lines, ["event: update", "data: café 👩🏽‍💻", "", ": ping", ""])
10 }
11
12 func testInvalidUTF8DoesNotReachConsumer() throws {
13 var parser = NativeStreamLines()
14 XCTAssertNil(try parser.append(0xff))
15 XCTAssertThrowsError(try parser.append(10))
16 }
17
18 func testLineLimitRejectsBeforeUnboundedAllocation() throws {
19 var parser = NativeStreamLines(lineLimit: 4)
20 for byte in "data".utf8 { XCTAssertNil(try parser.append(byte)) }
21 XCTAssertThrowsError(try parser.append(58))
22 }
23
24 func testEventLimitSpansLinesAndResetsAtDelimiter() throws {
25 var parser = NativeStreamLines(lineLimit: 8, eventLimit: 8)
26 _ = try "1234\n5678\n".utf8.compactMap { try parser.append($0) }
27 XCTAssertThrowsError(try parser.append(57))
28 XCTAssertEqual(try parser.append(10), "")
29 XCTAssertNil(try parser.append(57))
30 }
31
32 func testUnterminatedLineIsNotDelivered() throws {
33 var parser = NativeStreamLines()
34 XCTAssertEqual(try "event: update\ndata: partial".utf8.compactMap { try parser.append($0) }, ["event: update"])
35 }
36}
37