@testable import PureXML import Testing @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")) } }