curcuru     2002/07/23 13:13:44

  Modified:    test     FailScanner.xsl ResultScanner.xsl
                        resultsConstants.xsl
  Added:       test     BaseScanner.xsl
  Log:
  Simplified and updated results.xml scanning stylesheets: much more
  modular design and better output format
  
  Revision  Changes    Path
  1.5       +74 -106   xml-xalan/test/FailScanner.xsl
  
  Index: FailScanner.xsl
  ===================================================================
  RCS file: /home/cvs/xml-xalan/test/FailScanner.xsl,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- FailScanner.xsl   22 Jul 2002 19:40:10 -0000      1.4
  +++ FailScanner.xsl   23 Jul 2002 20:13:43 -0000      1.5
  @@ -4,6 +4,16 @@
       xmlns:redirect="org.apache.xalan.lib.Redirect"
       extension-element-prefixes="redirect"
       version="1.0">
  +
  +<!-- FileName: FailScanner.xsl -->
  +<!-- Author: [EMAIL PROTECTED] -->
  +<!-- Purpose: Stylesheet for org.apache.qetest.XMLFileLogger
  +     logFiles that only prints out failing (and error) results.
  +-->
  +
  +<!-- Import the BaseScanner for most duties; note this must be first in file 
-->
  +<xsl:import href="BaseScanner.xsl"/>
  +
   <xsl:output method="html"
             doctype-public="-//W3C//DTD HTML 4.0 Transitional"/>
   
  @@ -11,100 +21,74 @@
       <lxslt:script lang="javaclass" src="org.apache.xalan.lib.Redirect"/>
   </lxslt:component>  
   
  -<!-- FileName: FailScanner.xsl -->
  -<!-- Author: [EMAIL PROTECTED] -->
  -<!-- Purpose: Simple viewer for org.apache.qetest.XMLFileLogger
  -     logFile failing-only results put into simple HTML pages updates coming 
-->
  -
  -<!-- Include constant definitions for results file elements, 
  -     attributes, and values, copied from relevant Java code -->
  -<xsl:include href="resultsConstants.xsl"/>
  -
   <!-- Name of file for mini-fails redirected output -->
   <xsl:param name="redirectFilename">FailScannerMini.html</xsl:param>
   
  +<xsl:template name="printScannerName">
  +  <xsl:element name="a">
  +    <xsl:attribute 
name="href"><xsl:text>src/xsl/FailScanner.xsl</xsl:text></xsl:attribute>
  +    <xsl:text>FailScanner</xsl:text>
  +  </xsl:element>
  +</xsl:template>
   <!-- ================================== -->
  -<!-- Main template-standalone: output an HTML page -->
  -<xsl:template match="resultsfile">
  -    <html xmlns="http://www.w3.org/1999/xhtml";>
  -        <head>
  -            <title><xsl:text>Test Results file: </xsl:text><xsl:value-of 
select="@logFile"/></title>
  -        </head>
  -        <body>
  -            <xsl:apply-templates/>
  -        </body>
  -    </html>
  +<!-- Element templates: output basic data for each of the common 
  +     test elements, like messages, checks, etc.
  +-->
  +<!-- All non-fail testcases just get a status line, nothing else -->
  +<xsl:template match="testcase[caseresult/@result = $PASS] | 
testcase[caseresult/@result = $INCP]">
  +  <h3>
  +    <xsl:value-of select="caseresult/@result"/>
  +    <xsl:text> Testcase: # </xsl:text>
  +    <!-- This creates the anchor as well as printing the @desc -->
  +    <xsl:call-template name="create-testcase-anchor">
  +      <xsl:with-param name="testcase" select="."/>
  +    </xsl:call-template>
  +    <br/>
  +  </h3>
   </xsl:template>
   
  -<!-- Output each whole testfile as a table; a small summary then individual 
results -->
  -<!-- This is selected in ResultScanner.xsl directly -->
  -<xsl:template match="testfile">
  +<!-- Process all remaining testcases with special fails mode -->
  +<xsl:template match="testcase">
     <table frame="box" border="1" rules="groups" 
            cellspacing="2" cellpadding="2"
            bgcolor="#FFFFEE">
       <caption>
  -      <b><xsl:value-of select="@filename"/><xsl:text>: 
</xsl:text></b><xsl:value-of select="@desc"/>
  +      <b><xsl:text>Testcase # </xsl:text></b>
  +      <!-- This creates the anchor as well as printing the @desc -->
  +      <xsl:call-template name="create-testcase-anchor">
  +        <xsl:with-param name="testcase" select="."/>
  +      </xsl:call-template>
       </caption>
  -    <redirect:write select="$redirectFilename" append="true">
  -      <hr/>
  -      <h3><xsl:value-of select="@filename"/>
  -      <xsl:text>: </xsl:text><xsl:value-of select="@desc"/>
  -      <xsl:text> in </xsl:text><xsl:value-of select="../@logFile"/>
  -      </h3>
  -    </redirect:write>
  -    <!-- establish row widths here in our mini-summary -->
  +    <!-- establish row widths here -->
       <tr>
  -      <td width="7%"><xsl:text>Overall</xsl:text></td>
  -      <td>
  -        <xsl:text>Pass: </xsl:text>
  -        <xsl:value-of select="[EMAIL 
PROTECTED]'passCount[CASES]']/longval"/><xsl:text>/</xsl:text>
  -        <xsl:value-of select="[EMAIL 
PROTECTED]'passCount[CHECKS]']/longval"/><xsl:text>, </xsl:text>
  -        <xsl:text>Fail: </xsl:text>
  -        <xsl:value-of select="[EMAIL 
PROTECTED]'failCount[CASES]']/longval"/><xsl:text>/</xsl:text>
  -        <xsl:value-of select="[EMAIL 
PROTECTED]'failCount[CHECKS]']/longval"/><xsl:text>, </xsl:text>
  -        <xsl:text>Errr: </xsl:text>
  -        <xsl:value-of select="[EMAIL 
PROTECTED]'errrCount[CASES]']/longval"/><xsl:text>/</xsl:text>
  -        <xsl:value-of select="[EMAIL 
PROTECTED]'errrCount[CHECKS]']/longval"/><xsl:text>, </xsl:text>
  -        <xsl:text>Ambg: </xsl:text>
  -        <xsl:value-of select="[EMAIL 
PROTECTED]'ambgCount[CASES]']/longval"/><xsl:text>/</xsl:text>
  -        <xsl:value-of select="[EMAIL 
PROTECTED]'ambgCount[CHECKS]']/longval"/><xsl:text>, </xsl:text>
  -        <xsl:text>Incp: </xsl:text>
  -        <xsl:value-of select="[EMAIL PROTECTED]'incpCount[CASES]']/longval"/>
  -      </td>
  +      <td width="20"></td>
  +      <td></td>
       </tr>
  -    
  -    <!-- Search on all subelements; don't bother restricting -->
  -    <xsl:apply-templates />
  -  </table>
  -</xsl:template>
  -
  -<!-- Output only testcases that have clear fails with the specific fails -->
  -<xsl:template match="testcase[caseresult/@result = $FAIL] | 
testcase[caseresult/@result = $ERRR]">
  -    <tr>
  -      <td><br/><hr/></td>
  -      <td><xsl:text>Testcase #</xsl:text><xsl:value-of 
select="@desc"/><xsl:text> is </xsl:text><xsl:value-of 
select="caseresult/@result"/></td>
  -    </tr>
  -    <!-- Only select results; we only have matches later for failed results 
-->
  +    <!-- Only select results; the checkresult templates have special
  +         processing to output additional messages when needed.
  +    -->
       <xsl:apply-templates select="checkresult" />
  -</xsl:template>
  -
  -<!-- Testcases that are incomplete just get a note, no details -->
  -<xsl:template match="testcase[caseresult/@result = $INCP]">
       <tr>
  -      <td><hr/></td>
  -      <td><xsl:text>Testcase #</xsl:text><xsl:value-of 
select="@desc"/><xsl:text> was </xsl:text><xsl:value-of 
select="caseresult/@result"/></td>
  +      <td><br/><hr/></td>
  +      <td><xsl:value-of select="caseresult/@result"/>:<xsl:text>Testcase 
#</xsl:text><xsl:value-of select="@desc"/></td>
       </tr>
  +  </table>
   </xsl:template>
   
  -<!-- Results that are clearly fails have preceding messages printed out -->
  +<!-- Results that are clearly fails have preceding messages printed out;
  +     since those help in debugging and may indicate cause of failure.
  +-->
   <xsl:template match="[EMAIL PROTECTED] | [EMAIL PROTECTED]">
  -  <!-- First, find the several previous messages to this result -->
  -  <xsl:apply-templates select="preceding-sibling::*[2]" mode="before-result" 
/>
  -  <xsl:apply-templates select="preceding-sibling::*[1]" mode="before-result" 
/>
  +  <xsl:apply-templates select="preceding-sibling::*[2]" mode="table"/>
  +  <xsl:apply-templates select="preceding-sibling::*[1]" mode="table"/>
       
     <!-- Then print out this result itself -->
     <tr>
  -    <td bgcolor="#FF8080"><b><xsl:value-of select="@result"/></b></td>
  +    <td bgcolor="#FF8080">
  +      <xsl:call-template name="create-checkresult-anchor">
  +        <xsl:with-param name="checkresult" select="."/>
  +      </xsl:call-template>
  +    </td>
       <td>
         <xsl:if test="@id">
           <xsl:text>[</xsl:text><xsl:value-of select="@id"/><xsl:text>] 
</xsl:text>
  @@ -112,6 +96,10 @@
         <xsl:value-of select="@desc"/>
       </td>
     </tr>
  +
  +  <!-- Then print out blank row to separate results -->
  +  <tr><td colspan="2" bgcolor="silver"><xsl:text> </xsl:text></td></tr>
  +
     <redirect:write select="$redirectFilename" append="true">
       <b><xsl:value-of select="@result"/><xsl:text> </xsl:text></b>
       <xsl:if test="@id">
  @@ -123,9 +111,15 @@
   
   <!-- Other Results that are not passes just get printed out as-is -->
   <xsl:template match="[EMAIL PROTECTED] | [EMAIL PROTECTED]">
  -  <xsl:apply-templates select="preceding-sibling::fileCheck[1]" 
mode="before-result" />
  +  <xsl:apply-templates select="preceding-sibling::fileCheck[1]" 
mode="table"/>
     <tr>
  -    <td bgcolor="#FFFF00"><i><xsl:value-of select="@result"/></i></td>
  +    <td bgcolor="#FFFF00">
  +      <i>
  +        <xsl:call-template name="create-checkresult-anchor">
  +          <xsl:with-param name="checkresult" select="."/>
  +        </xsl:call-template>
  +      </i>
  +    </td>
       <td>
         <xsl:if test="@id">
           <xsl:text>[</xsl:text><xsl:value-of select="@id"/><xsl:text>] 
</xsl:text>
  @@ -133,40 +127,14 @@
         <xsl:value-of select="@desc"/>
       </td>
     </tr>
  +  <!-- Then print out blank row to separate results -->
  +  <tr><td colspan="2" bgcolor="silver"><xsl:text> </xsl:text></td></tr>
   </xsl:template>
   
  -<!-- Only selected from previous checkresult apply-templates -->
  -<xsl:template match="message | arbitrary" mode="before-result">
  -  <tr>
  -    <td><xsl:value-of select="@level"/>A</td>
  -    <td>
  -      <xsl:choose>
  -        <xsl:when test="'arbitrary' = name()">
  -          <pre><font size="-1"><xsl:value-of select="."/></font></pre>
  -        </xsl:when>
  -        <xsl:otherwise>
  -          <xsl:value-of select="."/>
  -        </xsl:otherwise>
  -      </xsl:choose>
  -    </td>
  -  </tr>
  -</xsl:template>
  -
  -<!-- Only selected from previous checkresult apply-templates -->
  -<xsl:template match="fileCheck" mode="before-result">
  -  <tr>
  -    <td><font size="-1">fileCheck</font></td>
  -    <td>
  -      <xsl:text>Actual file: </xsl:text><xsl:value-of select="@actual"/><br/>
  -      <pre><font size="-1"><xsl:value-of select="."/></font></pre>
  -    </td>
  -  </tr>
  -</xsl:template>
  -
  -<!-- We implicitly skip all passes and non-related messages, etc. -->
  +<!-- Override BaseScanner handling of non-fail checkresults as no-op -->
  +<xsl:template match="checkresult" />
   
  -<!-- Override default text node processing, so statistics, arbitrary 
messages, and other stuff is skipped -->
  -<xsl:template match="text()"/>
  -<xsl:template match="text()" mode="before-result"/>
  +<!-- Override most messages when not in a testcase -->
  +<xsl:template match="[EMAIL PROTECTED] > $WARNINGMSG]" />
   
   </xsl:stylesheet>
  
  
  
  1.5       +3 -2      xml-xalan/test/ResultScanner.xsl
  
  Index: ResultScanner.xsl
  ===================================================================
  RCS file: /home/cvs/xml-xalan/test/ResultScanner.xsl,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- ResultScanner.xsl 1 Feb 2002 17:28:24 -0000       1.4
  +++ ResultScanner.xsl 23 Jul 2002 20:13:44 -0000      1.5
  @@ -119,13 +119,14 @@
     <!-- Anchor element for each test -->
     <xsl:element name="a">
       <xsl:attribute name="name"><xsl:value-of 
select="$statusfilename"/></xsl:attribute>
  +    <hr/>
     </xsl:element>
   
     <!-- Link to the full xml source of each test -->
  -  <font size="-1"><xsl:value-of select="$testresults/testfile/@filename"/>
  +  <font size="-1"><xsl:text> Original results.xml:</xsl:text>
       <xsl:element name="a">
         <xsl:attribute name="href"><xsl:value-of 
select="$testresultsfilename"/></xsl:attribute>
  -      <xsl:text> source results xml</xsl:text>
  +      <xsl:value-of select="$testresults/testfile/@filename"/>
       </xsl:element>
     </font>
   
  
  
  
  1.2       +2 -0      xml-xalan/test/resultsConstants.xsl
  
  Index: resultsConstants.xsl
  ===================================================================
  RCS file: /home/cvs/xml-xalan/test/resultsConstants.xsl,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- resultsConstants.xsl      3 Nov 2000 22:08:59 -0000       1.1
  +++ resultsConstants.xsl      23 Jul 2002 20:13:44 -0000      1.2
  @@ -3,6 +3,8 @@
       <!-- Misc Constants used within results viewing stylesheets -->
       <xsl:variable name="hash-marker">#hash</xsl:variable>
       <xsl:variable name="file-results-marker">#fr</xsl:variable>
  +    <xsl:variable name="testcase-marker">#tc</xsl:variable>
  +    <xsl:variable name="checkresult-marker">#cr</xsl:variable>
   
       <!-- Constants file for XML results files - copied from Java sources -->
   
  
  
  
  1.1                  xml-xalan/test/BaseScanner.xsl
  
  Index: BaseScanner.xsl
  ===================================================================
  <?xml version="1.0"?> 
  <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; 
      xmlns:lxslt="http://xml.apache.org/xslt";
      xmlns:redirect="org.apache.xalan.lib.Redirect"
      extension-element-prefixes="redirect"
      version="1.0">
  
  <!-- FileName: BaseScanner.xsl -->
  <!-- Author: [EMAIL PROTECTED] -->
  <!-- Purpose: Base stylesheet for org.apache.qetest.XMLFileLogger
       logFiles that defines the structure of test output reports.
       Designed to be 'subclassed' by import/include and defining 
       custom output for your desired elements.
  -->
  
  <xsl:output method="html"
            doctype-public="-//W3C//DTD HTML 4.0 Transitional"/>
  
  <lxslt:component prefix="redirect" elements="write open close" functions="">
      <lxslt:script lang="javaclass" src="org.apache.xalan.lib.Redirect"/>
  </lxslt:component>  
  
  <!-- Include constant definitions for results file elements, 
       attributes, and values, copied from relevant Java code -->
  <xsl:include href="resultsConstants.xsl"/>
  
  <!-- Name of file for mini-fails redirected output -->
  <xsl:param name="redirectFilename">BaseScannerMini.html</xsl:param>
  
  <!-- ================================== -->
  <!-- Root template: just define the structure of the output.
       Allow subclasses to provide templates for each part.
  -->
  <xsl:template match="resultsfile">
    <html>
      <head>
        <title><xsl:text>Test Results file: </xsl:text><xsl:value-of 
select="@logFile"/></title>
      </head>
      <body>
        <p align="center" font="-2">
          <xsl:text>Original results.xml: </xsl:text>
          <xsl:element name="a">
            <xsl:attribute name="href"><xsl:value-of 
select="@logFile"/></xsl:attribute>
            <xsl:value-of select="@logFile"/>
          </xsl:element>
          <xsl:text>    Processing stylesheet: </xsl:text>
          <xsl:call-template name="printScannerName"/>
        </p>
        <!-- Handle each individual testfile (i.e. TestName.java) that ran. -->
        <xsl:apply-templates select="testfile"/>
  
      </body>
    </html>
  </xsl:template>
  
  <xsl:template name="printScannerName">
    <xsl:element name="a">
      <xsl:attribute 
name="href"><xsl:text>src/xsl/BaseScanner.xsl</xsl:text></xsl:attribute>
      <xsl:text>BaseScanner</xsl:text>
    </xsl:element>
  </xsl:template>
  
  <xsl:template match="testfile">
    <!-- Output any header info, like overall results summary -->
    <xsl:call-template name="test-header"/>
  
    <!-- Output detail results from testcases, etc. -->
    <xsl:call-template name="test-body"/>
  
    <!-- Output any footer info, like environment hashes, etc. -->
    <xsl:call-template name="test-footer"/>
  </xsl:template>
  
  
  <!-- ================================== -->
  <!-- Structural templates: each named template is normally called 
       from the root template of / to perform it's part.
  -->
  <!-- Output any header info, like overall results summary -->
  <xsl:template name="test-header">
    <table frame="box" border="1" rules="groups" 
           cellspacing="2" cellpadding="2"
           bgcolor="#FFFFEE">
      <caption>
        <b><xsl:value-of select="@filename"/><xsl:text>: 
</xsl:text></b><xsl:value-of select="@desc"/>
      </caption>
      <redirect:write select="$redirectFilename" append="true">
        <hr/>
        <h3><xsl:value-of select="@filename"/>
        <xsl:text>: </xsl:text><xsl:value-of select="@desc"/>
        <xsl:text> in </xsl:text><xsl:value-of select="../@logFile"/>
        </h3>
      </redirect:write>
      <!-- Print out mini-summary of overall results -->
      <tr>
        <td width="20%"><xsl:text>Overall (TestCases/TestPoints)</xsl:text></td>
        <td>
          <xsl:text>Pass: </xsl:text>
          <xsl:value-of select="[EMAIL 
PROTECTED]'passCount[CASES]']/longval"/><xsl:text>/</xsl:text>
          <xsl:value-of select="[EMAIL 
PROTECTED]'passCount[CHECKS]']/longval"/><xsl:text>, </xsl:text>
          <xsl:text>Fail: </xsl:text>
          <xsl:value-of select="[EMAIL 
PROTECTED]'failCount[CASES]']/longval"/><xsl:text>/</xsl:text>
          <xsl:value-of select="[EMAIL 
PROTECTED]'failCount[CHECKS]']/longval"/><xsl:text>, </xsl:text>
          <xsl:text>Errr: </xsl:text>
          <xsl:value-of select="[EMAIL 
PROTECTED]'errrCount[CASES]']/longval"/><xsl:text>/</xsl:text>
          <xsl:value-of select="[EMAIL 
PROTECTED]'errrCount[CHECKS]']/longval"/><xsl:text>, </xsl:text>
          <xsl:text>Ambg: </xsl:text>
          <xsl:value-of select="[EMAIL 
PROTECTED]'ambgCount[CASES]']/longval"/><xsl:text>/</xsl:text>
          <xsl:value-of select="[EMAIL 
PROTECTED]'ambgCount[CHECKS]']/longval"/><xsl:text>, </xsl:text>
          <xsl:text>Incp: </xsl:text>
          <xsl:value-of select="[EMAIL PROTECTED]'incpCount[CASES]']/longval"/>
        </td>
      </tr>
      <tr>
        <td>
          <xsl:text>Testcases</xsl:text>
        </td>
        <td>
          <!-- Create links to non-passing testcases for easy navigation -->
          <xsl:text>Fails: </xsl:text>
          <xsl:for-each select="testcase[caseresult/@result=$FAIL]">
            <xsl:call-template name="create-testcase-link">
              <xsl:with-param name="testcase" select="."/>
            </xsl:call-template>
          </xsl:for-each>
          <xsl:text> Errors: </xsl:text>
          <xsl:for-each select="testcase[caseresult/@result=$ERRR]">
            <xsl:call-template name="create-testcase-link">
              <xsl:with-param name="testcase" select="."/>
            </xsl:call-template>
          </xsl:for-each>
          <xsl:text> Ambiguous: </xsl:text>
          <xsl:for-each select="testcase[caseresult/@result=$AMBG]">
            <xsl:call-template name="create-testcase-link">
              <xsl:with-param name="testcase" select="."/>
            </xsl:call-template>
          </xsl:for-each>
          <xsl:text> Incomplete: </xsl:text>
          <xsl:for-each select="testcase[caseresult/@result=$INCP]">
            <xsl:call-template name="create-testcase-link">
              <xsl:with-param name="testcase" select="."/>
            </xsl:call-template>
          </xsl:for-each>
        </td>
      </tr>
      <tr>
        <td>
          <!-- Create a link to the hashtables for this file -->
          <font size="-1">
            <xsl:element name="a">
              <xsl:attribute name="href"><xsl:value-of 
select="$hash-marker"/><xsl:value-of select="@filename"/></xsl:attribute>
              <xsl:text>System.properties, etc. during the test</xsl:text>
            </xsl:element>
          </font>
        </td>
      </tr>
  
    </table>
  
  </xsl:template>
  
  <!-- Output detail results from testcases, etc. -->
  <xsl:template name="test-body">
  
    <!-- Process all testcases and interim messages -->
    <xsl:apply-templates select="*[not(name(.)='hashtable')]" />
  
  </xsl:template>
  
  <!-- Output any footer info, like environment hashes, etc. -->
  <xsl:template name="test-footer">
    <!-- @todo optimize so anchor only appears if there are hashtables -->
    <br/>
    <xsl:element name="a">
      <xsl:attribute name="name"><xsl:value-of 
select="$hash-marker"/><xsl:value-of select="@filename"/></xsl:attribute>
      <xsl:text>System properties follow for: </xsl:text><xsl:value-of 
select="@filename"/>
    </xsl:element>
    <!-- Dump hashtables at the file level, which are system properties & etc. 
-->
    <xsl:apply-templates select="hashtable"/>
  
  </xsl:template>
  
  <!-- 'Worker' template to convert loggingLevels -->
  <!-- This is not terribly efficient, but it is prettier! -->
  <xsl:template name="printLevel">
    <xsl:param name="level"></xsl:param>
    <xsl:choose>
      <xsl:when test="$ERRORMSG=$level"><xsl:text>error</xsl:text></xsl:when>
      <xsl:when test="$ERRORMSG=$level"><xsl:text>error</xsl:text></xsl:when>
      <xsl:when test="$FAILSONLY=$level"><xsl:text>failmsg</xsl:text></xsl:when>
      <xsl:when 
test="$WARNINGMSG=$level"><xsl:text>warning</xsl:text></xsl:when>
      <xsl:when test="$STATUSMSG=$level"><xsl:text>status</xsl:text></xsl:when>
      <xsl:when test="$INFOMSG=$level"><xsl:text>info</xsl:text></xsl:when>
      <xsl:when test="$TRACEMSG=$level"><xsl:text>trace</xsl:text></xsl:when>
      <xsl:otherwise><xsl:value-of select="$level"/></xsl:otherwise>
    </xsl:choose>
  </xsl:template>
  
  <!-- ================================== -->
  <!-- Element templates: output basic data for each of the common 
       test elements, like messages, checks, etc.
  -->
  <!-- Testfile is basically just a redirect to apply lower level templates -->
  <xsl:template match="testcase">
    <table frame="box" border="1" rules="groups" 
           cellspacing="2" cellpadding="2"
           bgcolor="#FFFFEE">
      <caption>
        <b><xsl:text>Testcase # </xsl:text></b>
        <!-- This creates the anchor as well as printing the @desc -->
        <xsl:call-template name="create-testcase-anchor">
          <xsl:with-param name="testcase" select="."/>
        </xsl:call-template>
      </caption>
      <!-- establish row widths here -->
      <tr>
        <td width="20"></td>
        <td></td>
      </tr>
      <!-- Normally, process all sub-elements using the table mode -->
      <xsl:apply-templates mode="table"/>
      <tr>
        <td><br/><hr/></td>
        <td><xsl:value-of select="caseresult/@result"/>:<xsl:text>Testcase 
#</xsl:text><xsl:value-of select="@desc"/></td>
      </tr>
    </table>
  </xsl:template>
  
  <!-- Handle checkresult statements: each test point's result -->
  <xsl:template match="checkresult" mode="table">
    <tr>
      <td>
        <xsl:call-template name="create-checkresult-anchor">
          <xsl:with-param name="checkresult" select="."/>
        </xsl:call-template>
      </td>
      <td>
        <xsl:if test="@id">
          <xsl:text>[</xsl:text><xsl:value-of select="@id"/><xsl:text>] 
</xsl:text>
        </xsl:if>
        <xsl:value-of select="@desc"/>
      </td>
    </tr>
  </xsl:template>
  
  <!-- Handle basic test messages: status, info, trace, etc. -->
  <xsl:template match="message" mode="table">
    <tr>
      <td>
        <xsl:call-template name="printLevel">
          <xsl:with-param name="level" select="@level"/>
        </xsl:call-template>
      </td>
      <td><xsl:value-of select="."/></td>
    </tr>
  </xsl:template>
  
  <!-- Handle basic test messages when not in a testcase -->
  <xsl:template match="message">
    <p>
      <xsl:call-template name="printLevel">
        <xsl:with-param name="level" select="@level"/>
      </xsl:call-template>
      <xsl:text> : </xsl:text><xsl:value-of select="."/>
    </p>
  </xsl:template>
  
  <!-- Handle arbitrary test messages: smaller font and preformatted -->
  <xsl:template match="arbitrary" mode="table">
    <tr>
      <td>
        <xsl:call-template name="printLevel">
          <xsl:with-param name="level" select="@level"/>
        </xsl:call-template>
      </td>
      <td><font size="-1"><pre><xsl:value-of select="."/></pre></font></td>
    </tr>
  </xsl:template>
  
  <!-- Handle arbitrary test messages when not in a testcase -->
  <xsl:template match="arbitrary">
    <p>
      <xsl:call-template name="printLevel">
        <xsl:with-param name="level" select="@level"/>
      </xsl:call-template>
      <xsl:text> : </xsl:text>
      <font size="-1"><pre><xsl:value-of select="."/></pre></font>
    </p>
  </xsl:template>
  
  <!-- Handle fileCheck elements outputting info about files, etc.
       Note that we copy the contents of the element, since some 
       tests might have element output here. 
  -->
  <xsl:template match="fileCheck" mode="table">
    <tr>
      <td><font size="-1">fileCheck</font></td>
      <td>
          <xsl:text>Actual: </xsl:text>
        <xsl:element name="a">
          <xsl:attribute name="href"><xsl:value-of 
select="@actual"/></xsl:attribute>
          <xsl:value-of select="@actual"/>
        </xsl:element><br/>
          <xsl:text>Reference: </xsl:text>
        <xsl:element name="a">
          <xsl:attribute name="href"><xsl:value-of 
select="@reference"/></xsl:attribute>
          <xsl:value-of select="@reference"/>
        </xsl:element><br/>
          <br/>
        <pre><font size="-1"><xsl:copy-of select="."/></font></pre>
      </td>
    </tr>
  </xsl:template>
  
  <!-- Handle perf info simplistically; print out all attrs as timing data -->
  <xsl:template match="perf" mode="table">
    <tr>
      <td><font size="-1">perf</font></td>
      <td>
        <xsl:text>[</xsl:text><xsl:value-of 
select="@idref"/><xsl:text>]</xsl:text><br/>
        <xsl:for-each select="attribute::*">
          <xsl:choose>
            <!-- Skip unneeded attrs -->
            <xsl:when test="'level' = name()"/>
            <xsl:when test="'testlet' = name()"/>
            <xsl:when test="'idref' = name()"/>
            <xsl:when test="'actual' = name()"/>
            <xsl:when test="'reference' = name()"/>
            <!-- Output any other perf-related attrs, whatever they are -->
            <xsl:otherwise>
              <xsl:value-of select="name()"/><xsl:text> = 
</xsl:text><xsl:value-of select="."/><br/>
            </xsl:otherwise>
          </xsl:choose>
        </xsl:for-each>
      </td>
    </tr>
  </xsl:template>
  
  <!-- Handle basic hashtables and items within them -->
  <xsl:template match="hashtable">
    <table border="1" width="80%" cellspacing="1" cellpadding="2">
      <caption><xsl:value-of select="@desc"/></caption>
      <xsl:apply-templates select="hashitem"/>
    </table>
  </xsl:template>
  
  <xsl:template match="hashitem">
    <tr>
      <td><xsl:value-of select="@key"/></td>
      <td>
        <!-- Integrate with S4JLoadUtil: create links to loaded schemas -->
        <xsl:choose>
          <xsl:when test="@key='current-file'">
            <xsl:element name="a">
              <xsl:attribute name="href"><xsl:value-of 
select="."/></xsl:attribute>
              <xsl:value-of select="."/>
            </xsl:element>
          </xsl:when>
          <xsl:otherwise><xsl:value-of select="."/></xsl:otherwise>
        </xsl:choose>
      </td>
    </tr>
  </xsl:template>
  
  <!-- Handle basic hashtables and items when in a table, which is a bit tricky 
-->
  <xsl:template match="hashtable" mode="table">
    <tr>
    <td><xsl:text>hash</xsl:text></td>
      <td>
        <table border="1" width="80%" cellspacing="1" cellpadding="2">
          <caption><xsl:value-of select="@desc"/></caption>
          <xsl:apply-templates select="hashitem"/><!-- note no mode needed -->
        </table>
      </td>
    </tr>
  </xsl:template>
  
  <!-- Worker template to make testcase links: @desc is in anchor -->
  <xsl:template name="create-testcase-link">
    <xsl:param name="testcase"></xsl:param>
    <font size="-1">
      <xsl:element name="a">
        <xsl:attribute name="href"><xsl:value-of 
select="$testcase-marker"/><xsl:value-of select="translate($testcase/@desc,'\ 
','-')"/></xsl:attribute>
        <xsl:text>Testcase#</xsl:text><xsl:value-of 
select="substring-before($testcase/@desc,' ')"/>
      </xsl:element>
      <xsl:text>, </xsl:text>
    </font>
  </xsl:template>
  
  <!-- Worker template to make testcase anchors: @desc is in anchor -->
  <xsl:template name="create-testcase-anchor">
    <xsl:param name="testcase"></xsl:param>
    <xsl:element name="a">
      <xsl:attribute name="name"><xsl:value-of 
select="$testcase-marker"/><xsl:value-of select="translate($testcase/@desc,'\ 
','-')"/></xsl:attribute>
      <xsl:value-of select="@desc"/>
    </xsl:element>
  </xsl:template>
  
  <!-- Worker template to make checkresult anchors: @result is in anchor -->
  <xsl:template name="create-checkresult-anchor">
    <xsl:param name="checkresult"></xsl:param>
    <xsl:element name="a">
      <xsl:attribute name="name"><xsl:value-of 
select="$checkresult-marker"/><xsl:value-of 
select="translate($checkresult/@desc,'\ ','-')"/></xsl:attribute>
      <xsl:value-of select="@result"/>
    </xsl:element>
  </xsl:template>
  
  <!-- Override default text node processing, so statistics and other misc text 
is skipped -->
  <xsl:template match="text()"/>
  <xsl:template match="text()" mode="table"/>
  
  </xsl:stylesheet>
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to