import Testing @testable import PureXML @Suite("RELAX NG compact datatype parameter blocks") struct RelaxNGCompactParamTests { private func valid(_ rnc: String, _ xml: String) throws -> Bool { try PureXML.Schema.RelaxNG(compact: rnc).validate(xml) } @Test("A minLength param block constrains a data value") func test_minLength() throws { let rnc = "element code { xsd:string { minLength = \"3\" } }" #expect(try valid(rnc, "abc")) #expect(try !valid(rnc, "ab")) } @Test("A maxInclusive param block constrains a numeric value") func test_maxInclusive() throws { let rnc = "element n { xsd:integer { maxInclusive = \"10\" } }" #expect(try valid(rnc, "5")) #expect(try !valid(rnc, "20")) } @Test("Multiple params in one block all apply") func test_multipleParams() throws { let rnc = "element code { xsd:string { minLength = \"2\" maxLength = \"4\" } }" #expect(try valid(rnc, "abc")) #expect(try !valid(rnc, "a")) #expect(try !valid(rnc, "abcde")) } @Test("A datatype with no param block still validates against its base") func test_noParams() throws { let rnc = "element n { xsd:integer }" #expect(try valid(rnc, "42")) #expect(try !valid(rnc, "x")) } }