Ship the OpenAPIKit-style validation layer (builtin rules, warnings channel, Validator tiers, coverage gates) and wire XSD compile checks through it. Advance #161 with chameleon include validation, multi-container reference resolution, and include targetNamespace composition rules so merged schema sets compile correctly when a schemaLoader is provided.
28 lines
1.2 KiB
Swift
28 lines
1.2 KiB
Swift
@testable import PureXML
|
|
import Testing
|
|
|
|
/// Per-rule isolation tests (Validation rules structural).
|
|
@Suite("Validation rules structural")
|
|
struct ValidationRuleStructuralTests {
|
|
@Test("Structural.uniqueAttributes reports each duplicate at the element path")
|
|
func test_uniqueAttributes() {
|
|
let element = PureXML.Model.Element("a", attributes: [.init("x", "1"), .init("x", "2")])
|
|
let node = PureXML.Model.Node.document([.element(element)])
|
|
let errors = PureXML.Validation.Validator<Void>.blank
|
|
.validating(PureXML.Validation.Structural.uniqueAttributes)
|
|
.errors(for: node, in: ())
|
|
#expect(errors.count == 1)
|
|
#expect(errors.first?.reason == "Duplicate attribute 'x' on <a>")
|
|
#expect(ValidationRuleTestSupport.path(errors[0]) == ["a"])
|
|
}
|
|
|
|
@Test("Structural.uniqueAttributes accepts distinct attribute names")
|
|
func test_uniqueAttributes_succeeds() {
|
|
let node = PureXML.Model.Node.document([.element(.init("a", attributes: [.init("x", "1"), .init("y", "2")]))])
|
|
let errors = PureXML.Validation.Validator<Void>.blank
|
|
.validating(PureXML.Validation.Structural.uniqueAttributes)
|
|
.errors(for: node, in: ())
|
|
#expect(errors.isEmpty)
|
|
}
|
|
}
|