plain text then 1 < 2 & ok
") #expect(node.firstElement?.text == "plain text then 1 < 2 & ok") } @Test("Ampersand-free text is returned verbatim") func test_textWithoutEntities() throws { let node = try PureXML.parse("just plain ascii content, no references
") #expect(node.firstElement?.text == "just plain ascii content, no references") } @Test("A CRLF inside text content folds to a single line feed") func test_textCRLF() throws { let node = try PureXML.parse("line one\r\nline two
") #expect(node.firstElement?.text == "line one\nline two") } @Test("Non-ASCII text content round-trips unchanged") func test_nonASCIIText() throws { let node = try PureXML.parse("caf\u{e9} na\u{ef}ve r\u{e9}sum\u{e9}
") #expect(node.firstElement?.text == "caf\u{e9} na\u{ef}ve r\u{e9}sum\u{e9}") } @Test("An over-long ASCII name is rejected, not silently truncated") func test_longNameRejected() { let limits = PureXML.Parsing.Limits(maxNameLength: 4) #expect(throws: PureXML.Parsing.ParseError.self) { try PureXML.parse("a > b
") #expect(node.firstElement?.text == "a > b") } } private extension PureXML.Model.Node { var firstElement: PureXML.Model.Element? { guard case let .document(children) = self else { return element } for child in children { if case let .element(element) = child { return element } } return nil } }