@testable import PureXML import Testing /// Every QName a schema names (a `type`/`base`/`itemType`/`memberTypes` type, an /// element/attribute/group/attributeGroup `ref`, an element `substitutionGroup`) /// must resolve to a declared component or a built-in. An undeclared reference /// was previously accepted at compile time and only surfaced (if at all) lazily /// during instance validation. The check is skipped when the document pulls in /// external definitions through `import`/`include`/`redefine`, which the default /// compile does not load. @Suite("Schema reference resolution") struct SchemaReferenceTests { private func compile(_ body: String) throws { _ = try PureXML.Schema.Document(""" \(body) """) } private func rejects(_ body: String) -> Bool { do { try compile(body) return false } catch { return true } } @Test("a reference to a declared component or a built-in resolves") func test_resolves() throws { try compile(#""#) try compile(#""#) try compile(#""#) } @Test("an undeclared reference is rejected") func test_undeclared() { #expect(rejects(#""#)) #expect(rejects(#""#)) #expect(rejects(#""#)) #expect(rejects(#""#)) } @Test("a reference value tolerates surrounding whitespace (whiteSpace collapse)") func test_whitespacePadded() throws { try compile("") } @Test("references are not checked when an import may supply them") func test_importSkipsCheck() throws { // A dangling reference into an imported namespace is tolerated: the default // compile does not load the import, so the reference cannot be verified. try compile(#""" """#) } }