@testable import PureXML
import Testing
@Suite("XSD identity constraints")
struct XSDIdentityTests {
private func validate(_ xsd: String, _ xml: String) throws -> [PureXML.Validation.ValidationError] {
try PureXML.Schema.Document(xsd).validate(xml)
}
private let head = ""
@Test("xs:unique rejects a duplicated field value")
func test_unique() throws {
let xsd = """
\(head)
"""
#expect(try validate(xsd, "
").isEmpty)
#expect(try !validate(xsd, "
").isEmpty)
// unique tolerates a missing field
#expect(try validate(xsd, "
").isEmpty)
}
@Test("xs:key requires every field to be present and distinct")
func test_key() throws {
let xsd = """
\(head)
"""
#expect(try validate(xsd, "
").isEmpty)
#expect(try !validate(xsd, "
").isEmpty)
// a key field may not be absent
#expect(try !validate(xsd, "
").isEmpty)
}
@Test("xs:keyref requires a matching key value")
func test_keyref() throws {
let xsd = """
\(head)
"""
let valid = ""
let dangling = ""
#expect(try validate(xsd, valid).isEmpty)
#expect(try !validate(xsd, dangling).isEmpty)
}
}