You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by il...@apache.org on 2002/10/31 16:20:08 UTC
cvs commit: xml-xalan/test tableResults.xsl
ilene 2002/10/31 07:20:08
Added: test tableResults.xsl
Log:
Committing Gordon Chiu's (grchiu@ca.ibm.com) stylesheet for formatting
test results into a category and flavor conformance matrix.
Revision Changes Path
1.1 xml-xalan/test/tableResults.xsl
Index: tableResults.xsl
===================================================================
<?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 <gr...@ca.ibm.com> -->
<!-- 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>
---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org