ilene 2002/10/31 08:26:55 Modified: test tableResults.xsl Log: Updated tableResults.xsl. Revision Changes Path 1.2 +510 -510 xml-xalan/test/tableResults.xsl Index: tableResults.xsl =================================================================== RCS file: /home/cvs/xml-xalan/test/tableResults.xsl,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- tableResults.xsl 31 Oct 2002 15:20:07 -0000 1.1 +++ tableResults.xsl 31 Oct 2002 16:26:55 -0000 1.2 @@ -1,510 +1,510 @@ -<?xml version="1.0"?> -<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - xmlns:redirect="org.apache.xalan.xslt.extensions.Redirect" - xmlns:xalan="http://xml.apache.org/xslt" - extension-element-prefixes="redirect" version="1.0"> - <xsl:output method="xml" indent="yes" xalan:indent-amount="2" - doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" - doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" /> - -<!-- FileName: tableResults.xsl --> -<!-- Author: Gordon Chiu <[EMAIL PROTECTED]> --> -<!-- Date: 10/10/2002 --> -<!-- Purpose: Format org.apache.qetest.XMLFileLogger logFile results - into a table-based HTML page --> -<!-- Modified: 10/17/2002 removed 'trax', is 'systemId' - 10/22/2002 takes directory as argument --> - -<!-- Quick how to use: - - Note: If using Xalan to run this stylesheet, it requires Xalan >= 2.4.1. - - This stylesheet operates on the results of a build alltest.conf. - 1. In place of viewResults.xsl to analyze results: - In Windows, set RESULTSCANNER=tableResults.xsl - Execute viewResults.bat results-alltest\conf\sax\results.xml. - (the stylesheet will find the other xml files). - In UNIX, modify viewResults.sh to call use tableResults.xsl. - 2. To compare a current run against a previous run: - Run the stylesheet with the parameter 'compareAgainst' which - points to the results-alltest/conf directory of another test run. - 3. To analyze results from build alltest.conf.xsltc, run the - stylesheet with the parameter 'resultDir' which points to the - results-alltest.xsltc/conf directory of the xsltc test run. - ---> - - <!-- Directory of results to compare against - Specify a directory of old results to get cross comparison. --> - <xsl:param name="resultDir" select="string('results-alltest/conf')"/> - <xsl:param name="compareAgainst" select="$resultDir"/> - - <!-- Basic Structure of output document --> - <xsl:template match="resultsfile"> - <HTML> - <HEAD> - <STYLE TYPE="text/css"> - body { font-family: Verdana; font-size: 9pt; } - tr { font-family: Verdana; font-size: 9pt; } - td { font-family: Verdana; font-size: 9pt; } - </STYLE> - </HEAD> - <BODY> - <xsl:apply-templates select="testfile[last()]"/> - </BODY> - </HTML> - </xsl:template> - - <!-- Output information about the test run from the hashtable --> - <xsl:template match="testfile" mode="hashElements"> - <xsl:value-of select="hashtable/hashitem[@key='version.xalan2x']"/> (<xsl:value-of select="@time"/>) and - <xsl:value-of select="hashtable/hashitem[@key='version.xerces2']"/><BR/> - <xsl:value-of select="hashtable/hashitem[@key='java.vm.vendor']"/> - JDK <xsl:value-of select="hashtable/hashitem[@key='java.vm.version']"/><BR/> - Test run by: <xsl:value-of select="hashtable/hashitem[@key='user.name']"/> - on a <xsl:value-of select="hashtable/hashitem[@key='os.arch']"/> - running <xsl:value-of select="hashtable/hashitem[@key='os.name']"/> - </xsl:template> - - <!-- Output the summary and category summaries for test sets. --> - <xsl:template match="testfile"> - <!-- Set up two variables for test results, and old test results. --> - <xsl:variable name="resultsfile"> - <xsl:value-of select="document(concat($resultDir,'/dom/results.xml'))/resultsfile - | document(concat($resultDir,'/sax/results.xml'))/resultsfile - | document(concat($resultDir,'/stream/results.xml'))/resultsfile - | document(concat($resultDir,'/file/results.xml'))/resultsfile - | document(concat($resultDir,'/systemId/results.xml'))/resultsfile - | document(concat($resultDir,'/localPath/results.xml'))/resultsfile"/> - </xsl:variable> - <xsl:variable name="oldfile"> - <xsl:value-of select="document(concat($compareAgainst,'/dom/results.xml'))/resultsfile - | document(concat($compareAgainst,'/sax/results.xml'))/resultsfile - | document(concat($compareAgainst,'/stream/results.xml'))/resultsfile - | document(concat($compareAgainst,'/file/results.xml'))/resultsfile - | document(concat($compareAgainst,'/systemId/results.xml'))/resultsfile - | document(concat($compareAgainst,'/localPath/results.xml'))/resultsfile"/> - </xsl:variable> - <!-- Number of flavours; used for column widths --> - <xsl:variable name="flavs" select="count($resultsfile/testfile)"/> - <TABLE BORDER="1" CELLPADDING="5" CELLSPACING="0"> - <TR> - <xsl:element name="TD"> - <xsl:attribute name="COLSPAN"> - <xsl:value-of select="$flavs + 2"/> - </xsl:attribute> - <B>Conformance Test Results on <xsl:value-of select="@time"/></B> - </xsl:element> - </TR> - <TR> - <TD COLSPAN="1"><B>Environment</B></TD> - <xsl:element name="TD"> - <xsl:attribute name="COLSPAN"> - <xsl:value-of select="$flavs + 1"/> - </xsl:attribute> - <xsl:variable name="flavor"> - <xsl:value-of select="hashtable/hashitem[@key='flavor']"/> - </xsl:variable> - <b>Currently Tested:</b><br/> - <xsl:apply-templates select="." mode="hashElements"/><br/> - <b>Compared Against:</b><br/> - <xsl:apply-templates select="$oldfile/testfile[hashtable/hashitem[@key='flavor'] = $flavor]" mode="hashElements"/> - </xsl:element> - </TR> - <xsl:call-template name="teststatus"> - <xsl:with-param name="resultsfile" select="$resultsfile"/> - </xsl:call-template> - <TR> - <xsl:element name="TD"> - <xsl:attribute name="COLSPAN"> - <xsl:value-of select="$flavs + 2"/> - </xsl:attribute><B>Category Summaries</B> - </xsl:element> - </TR> - <xsl:for-each select="testcase"> - <xsl:call-template name="testcase"> - <xsl:with-param name="resultsfile" select="$resultsfile"/> - <xsl:with-param name="oldfile" select="$oldfile"/> - <xsl:with-param name="bg"> - <xsl:choose> - <xsl:when test="position() mod 2 = 1">#F0F0F0</xsl:when> - <xsl:otherwise>#FFFFFF</xsl:otherwise> - </xsl:choose> - </xsl:with-param> - </xsl:call-template> - </xsl:for-each> - <TR> - <xsl:element name="TD"> - <xsl:attribute name="COLSPAN"> - <xsl:value-of select="$flavs + 2"/> - </xsl:attribute><B>Legend</B> - </xsl:element> - </TR> - <TR> - <TD><xsl:text disable-output-escaping="yes">&nbsp;</xsl:text></TD> - <xsl:element name="TD"> - <xsl:attribute name="COLSPAN"> - <xsl:value-of select="$flavs + 1"/> - </xsl:attribute> - <BR/> - <UL> - <LI><B><FONT COLOR="#FF0000">New/Regression Failure</FONT></B></LI> - <LI><FONT COLOR="#FF0000">Existing Failure</FONT></LI> - <LI><FONT COLOR="#008000"><STRIKE>New Pass</STRIKE></FONT></LI> - <LI><FONT COLOR="#FF00FF">Excluded Test</FONT></LI> - </UL> - </xsl:element> - </TR> - </TABLE> - </xsl:template> - - <xsl:template name="testcase"> - <xsl:param name="resultsfile"/> - <xsl:param name="oldfile"/> - <xsl:param name="bg"/> - <xsl:variable name="category" select="substring-after(@desc,': ')"/> - <xsl:variable name="excludesListAll"> - <xsl:call-template name="buildList"> - <xsl:with-param name="category" select="$category"/> - <xsl:with-param name="list" select="$resultsfile//hashtable/hashitem[@key='excludes']"/> - </xsl:call-template> - </xsl:variable> - <xsl:variable name="oldFailListAll"> - <xsl:for-each select="$oldfile/testfile/testcase[contains(@desc,$category)]/checkresult[not(@result='Pass') and contains(@desc,$category)]">#</xsl:for-each> - </xsl:variable> - <xsl:element name="TR"> - <xsl:attribute name="BGCOLOR"><xsl:value-of select="$bg"/></xsl:attribute> - <xsl:element name="TD"> - <xsl:attribute name="ROWSPAN"> - <xsl:choose> - <xsl:when test="count($resultsfile/testfile/testcase[$category = substring-after(@desc,': ')]/checkresult[not(@result='Pass')]) > 0 or not($excludesListAll = '') or not($oldFailListAll = '')"> - 4 - </xsl:when> - <xsl:otherwise> - 3 - </xsl:otherwise> - </xsl:choose> - </xsl:attribute> - <xsl:value-of select="$category"/> - </xsl:element> - </xsl:element> - <xsl:element name="TR"> - <xsl:attribute name="BGCOLOR"><xsl:value-of select="$bg"/></xsl:attribute> - <TD VALIGN="TOP">#cases</TD> - <xsl:for-each select="$resultsfile/testfile/testcase[$category = substring-after(@desc,': ')]"> - <TD VALIGN="TOP"> - <xsl:value-of select="count(checkresult)"/> - </TD> - </xsl:for-each> - </xsl:element> - <xsl:element name="TR"> - <xsl:attribute name="BGCOLOR"><xsl:value-of select="$bg"/></xsl:attribute> - <TD VALIGN="TOP">pass</TD> - <xsl:for-each select="$resultsfile/testfile/testcase[$category = substring-after(@desc,': ')]"> - <TD VALIGN="TOP"> - <xsl:variable name="passList"> - <xsl:for-each select="checkresult[@result='Pass']"> - <xsl:sort select="substring-before(substring-after(@desc,$category),'.')" data-type="number"/> - <xsl:variable name="cur" select="substring-before(substring-after(@desc,$category),'.')"/> - <xsl:value-of select="$cur"/> - <xsl:if test="not(position()=last())"> - <xsl:text> </xsl:text> - </xsl:if> - </xsl:for-each> - </xsl:variable> - <xsl:call-template name="condense"> - <xsl:with-param name="list" select="$passList"/> - <xsl:with-param name="prev" select="-1"/> - </xsl:call-template> - </TD> - </xsl:for-each> - </xsl:element> - <xsl:if test="count($resultsfile/testfile/testcase[$category = substring-after(@desc,': ')]/checkresult[not(@result='Pass')]) > 0 or not($excludesListAll = '') or count($oldfile/testfile/testcase[contains(@desc,$category)]/checkresult[not(@result='Pass')]) > 0"> - <xsl:element name="TR"> - <xsl:attribute name="BGCOLOR"><xsl:value-of select="$bg"/></xsl:attribute> - <TD VALIGN="TOP">fail/err</TD> - <xsl:for-each select="$resultsfile/testfile/testcase[$category = substring-after(@desc,': ')]"> - <xsl:variable name="flavor"> - <xsl:value-of select="../hashtable/hashitem[@key='flavor']"/> - </xsl:variable> - <xsl:variable name="excludesList"> - <xsl:call-template name="buildList"> - <xsl:with-param name="category" select="$category"/> - <xsl:with-param name="list" select="../hashtable/hashitem[@key='excludes']"/> - </xsl:call-template> - </xsl:variable> - <xsl:variable name="oldFailList"> - <xsl:for-each select="$oldfile/testfile[hashtable/hashitem[@key='flavor'] = $flavor]/testcase[contains(@desc,$category)]/checkresult[not(@result='Pass') and contains(@desc,$category)]"> - <xsl:sort select="substring-before(substring-after(@desc,$category),'.')" data-type="number"/> - <xsl:variable name="cur" select="substring-before(substring-after(@desc,$category),'.')"/> - <xsl:value-of select="$cur"/> - <xsl:if test="not(position()=last())"> - <xsl:text> </xsl:text> - </xsl:if> - </xsl:for-each> - </xsl:variable> - <xsl:choose> - <xsl:when test="count(checkresult[not(@result='Pass')]) > 0 or not($excludesList = '') or not($oldFailList = '')"> - <TD VALIGN="TOP"> - <FONT COLOR="#FF0000"> - <xsl:variable name="failList"> - <xsl:for-each select="checkresult[not(@result='Pass')]"> - <xsl:sort select="substring-before(substring-after(@desc,$category),'.')" data-type="number"/> - <xsl:variable name="cur" select="substring-before(substring-after(@desc,$category),'.')"/> - <xsl:value-of select="$cur"/> - <xsl:if test="not(position()=last())"> - <xsl:text> </xsl:text> - </xsl:if> - </xsl:for-each> - </xsl:variable> - <xsl:call-template name="diff"> - <xsl:with-param name="newlist" select="$failList"/> - <xsl:with-param name="oldlist" select="$oldFailList"/> - </xsl:call-template> - </FONT> - <FONT COLOR="#FF00FF"> - <xsl:variable name="excludeCond"> - <xsl:call-template name="condense"> - <xsl:with-param name="list" select="substring($excludesList,1,string-length($excludesList)-1)"/> - <xsl:with-param name="prev" select="-1"/> - </xsl:call-template> - </xsl:variable> - <xsl:if test="not($excludeCond = '')"> - <xsl:text>(</xsl:text><xsl:value-of select="$excludeCond"/><xsl:text>)</xsl:text> - </xsl:if> - </FONT> - </TD> - </xsl:when> - <xsl:otherwise> - <TD><xsl:text disable-output-escaping="yes">&nbsp;</xsl:text></TD> - </xsl:otherwise> - </xsl:choose> - </xsl:for-each> - </xsl:element> - </xsl:if> - </xsl:template> - - <!-- helper function used when extracting list of excludes. --> - <xsl:template name="buildList"> - <xsl:param name="category"/> - <xsl:param name="list"/> - <xsl:if test="contains($list,$category)"> - <xsl:value-of select="substring-before(substring-after($list,$category),'.')"/> - <xsl:text> </xsl:text> - <xsl:call-template name="buildList"> - <xsl:with-param name="category" select="$category"/> - <xsl:with-param name="list" select="substring-after(substring-after($list,$category),'.')"/> - </xsl:call-template> - </xsl:if> - </xsl:template> - - <!-- helper function used to find difference between two lists of failed tests. --> - <xsl:template name="diff"> - <xsl:param name="newlist"/> - <xsl:param name="oldlist"/> - <xsl:variable name="nf"> - <xsl:choose> - <xsl:when test="contains($newlist,' ')"> - <xsl:value-of select="substring-before($newlist,' ')"/> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="$newlist"/> - </xsl:otherwise> - </xsl:choose> - </xsl:variable> - <xsl:variable name="of"> - <xsl:choose> - <xsl:when test="contains($oldlist,' ')"> - <xsl:value-of select="substring-before($oldlist,' ')"/> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="$oldlist"/> - </xsl:otherwise> - </xsl:choose> - </xsl:variable> - <xsl:if test="not($of = '' and $nf = '')"> - <xsl:choose> - <xsl:when test="$of = $nf"> - <FONT COLOR="#FF0000"> - <xsl:value-of select="$of"/> - <xsl:text> </xsl:text> - </FONT> - <xsl:call-template name="diff"> - <xsl:with-param name="newlist" select="substring-after($newlist,' ')"/> - <xsl:with-param name="oldlist" select="substring-after($oldlist,' ')"/> - </xsl:call-template> - </xsl:when> - <xsl:when test="$of < $nf or $nf = ''"> - <FONT COLOR="#008000"> - <STRIKE> - <xsl:value-of select="$of"/> - </STRIKE> - <xsl:text> </xsl:text> - </FONT> - <xsl:call-template name="diff"> - <xsl:with-param name="newlist" select="$newlist"/> - <xsl:with-param name="oldlist" select="substring-after($oldlist,' ')"/> - </xsl:call-template> - </xsl:when> - <xsl:when test="$of > $nf or $of = ''"> - <FONT COLOR="#FF0000"> - <B> - <xsl:value-of select="$nf"/> - </B> - <xsl:text> </xsl:text> - </FONT> - <xsl:call-template name="diff"> - <xsl:with-param name="newlist" select="substring-after($newlist,' ')"/> - <xsl:with-param name="oldlist" select="substring-after($oldlist,' ')"/> - </xsl:call-template> - </xsl:when> - </xsl:choose> - </xsl:if> - </xsl:template> - - <!-- helper function used to condense test numbers: 01, 02, 03 -> 01-03 --> - <xsl:template name="condense"> - <xsl:param name="list"/> - <xsl:param name="prev"/> - <xsl:variable name="cur" select="substring-before($list,' ')"/> - <xsl:variable name="next"> - <xsl:choose> - <xsl:when test="not(substring-before(substring-after($list,' '),' ') = '')"> - <xsl:value-of select="substring-before(substring-after($list,' '),' ')"/> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="substring-after($list,' ')"/> - </xsl:otherwise> - </xsl:choose> - </xsl:variable> - <xsl:choose> - <xsl:when test="not($cur = '')"> - <xsl:choose> - <xsl:when test="not($prev + 1 = $cur) and $cur + 1 = $next"> - <xsl:value-of select="$cur"/> - <xsl:text>-</xsl:text> - </xsl:when> - <xsl:when test="not($cur + 1 = $next)"> - <xsl:value-of select="$cur"/> - <xsl:text>, </xsl:text> - </xsl:when> - </xsl:choose> - <xsl:call-template name="condense"> - <xsl:with-param name="list" select="substring-after($list,' ')"/> - <xsl:with-param name="prev" select="$cur"/> - </xsl:call-template> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="$list"/> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - <!-- output Overall summaries --> - <xsl:template name="flavour"> - <xsl:param name="resultsfile"/> - <xsl:for-each select="$resultsfile/testfile/hashtable/hashitem[@key='flavor']"> - <TD><B><xsl:value-of select="."/></B></TD> - </xsl:for-each> - </xsl:template> - - <xsl:template name="totalCases"> - <xsl:param name="resultsfile"/> - <xsl:for-each select="$resultsfile/testfile/teststatus"> - <TD><xsl:value-of select="@Pass-cases + @Fail-cases + @Errr-cases"/></TD> - </xsl:for-each> - </xsl:template> - - <xsl:template name="passCases"> - <xsl:param name="resultsfile"/> - <xsl:for-each select="$resultsfile/testfile/teststatus"> - <TD><xsl:value-of select="@Pass-cases"/></TD> - </xsl:for-each> - </xsl:template> - - <xsl:template name="failCases"> - <xsl:param name="resultsfile"/> - <xsl:for-each select="$resultsfile/testfile/teststatus"> - <TD><xsl:value-of select="@Fail-cases"/></TD> - </xsl:for-each> - </xsl:template> - - <xsl:template name="errrCases"> - <xsl:param name="resultsfile"/> - <xsl:for-each select="$resultsfile/testfile/teststatus"> - <TD><xsl:value-of select="@Errr-cases"/></TD> - </xsl:for-each> - </xsl:template> - - <xsl:template name="totalChecks"> - <xsl:param name="resultsfile"/> - <xsl:for-each select="$resultsfile/testfile/teststatus"> - <TD><xsl:value-of select="@Pass-checks + @Fail-checks + @Errr-checks"/></TD> - </xsl:for-each> - </xsl:template> - - <xsl:template name="passChecks"> - <xsl:param name="resultsfile"/> - <xsl:for-each select="$resultsfile/testfile/teststatus"> - <TD><xsl:value-of select="@Pass-checks"/></TD> - </xsl:for-each> - </xsl:template> - - <xsl:template name="failChecks"> - <xsl:param name="resultsfile"/> - <xsl:for-each select="$resultsfile/testfile/teststatus"> - <TD><xsl:value-of select="@Fail-checks"/></TD> - </xsl:for-each> - </xsl:template> - - <xsl:template name="errrChecks"> - <xsl:param name="resultsfile"/> - <xsl:for-each select="$resultsfile/testfile/teststatus"> - <TD><xsl:value-of select="@Errr-checks"/></TD> - </xsl:for-each> - </xsl:template> - - <!-- Output Overall summary formatting --> - <xsl:template name="teststatus"> - <xsl:param name="resultsfile"/> - <xsl:variable name="flavs" select="count($resultsfile/testfile) + 1"/> - <TR> - <TD ROWSPAN="11"><B>Overall</B></TD> - <TD>Flavour:</TD><xsl:call-template name="flavour"><xsl:with-param name="resultsfile" select="$resultsfile"/></xsl:call-template> - </TR> - <TR> - <TD COLSPAN="{$flavs+1}"> - Categories - </TD> - </TR> - <TR> - <TD>Total:</TD><xsl:call-template name="totalCases"><xsl:with-param name="resultsfile" select="$resultsfile"/></xsl:call-template> - </TR> - <TR> - <TD>Pass:</TD><xsl:call-template name="passCases"><xsl:with-param name="resultsfile" select="$resultsfile"/></xsl:call-template> - </TR> - <TR> - <TD>Fail:</TD><xsl:call-template name="failCases"><xsl:with-param name="resultsfile" select="$resultsfile"/></xsl:call-template> - </TR> - <TR> - <TD>Error:</TD><xsl:call-template name="errrCases"><xsl:with-param name="resultsfile" select="$resultsfile"/></xsl:call-template> - </TR> - <TR> - <TD COLSPAN="{$flavs + 1}"> - Test Cases - </TD> - </TR> - <TR> - <TD>Total:</TD><xsl:call-template name="totalChecks"><xsl:with-param name="resultsfile" select="$resultsfile"/></xsl:call-template> - </TR> - <TR> - <TD>Pass:</TD><xsl:call-template name="passChecks"><xsl:with-param name="resultsfile" select="$resultsfile"/></xsl:call-template> - </TR> - <TR> - <TD>Fail:</TD><xsl:call-template name="failChecks"><xsl:with-param name="resultsfile" select="$resultsfile"/></xsl:call-template> - </TR> - <TR> - <TD>Error:</TD><xsl:call-template name="errrChecks"><xsl:with-param name="resultsfile" select="$resultsfile"/></xsl:call-template> - </TR> - </xsl:template> -</xsl:stylesheet> +<?xml version="1.0"?> +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:redirect="org.apache.xalan.xslt.extensions.Redirect" + xmlns:xalan="http://xml.apache.org/xalan" + extension-element-prefixes="redirect" version="1.0"> + <xsl:output method="xml" indent="yes" xalan:indent-amount="2" + doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" + doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" /> + +<!-- FileName: tableResults.xsl --> +<!-- Author: Gordon Chiu <[EMAIL PROTECTED]> --> +<!-- Date: 10/10/2002 --> +<!-- Purpose: Format org.apache.qetest.XMLFileLogger logFile results + into a table-based HTML page --> +<!-- Modified: 10/17/2002 removed 'trax', is 'systemId' + 10/22/2002 takes directory as argument --> + +<!-- Quick how to use: + + This stylesheet operates on the results of a build alltest.conf. + 1. In place of viewResults.xsl to analyze results: + In Windows or UNIX, set the RESULTSCANNER environment + variable to tableResults.xsl + Execute viewResults.bat results-alltest\conf\sax\results.xml. + (the stylesheet will find the other xml files). + In UNIX, execute viewResults.sh as above. + 2. To compare a current run against a previous run: + Run the stylesheet with the parameter 'compareAgainst' which + points to the results-alltest/conf directory of another test run. + 3. To analyze results from build alltest.conf.xsltc, run the + stylesheet with the parameter 'resultDir' which points to the + results-alltest.xsltc/conf directory of the xsltc test run. + +--> + + <!-- Directory of results to compare against + Specify a directory of old results to get cross comparison. --> + <xsl:param name="resultDir" select="string('results-alltest/conf')"/> + <xsl:param name="compareAgainst" select="$resultDir"/> + + <!-- Basic Structure of output document --> + <xsl:template match="resultsfile"> + <HTML> + <HEAD> + <STYLE TYPE="text/css"> + body { font-family: Verdana; font-size: 9pt; } + tr { font-family: Verdana; font-size: 9pt; } + td { font-family: Verdana; font-size: 9pt; } + </STYLE> + </HEAD> + <BODY> + <xsl:apply-templates select="testfile[last()]"/> + </BODY> + </HTML> + </xsl:template> + + <!-- Output information about the test run from the hashtable --> + <xsl:template match="testfile" mode="hashElements"> + <xsl:value-of select="hashtable/hashitem[@key='version.xalan2x']"/> (<xsl:value-of select="@time"/>) and + <xsl:value-of select="hashtable/hashitem[@key='version.xerces2']"/><BR/> + <xsl:value-of select="hashtable/hashitem[@key='java.vm.vendor']"/> + JDK <xsl:value-of select="hashtable/hashitem[@key='java.vm.version']"/><BR/> + Test run by: <xsl:value-of select="hashtable/hashitem[@key='user.name']"/> + on a <xsl:value-of select="hashtable/hashitem[@key='os.arch']"/> + running <xsl:value-of select="hashtable/hashitem[@key='os.name']"/> + </xsl:template> + + <!-- Output the summary and category summaries for test sets. --> + <xsl:template match="testfile"> + <!-- Set up two variables for test results, and old test results. --> + <xsl:variable name="resultsfile"> + <xsl:copy-of select="document(concat($resultDir,'/dom/results.xml'))/resultsfile/testfile + | document(concat($resultDir,'/sax/results.xml'))/resultsfile/testfile + | document(concat($resultDir,'/stream/results.xml'))/resultsfile/testfile + | document(concat($resultDir,'/file/results.xml'))/resultsfile/testfile + | document(concat($resultDir,'/systemId/results.xml'))/resultsfile/testfile + | document(concat($resultDir,'/localPath/results.xml'))/resultsfile/testfile"/> + </xsl:variable> + <xsl:variable name="oldfile"> + <xsl:copy-of select="document(concat($compareAgainst,'/dom/results.xml'))/resultsfile/testfile + | document(concat($compareAgainst,'/sax/results.xml'))/resultsfile/testfile + | document(concat($compareAgainst,'/stream/results.xml'))/resultsfile/testfile + | document(concat($compareAgainst,'/file/results.xml'))/resultsfile/testfile + | document(concat($compareAgainst,'/systemId/results.xml'))/resultsfile/testfile + | document(concat($compareAgainst,'/localPath/results.xml'))/resultsfile/testfile"/> + </xsl:variable> + <!-- Number of flavours; used for column widths --> + <xsl:variable name="flavs" select="count(xalan:nodeset($resultsfile)/testfile)"/> + <TABLE BORDER="1" CELLPADDING="5" CELLSPACING="0"> + <TR> + <xsl:element name="TD"> + <xsl:attribute name="COLSPAN"> + <xsl:value-of select="$flavs + 2"/> + </xsl:attribute> + <B>Conformance Test Results on <xsl:value-of select="@time"/></B> + </xsl:element> + </TR> + <TR> + <TD COLSPAN="1"><B>Environment</B></TD> + <xsl:element name="TD"> + <xsl:attribute name="COLSPAN"> + <xsl:value-of select="$flavs + 1"/> + </xsl:attribute> + <xsl:variable name="flavor"> + <xsl:value-of select="hashtable/hashitem[@key='flavor']"/> + </xsl:variable> + <b>Currently Tested:</b><br/> + <xsl:apply-templates select="." mode="hashElements"/><br/> + <b>Compared Against:</b><br/> + <xsl:apply-templates select="xalan:nodeset($oldfile)/testfile[hashtable/hashitem[@key='flavor'] = $flavor]" mode="hashElements"/> + </xsl:element> + </TR> + <xsl:call-template name="teststatus"> + <xsl:with-param name="resultsfile" select="$resultsfile"/> + <xsl:with-param name="flavs" select="$flavs"/> + </xsl:call-template> + <TR> + <xsl:element name="TD"> + <xsl:attribute name="COLSPAN"> + <xsl:value-of select="$flavs + 2"/> + </xsl:attribute><B>Category Summaries</B> + </xsl:element> + </TR> + <xsl:for-each select="testcase"> + <xsl:call-template name="testcase"> + <xsl:with-param name="resultsfile" select="$resultsfile"/> + <xsl:with-param name="oldfile" select="$oldfile"/> + <xsl:with-param name="bg"> + <xsl:choose> + <xsl:when test="position() mod 2 = 1">#F0F0F0</xsl:when> + <xsl:otherwise>#FFFFFF</xsl:otherwise> + </xsl:choose> + </xsl:with-param> + </xsl:call-template> + </xsl:for-each> + <TR> + <xsl:element name="TD"> + <xsl:attribute name="COLSPAN"> + <xsl:value-of select="$flavs + 2"/> + </xsl:attribute><B>Legend</B> + </xsl:element> + </TR> + <TR> + <TD><xsl:text disable-output-escaping="yes">&nbsp;</xsl:text></TD> + <xsl:element name="TD"> + <xsl:attribute name="COLSPAN"> + <xsl:value-of select="$flavs + 1"/> + </xsl:attribute> + <BR/> + <UL> + <LI><B><FONT COLOR="#FF0000">New/Regression Failure</FONT></B></LI> + <LI><FONT COLOR="#FF0000">Existing Failure</FONT></LI> + <LI><FONT COLOR="#008000"><STRIKE>New Pass</STRIKE></FONT></LI> + <LI><FONT COLOR="#FF00FF">Excluded Test</FONT></LI> + </UL> + </xsl:element> + </TR> + </TABLE> + </xsl:template> + + <xsl:template name="testcase"> + <xsl:param name="resultsfile"/> + <xsl:param name="oldfile"/> + <xsl:param name="bg"/> + <xsl:variable name="category" select="substring-after(@desc,': ')"/> + <xsl:variable name="excludesListAll"> + <xsl:call-template name="buildList"> + <xsl:with-param name="category" select="$category"/> + <xsl:with-param name="list" select="xalan:nodeset($resultsfile)//hashtable/hashitem[@key='excludes']"/> + </xsl:call-template> + </xsl:variable> + <xsl:variable name="oldFailListAll"> + <xsl:for-each select="xalan:nodeset($oldfile)/testfile/testcase[contains(@desc,$category)]/checkresult[not(@result='Pass') and contains(@desc,$category)]">#</xsl:for-each> + </xsl:variable> + <xsl:element name="TR"> + <xsl:attribute name="BGCOLOR"><xsl:value-of select="$bg"/></xsl:attribute> + <xsl:element name="TD"> + <xsl:attribute name="ROWSPAN"> + <xsl:choose> + <xsl:when test="count(xalan:nodeset($resultsfile)/testfile/testcase[$category = substring-after(@desc,': ')]/checkresult[not(@result='Pass')]) > 0 or not($excludesListAll = '') or not($oldFailListAll = '')"> + 4 + </xsl:when> + <xsl:otherwise> + 3 + </xsl:otherwise> + </xsl:choose> + </xsl:attribute> + <xsl:value-of select="$category"/> + </xsl:element> + </xsl:element> + <xsl:element name="TR"> + <xsl:attribute name="BGCOLOR"><xsl:value-of select="$bg"/></xsl:attribute> + <TD VALIGN="TOP">#cases</TD> + <xsl:for-each select="xalan:nodeset($resultsfile)/testfile/testcase[$category = substring-after(@desc,': ')]"> + <TD VALIGN="TOP"> + <xsl:value-of select="count(checkresult)"/> + </TD> + </xsl:for-each> + </xsl:element> + <xsl:element name="TR"> + <xsl:attribute name="BGCOLOR"><xsl:value-of select="$bg"/></xsl:attribute> + <TD VALIGN="TOP">pass</TD> + <xsl:for-each select="xalan:nodeset($resultsfile)/testfile/testcase[$category = substring-after(@desc,': ')]"> + <TD VALIGN="TOP"> + <xsl:variable name="passList"> + <xsl:for-each select="checkresult[@result='Pass']"> + <xsl:sort select="substring-before(substring-after(@desc,$category),'.')" data-type="number"/> + <xsl:variable name="cur" select="substring-before(substring-after(@desc,$category),'.')"/> + <xsl:value-of select="$cur"/> + <xsl:if test="not(position()=last())"> + <xsl:text> </xsl:text> + </xsl:if> + </xsl:for-each> + </xsl:variable> + <xsl:call-template name="condense"> + <xsl:with-param name="list" select="$passList"/> + <xsl:with-param name="prev" select="-1"/> + </xsl:call-template> + </TD> + </xsl:for-each> + </xsl:element> + <xsl:if test="count(xalan:nodeset($resultsfile)/testfile/testcase[$category = substring-after(@desc,': ')]/checkresult[not(@result='Pass')]) > 0 or not($excludesListAll = '') or count(xalan:nodeset($oldfile)/testfile/testcase[contains(@desc,$category)]/checkresult[not(@result='Pass')]) > 0"> + <xsl:element name="TR"> + <xsl:attribute name="BGCOLOR"><xsl:value-of select="$bg"/></xsl:attribute> + <TD VALIGN="TOP">fail/err</TD> + <xsl:for-each select="xalan:nodeset($resultsfile)/testfile/testcase[$category = substring-after(@desc,': ')]"> + <xsl:variable name="flavor"> + <xsl:value-of select="../hashtable/hashitem[@key='flavor']"/> + </xsl:variable> + <xsl:variable name="excludesList"> + <xsl:call-template name="buildList"> + <xsl:with-param name="category" select="$category"/> + <xsl:with-param name="list" select="../hashtable/hashitem[@key='excludes']"/> + </xsl:call-template> + </xsl:variable> + <xsl:variable name="oldFailList"> + <xsl:for-each select="xalan:nodeset($oldfile)/testfile[hashtable/hashitem[@key='flavor'] = $flavor]/testcase[contains(@desc,$category)]/checkresult[not(@result='Pass') and contains(@desc,$category)]"> + <xsl:sort select="substring-before(substring-after(@desc,$category),'.')" data-type="number"/> + <xsl:variable name="cur" select="substring-before(substring-after(@desc,$category),'.')"/> + <xsl:value-of select="$cur"/> + <xsl:if test="not(position()=last())"> + <xsl:text> </xsl:text> + </xsl:if> + </xsl:for-each> + </xsl:variable> + <xsl:choose> + <xsl:when test="count(checkresult[not(@result='Pass')]) > 0 or not($excludesList = '') or not($oldFailList = '')"> + <TD VALIGN="TOP"> + <FONT COLOR="#FF0000"> + <xsl:variable name="failList"> + <xsl:for-each select="checkresult[not(@result='Pass')]"> + <xsl:sort select="substring-before(substring-after(@desc,$category),'.')" data-type="number"/> + <xsl:variable name="cur" select="substring-before(substring-after(@desc,$category),'.')"/> + <xsl:value-of select="$cur"/> + <xsl:if test="not(position()=last())"> + <xsl:text> </xsl:text> + </xsl:if> + </xsl:for-each> + </xsl:variable> + <xsl:call-template name="diff"> + <xsl:with-param name="newlist" select="$failList"/> + <xsl:with-param name="oldlist" select="$oldFailList"/> + </xsl:call-template> + </FONT> + <FONT COLOR="#FF00FF"> + <xsl:variable name="excludeCond"> + <xsl:call-template name="condense"> + <xsl:with-param name="list" select="substring($excludesList,1,string-length($excludesList)-1)"/> + <xsl:with-param name="prev" select="-1"/> + </xsl:call-template> + </xsl:variable> + <xsl:if test="not($excludeCond = '')"> + <xsl:text>(</xsl:text><xsl:value-of select="$excludeCond"/><xsl:text>)</xsl:text> + </xsl:if> + </FONT> + </TD> + </xsl:when> + <xsl:otherwise> + <TD><xsl:text disable-output-escaping="yes">&nbsp;</xsl:text></TD> + </xsl:otherwise> + </xsl:choose> + </xsl:for-each> + </xsl:element> + </xsl:if> + </xsl:template> + + <!-- helper function used when extracting list of excludes. --> + <xsl:template name="buildList"> + <xsl:param name="category"/> + <xsl:param name="list"/> + <xsl:if test="contains($list,$category)"> + <xsl:value-of select="substring-before(substring-after($list,$category),'.')"/> + <xsl:text> </xsl:text> + <xsl:call-template name="buildList"> + <xsl:with-param name="category" select="$category"/> + <xsl:with-param name="list" select="substring-after(substring-after($list,$category),'.')"/> + </xsl:call-template> + </xsl:if> + </xsl:template> + + <!-- helper function used to find difference between two lists of failed tests. --> + <xsl:template name="diff"> + <xsl:param name="newlist"/> + <xsl:param name="oldlist"/> + <xsl:variable name="nf"> + <xsl:choose> + <xsl:when test="contains($newlist,' ')"> + <xsl:value-of select="substring-before($newlist,' ')"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$newlist"/> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:variable name="of"> + <xsl:choose> + <xsl:when test="contains($oldlist,' ')"> + <xsl:value-of select="substring-before($oldlist,' ')"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$oldlist"/> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:if test="not($of = '' and $nf = '')"> + <xsl:choose> + <xsl:when test="$of = $nf"> + <FONT COLOR="#FF0000"> + <xsl:value-of select="$of"/> + <xsl:text> </xsl:text> + </FONT> + <xsl:call-template name="diff"> + <xsl:with-param name="newlist" select="substring-after($newlist,' ')"/> + <xsl:with-param name="oldlist" select="substring-after($oldlist,' ')"/> + </xsl:call-template> + </xsl:when> + <xsl:when test="$of < $nf or $nf = ''"> + <FONT COLOR="#008000"> + <STRIKE> + <xsl:value-of select="$of"/> + </STRIKE> + <xsl:text> </xsl:text> + </FONT> + <xsl:call-template name="diff"> + <xsl:with-param name="newlist" select="$newlist"/> + <xsl:with-param name="oldlist" select="substring-after($oldlist,' ')"/> + </xsl:call-template> + </xsl:when> + <xsl:when test="$of > $nf or $of = ''"> + <FONT COLOR="#FF0000"> + <B> + <xsl:value-of select="$nf"/> + </B> + <xsl:text> </xsl:text> + </FONT> + <xsl:call-template name="diff"> + <xsl:with-param name="newlist" select="substring-after($newlist,' ')"/> + <xsl:with-param name="oldlist" select="substring-after($oldlist,' ')"/> + </xsl:call-template> + </xsl:when> + </xsl:choose> + </xsl:if> + </xsl:template> + + <!-- helper function used to condense test numbers: 01, 02, 03 -> 01-03 --> + <xsl:template name="condense"> + <xsl:param name="list"/> + <xsl:param name="prev"/> + <xsl:variable name="cur" select="substring-before($list,' ')"/> + <xsl:variable name="next"> + <xsl:choose> + <xsl:when test="not(substring-before(substring-after($list,' '),' ') = '')"> + <xsl:value-of select="substring-before(substring-after($list,' '),' ')"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="substring-after($list,' ')"/> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:choose> + <xsl:when test="not($cur = '')"> + <xsl:choose> + <xsl:when test="not($prev + 1 = $cur) and $cur + 1 = $next"> + <xsl:value-of select="$cur"/> + <xsl:text>-</xsl:text> + </xsl:when> + <xsl:when test="not($cur + 1 = $next)"> + <xsl:value-of select="$cur"/> + <xsl:text>, </xsl:text> + </xsl:when> + </xsl:choose> + <xsl:call-template name="condense"> + <xsl:with-param name="list" select="substring-after($list,' ')"/> + <xsl:with-param name="prev" select="$cur"/> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$list"/> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + + <!-- output Overall summaries --> + <xsl:template name="flavour"> + <xsl:param name="resultsfile"/> + <xsl:for-each select="xalan:nodeset($resultsfile)/testfile/hashtable/hashitem[@key='flavor']"> + <TD><B><xsl:value-of select="."/></B></TD> + </xsl:for-each> + </xsl:template> + + <xsl:template name="totalCases"> + <xsl:param name="resultsfile"/> + <xsl:for-each select="xalan:nodeset($resultsfile)/testfile/teststatus"> + <TD><xsl:value-of select="@Pass-cases + @Fail-cases + @Errr-cases"/></TD> + </xsl:for-each> + </xsl:template> + + <xsl:template name="passCases"> + <xsl:param name="resultsfile"/> + <xsl:for-each select="xalan:nodeset($resultsfile)/testfile/teststatus"> + <TD><xsl:value-of select="@Pass-cases"/></TD> + </xsl:for-each> + </xsl:template> + + <xsl:template name="failCases"> + <xsl:param name="resultsfile"/> + <xsl:for-each select="xalan:nodeset($resultsfile)/testfile/teststatus"> + <TD><xsl:value-of select="@Fail-cases"/></TD> + </xsl:for-each> + </xsl:template> + + <xsl:template name="errrCases"> + <xsl:param name="resultsfile"/> + <xsl:for-each select="xalan:nodeset($resultsfile)/testfile/teststatus"> + <TD><xsl:value-of select="@Errr-cases"/></TD> + </xsl:for-each> + </xsl:template> + + <xsl:template name="totalChecks"> + <xsl:param name="resultsfile"/> + <xsl:for-each select="xalan:nodeset($resultsfile)/testfile/teststatus"> + <TD><xsl:value-of select="@Pass-checks + @Fail-checks + @Errr-checks"/></TD> + </xsl:for-each> + </xsl:template> + + <xsl:template name="passChecks"> + <xsl:param name="resultsfile"/> + <xsl:for-each select="xalan:nodeset($resultsfile)/testfile/teststatus"> + <TD><xsl:value-of select="@Pass-checks"/></TD> + </xsl:for-each> + </xsl:template> + + <xsl:template name="failChecks"> + <xsl:param name="resultsfile"/> + <xsl:for-each select="xalan:nodeset($resultsfile)/testfile/teststatus"> + <TD><xsl:value-of select="@Fail-checks"/></TD> + </xsl:for-each> + </xsl:template> + + <xsl:template name="errrChecks"> + <xsl:param name="resultsfile"/> + <xsl:for-each select="xalan:nodeset($resultsfile)/testfile/teststatus"> + <TD><xsl:value-of select="@Errr-checks"/></TD> + </xsl:for-each> + </xsl:template> + + <!-- Output Overall summary formatting --> + <xsl:template name="teststatus"> + <xsl:param name="resultsfile"/> + <xsl:param name="flavs"/> + <TR> + <TD ROWSPAN="11"><B>Overall</B></TD> + <TD>Flavour:</TD><xsl:call-template name="flavour"><xsl:with-param name="resultsfile" select="$resultsfile"/></xsl:call-template> + </TR> + <TR> + <TD COLSPAN="{$flavs + 1}"> + Categories + </TD> + </TR> + <TR> + <TD>Total:</TD><xsl:call-template name="totalCases"><xsl:with-param name="resultsfile" select="$resultsfile"/></xsl:call-template> + </TR> + <TR> + <TD>Pass:</TD><xsl:call-template name="passCases"><xsl:with-param name="resultsfile" select="$resultsfile"/></xsl:call-template> + </TR> + <TR> + <TD>Fail:</TD><xsl:call-template name="failCases"><xsl:with-param name="resultsfile" select="$resultsfile"/></xsl:call-template> + </TR> + <TR> + <TD>Error:</TD><xsl:call-template name="errrCases"><xsl:with-param name="resultsfile" select="$resultsfile"/></xsl:call-template> + </TR> + <TR> + <TD COLSPAN="{$flavs + 1}"> + Test Cases + </TD> + </TR> + <TR> + <TD>Total:</TD><xsl:call-template name="totalChecks"><xsl:with-param name="resultsfile" select="$resultsfile"/></xsl:call-template> + </TR> + <TR> + <TD>Pass:</TD><xsl:call-template name="passChecks"><xsl:with-param name="resultsfile" select="$resultsfile"/></xsl:call-template> + </TR> + <TR> + <TD>Fail:</TD><xsl:call-template name="failChecks"><xsl:with-param name="resultsfile" select="$resultsfile"/></xsl:call-template> + </TR> + <TR> + <TD>Error:</TD><xsl:call-template name="errrChecks"><xsl:with-param name="resultsfile" select="$resultsfile"/></xsl:call-template> + </TR> + </xsl:template> +</xsl:stylesheet>
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
