PureXML/Tests/SaveOptionsTests.swift
Mihaela Mihaljevic 6b12319c89 feat(emit): XML declaration save-option parity
Add includeXMLDeclaration, xmlVersion, encodingName, and standalone to
Emitting.Options, with a single shared xmlDeclaration computation consumed
by both the tree serializer and the incremental writer. Writer gains
writeStartDocument(). Defaults stay off so fragment output is unchanged.

Closes #34
2026-06-08 02:57:27 +02:00

39 lines
1.5 KiB
Swift

@testable import PureXML
import Testing
@Suite("Save options")
struct SaveOptionsTests {
@Test("The serializer emits the XML declaration when requested")
func test_declaration() {
let options = PureXML.Emitting.Options(prettyPrint: false, includeXMLDeclaration: true)
let xml = PureXML.serialize(.element(.init("r")), options: options)
#expect(xml == "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<r/>")
}
@Test("No declaration is emitted by default")
func test_noDeclarationByDefault() {
#expect(PureXML.serialize(.element(.init("r")), options: .compact) == "<r/>")
}
@Test("Standalone and an omitted encoding are honored")
func test_declarationVariants() {
let options = PureXML.Emitting.Options(
prettyPrint: false,
includeXMLDeclaration: true,
encodingName: nil,
standalone: true,
)
let xml = PureXML.serialize(.element(.init("r")), options: options)
#expect(xml == "<?xml version=\"1.0\" standalone=\"yes\"?>\n<r/>")
}
@Test("The writer emits the declaration via writeStartDocument")
func test_writerDeclaration() {
var writer = PureXML.Emitting.Writer(options: .init(prettyPrint: false, includeXMLDeclaration: true))
writer.writeStartDocument()
writer.writeStartElement("r")
writer.writeEndElement()
#expect(writer.output == "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<r/>")
}
}