<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:report="http://www.w3.org/2006/06/wsdl/ValidationReport" xmlns:tm="http://www.w3.org/2006/02/wsdl/TestMetadata">
	<xsl:output method="xml"/>
	
	<xsl:variable name="test-suite" select="document('../test-suite.xml')"/>
	<xsl:variable name="validating-implementations" select="implementations/implementation[@validation-results]"/>
	<xsl:template match="/">
		<xsl:processing-instruction name="xml-stylesheet">type="text/xsl" href="validation.xsl"</xsl:processing-instruction>
		<summary>
			<vendors>
				<xsl:for-each select="$validating-implementations">
					<vendor name="{@name}" />
				</xsl:for-each>
			</vendors>
			<xsl:for-each select="$test-suite/test-suite/test-case">
				<result name="{@id}">
					<xsl:variable name="expected1" select="document(@href)/tm:TestMetadata/tm:ExpectedResults"/>
					<xsl:if test="$expected1/tm:Successful = 'false'">
						<xsl:attribute name="violates-assertion"><xsl:value-of select="$expected1/tm:ViolatesAssertion"/></xsl:attribute>
					</xsl:if>
					<xsl:for-each select="document(@href)/tm:TestMetadata">
						<xsl:variable name="expected" select="tm:ExpectedResults"/>
						<xsl:variable name="identifier" select="normalize-space(tm:Identifier)"/>
						<xsl:for-each select="$validating-implementations">
							<xsl:variable name="report" select="document(@validation-results)/report:report"/>
							<implementation vendor="{@name}">
								<xsl:for-each select="$report/report:wsdl[normalize-space(report:identifier)=$identifier]">
									<xsl:choose>
										<xsl:when test="report:success = $expected/tm:Successful">
											<xsl:attribute name="result">passed</xsl:attribute>
										</xsl:when>
										<xsl:when test="report:success">
											<xsl:attribute name="result">failed</xsl:attribute>
										</xsl:when>
										<xsl:otherwise>
											<xsl:attribute name="result">missing</xsl:attribute>
										</xsl:otherwise>
									</xsl:choose>
									<xsl:if test="report:success = $expected/tm:Successful and $expected/tm:ViolatesAssertion = report:error/report:key">
										<xsl:attribute name="identified-assertion">true</xsl:attribute>
									</xsl:if>
<!--<source><xsl:copy-of select="."/></source>-->
									<xsl:if test="report:success = 'false'">
										<xsl:for-each select="report:error">
											<error>
												<xsl:if test="report:errorLocator/report:lineNumber > 0">
													<xsl:attribute name="line-number"><xsl:value-of select="report:errorLocator/report:lineNumber"/></xsl:attribute>
													<xsl:attribute name="column-number"><xsl:value-of select="report:errorLocator/report:columnNumber"/></xsl:attribute>
												</xsl:if>
												<xsl:attribute name="key"><xsl:value-of select="report:key"/></xsl:attribute>
												<xsl:value-of select="report:message"/>
											</error>
										</xsl:for-each>
									</xsl:if>
								</xsl:for-each>
							</implementation>
						</xsl:for-each>
						<!--
							<xsl:for-each select="$report/report:wsdl[substring-after(report:uri,'/documents/bad/')=concat(current()/folder,'/',current()/file)]">
							<xsl:value-of select="report:success"/>
							</xsl:for-each>
						-->
					</xsl:for-each>
				</result>
			</xsl:for-each>
		</summary>
	</xsl:template>
</xsl:stylesheet>

