import Testing @testable import PureXML @Suite("Schematron abstract rules and extends") struct SchematronAbstractTests { private func validate(_ schema: String, _ xml: String) throws -> [PureXML.Validation.ValidationError] { try PureXML.Validation.Schematron(schema: schema).validate(xml) } @Test("A concrete rule extends an abstract rule's assertions") func test_extends() throws { let schema = """ element needs an id item needs a name """ // Both the inherited and the own assertion hold. #expect(try validate(schema, "").isEmpty) // The inherited assertion fails (no id). #expect(try validate(schema, "").count == 1) // Both fail. #expect(try validate(schema, "").count == 2) } @Test("An abstract rule does not fire on its own") func test_abstractDoesNotFire() throws { let schema = """ should never run """ // No concrete rule extends it, so nothing fires even on a matching element. #expect(try validate(schema, "").isEmpty) } @Test("An extends pulls in the abstract rule's let bindings") func test_extendsLet() throws { let schema = """ over the limit """ #expect(try validate(schema, "5").isEmpty) #expect(try !validate(schema, "50").isEmpty) } }