import Testing
@testable import PureXML
@Suite("XML declaration")
struct XMLDeclarationTests {
@Test("version, encoding, and standalone are all surfaced")
func test_full() {
let declaration = PureXML.xmlDeclaration("")
#expect(declaration?.version == "1.0")
#expect(declaration?.encoding == "UTF-8")
#expect(declaration?.standalone == true)
}
@Test("standalone=no is parsed as false")
func test_standaloneNo() {
let declaration = PureXML.xmlDeclaration("")
#expect(declaration?.version == "1.1")
#expect(declaration?.standalone == false)
}
@Test("A version-only declaration leaves encoding and standalone nil")
func test_versionOnly() {
let declaration = PureXML.xmlDeclaration("")
#expect(declaration?.version == "1.0")
#expect(declaration?.encoding == nil)
#expect(declaration?.standalone == nil)
}
@Test("A document without a declaration has none")
func test_none() {
#expect(PureXML.xmlDeclaration("") == nil)
}
@Test("Pseudo-attributes out of order are rejected")
func test_outOfOrder() {
#expect(throws: PureXML.Parsing.ParseError.self) {
_ = try PureXML.parse("")
}
}
@Test("An illegal standalone value is rejected")
func test_badStandalone() {
#expect(throws: PureXML.Parsing.ParseError.self) {
_ = try PureXML.parse("")
}
}
@Test("An unknown pseudo-attribute is rejected")
func test_unknownPseudoAttribute() {
#expect(throws: PureXML.Parsing.ParseError.self) {
_ = try PureXML.parse("")
}
}
@Test("A valid declaration still parses the document tree")
func test_treeStillParses() throws {
let node = try PureXML.parse("hi")
guard case let .document(children) = node, let root = children.compactMap(\.element).first else {
Issue.record("no root")
return
}
#expect(root.name.localName == "r")
}
}