@testable import PureXML import Testing @Suite("XSLT functions: generate-id, system-property, *-available") struct XSLTFunctionTests { private let xsl = "xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"" private func transform(_ stylesheet: String, _ source: String) throws -> String { try PureXML.XSLT.transform(stylesheet: stylesheet, source: source) } private func valueOf(_ select: String) -> String { """ """ } @Test("system-property reports the XSLT version and vendor") func test_systemProperty() throws { #expect(try transform(valueOf("system-property('xsl:version')"), "") == "1") #expect(try transform(valueOf("system-property('xsl:vendor')"), "") == "PureXML") } @Test("element-available is true for a supported instruction, false otherwise") func test_elementAvailable() throws { #expect(try transform(valueOf("element-available('xsl:if')"), "") == "true") #expect(try transform(valueOf("element-available('xsl:nonesuch')"), "") == "false") } @Test("function-available is true for known functions, false otherwise") func test_functionAvailable() throws { #expect(try transform(valueOf("function-available('concat')"), "") == "true") #expect(try transform(valueOf("function-available('generate-id')"), "") == "true") #expect(try transform(valueOf("function-available('made-up')"), "") == "false") } @Test("generate-id is stable per node and differs between nodes") func test_generateId() throws { // Same node twice is equal; two different nodes are not. let same = """ """ let differ = """ """ #expect(try transform(same, "") == "true") #expect(try transform(differ, "") == "false") } @Test("generate-id produces an XML-name-shaped id") func test_generateIdShape() throws { let out = try transform(valueOf("generate-id(.)"), "") #expect(out.hasPrefix("N")) #expect(out.count > 1) } }