import Testing
@testable import PureXML
@Suite("RELAX NG data param facets")
struct RelaxNGDataParamTests {
private let rngNamespace = "xmlns=\"http://relaxng.org/ns/structure/1.0\" datatypeLibrary=\"http://www.w3.org/2001/XMLSchema-datatypes\""
private func valid(_ rng: String, _ xml: String) throws -> Bool {
try PureXML.Schema.RelaxNG(rng).validate(xml)
}
@Test("A minLength param constrains a data value")
func test_minLength() throws {
let rng = """
3
"""
#expect(try valid(rng, "abc"))
#expect(try !valid(rng, "ab"))
}
@Test("A maxInclusive param constrains a numeric data value")
func test_maxInclusive() throws {
let rng = """
10
"""
#expect(try valid(rng, "5"))
#expect(try !valid(rng, "20"))
}
@Test("A pattern param constrains a data value")
func test_pattern() throws {
let rng = """
[A-Z]{3}
"""
#expect(try valid(rng, "ABC"))
#expect(try !valid(rng, "abc"))
}
@Test("Data with no params still validates against its base type")
func test_noParams() throws {
let rng = ""
#expect(try valid(rng, "42"))
#expect(try !valid(rng, "x"))
}
}