diff --git a/config/cruisecontrol/version-2.8.1/webapps/cruisecontrol/xsl/buildresults.xsl b/config/cruisecontrol/version-2.8.1/webapps/cruisecontrol/xsl/buildresults.xsl new file mode 100644 index 0000000000000000000000000000000000000000..13176eb41204e076252dc6ac298ee9d3012f12be --- /dev/null +++ b/config/cruisecontrol/version-2.8.1/webapps/cruisecontrol/xsl/buildresults.xsl @@ -0,0 +1,79 @@ +<?xml version="1.0"?> +<!--******************************************************************************** + * CruiseControl, a Continuous Integration Toolkit + * Copyright (c) 2001, ThoughtWorks, Inc. + * 651 W Washington Ave. Suite 500 + * Chicago, IL 60601 USA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * + Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * + Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * + * + Neither the name of ThoughtWorks, Inc., CruiseControl, nor the + * names of its contributors may be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + ********************************************************************************--> +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> + + <xsl:import href="maven.xsl"/> + <xsl:import href="nant.xsl"/> + <xsl:import href="checkstyle.xsl"/> + <xsl:import href="classycle.xsl"/> + <xsl:import href="pmd.xsl"/> + <xsl:import href="macker.xsl"/> + <xsl:import href="errors.xsl"/> + <xsl:import href="compile.xsl"/> + <xsl:import href="javadoc.xsl"/> + <xsl:import href="unittests.xsl"/> + <xsl:import href="fittests.xsl"/> + <xsl:import href="modifications.xsl"/> + <xsl:import href="cvstagdiff.xsl"/> + <xsl:import href="distributables.xsl"/> + + <xsl:output method="html"/> + + <xsl:variable name="cruisecontrol.list" select="."/> + + <xsl:template match="/"> + <p><xsl:apply-templates select="$cruisecontrol.list" mode="maven"/></p> + <p><xsl:apply-templates select="$cruisecontrol.list" mode="nant"/></p> + <p><xsl:apply-templates select="$cruisecontrol.list" mode="checkstyle"/></p> + <p><xsl:apply-templates select="$cruisecontrol.list" mode="classycle"/></p> + <p><xsl:apply-templates select="$cruisecontrol.list" mode="pmd"/></p> + <p><xsl:apply-templates select="$cruisecontrol.list" mode="macker"/></p> + <p><xsl:apply-templates select="$cruisecontrol.list" mode="errors"/></p> + <!-- + for traditional cc display of only compile errors and warnings + comment out mode="errors" and uncomment mode="compile" and mode="javadoc" + <p><xsl:apply-templates select="$cruisecontrol.list" mode="compile"/></p> + <p><xsl:apply-templates select="$cruisecontrol.list" mode="javadoc"/></p> + --> + <p><xsl:apply-templates select="$cruisecontrol.list" mode="unittests"/></p> + <p><xsl:apply-templates select="$cruisecontrol.list" mode="fittests"/></p> + <p><xsl:apply-templates select="$cruisecontrol.list" mode="modifications"/></p> + <p><xsl:apply-templates select="$cruisecontrol.list" mode="cvstagdiff"/></p> + <p><xsl:apply-templates select="$cruisecontrol.list" mode="distributables"/></p> + </xsl:template> +</xsl:stylesheet> diff --git a/config/cruisecontrol/version-2.8.1/webapps/cruisecontrol/xsl/classycle.xsl b/config/cruisecontrol/version-2.8.1/webapps/cruisecontrol/xsl/classycle.xsl new file mode 100644 index 0000000000000000000000000000000000000000..ce4ef45188f2a10bba3289445cf5568cac42ec47 --- /dev/null +++ b/config/cruisecontrol/version-2.8.1/webapps/cruisecontrol/xsl/classycle.xsl @@ -0,0 +1,20 @@ +<?xml version="1.0"?> +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> + <xsl:output method="html"/> + + <xsl:template match="/" mode="classycle"> + <xsl:apply-templates select="cruisecontrol/build/target[@name='check-dependencies']" mode="classycle"/> + </xsl:template> + + <xsl:template match="build/target" mode="classycle"> + <table align="center" cellpadding="2" cellspacing="0" border="0" width="98%"> + <tr><td class="compile-sectionheader">Classycle</td></tr> + <tr><td align="left"><pre class="compile-error-data"><xsl:apply-templates select="task"/></pre></td></tr> + </table> + </xsl:template> + + <xsl:template match="message" mode="classycle"> + <xsl:value-of select="text()"/> + </xsl:template> + +</xsl:stylesheet> diff --git a/config/cruisecontrol/version-2.8.1/webapps/cruisecontrol/xsl/testdetails.xsl b/config/cruisecontrol/version-2.8.1/webapps/cruisecontrol/xsl/testdetails.xsl new file mode 100644 index 0000000000000000000000000000000000000000..584f0b167ddc8cbb6286bf50f567900e92f6d410 --- /dev/null +++ b/config/cruisecontrol/version-2.8.1/webapps/cruisecontrol/xsl/testdetails.xsl @@ -0,0 +1,267 @@ +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> +<!--******************************************************************************** + * CruiseControl, a Continuous Integration Toolkit + * Copyright (c) 2001, ThoughtWorks, Inc. + * 200 E. Randolph, 25th Floor + * Chicago, IL 60601 USA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * + Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * + Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * + * + Neither the name of ThoughtWorks, Inc., CruiseControl, nor the + * names of its contributors may be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + ********************************************************************************--> + <xsl:output method="html" encoding="UTF-8" indent="yes"/> + <xsl:decimal-format decimal-separator="." grouping-separator="," /> + + <!-- + Root template + --> + <xsl:template match="/"> + <script type="text/javascript" language="JavaScript"> + <!-- + Function show/hide given div + --> + function toggleDivVisibility(_div) { + if (_div.style.display=="none") { + _div.style.display="block"; + } else { + _div.style.display="none"; + } + } + </script> + + <!-- Main table --> + <table border="0" cellspacing="0" width="100%"> + <colgroup> + <col width="10%"/> + <col width="45%"/> + <col width="25%"/> + <col width="10%"/> + <col width="10%"/> + </colgroup> + <tr valign="top" class="unittests-sectionheader" align="left"> + <th colspan="3">Name</th> + <th>Status</th> + <th nowrap="nowrap">Time(s)</th> + </tr> + + <!-- display test suites --> + <xsl:apply-templates select="//testsuite"> + <xsl:sort select="count(testcase/error)" data-type="number" order="descending"/> + <xsl:sort select="count(testcase/failure)" data-type="number" order="descending"/> + <xsl:sort select="@package"/> + <xsl:sort select="@name"/> + </xsl:apply-templates> + + </table> + + </xsl:template> + + <!-- + Test Suite Template + Construct TestSuite section + --> + <xsl:template match="testsuite"> + <tr> + <xsl:attribute name="class"> + <xsl:choose> + <xsl:when test="testcase/error">unittests-error-title</xsl:when> + <xsl:when test="testcase/failure">unittests-failure-title</xsl:when> + <xsl:otherwise>unittests-title</xsl:otherwise> + </xsl:choose> + </xsl:attribute> + <td colspan="5"><xsl:value-of select="concat(@package,'.',@name)"/></td> + </tr> + <!-- Display tests --> + <xsl:apply-templates select="testcase"/> + <!-- Display details links --> + <xsl:apply-templates select="current()" mode="details"/> + </xsl:template> + + <!-- + Testcase template + Construct testcase section + --> + <xsl:template match="testcase"> + <tr> + <xsl:attribute name="class"> + <xsl:choose> + <xsl:when test="error">unittests-error</xsl:when> + <xsl:when test="failure">unittests-failure</xsl:when> + <xsl:otherwise>unittests-data</xsl:otherwise> + </xsl:choose> + </xsl:attribute> + <xsl:if test="position() mod 2 = 0"> + <xsl:attribute name="bgcolor">#EEEEEE</xsl:attribute> + </xsl:if> + <td> </td> + <td colspan="2"> + <xsl:value-of select="@classname"/>.<xsl:value-of select="@name"/> + </td> + <td> + <xsl:choose> + <xsl:when test="error"> + <a href="javascript:void(0)" + onClick="toggleDivVisibility(document.getElementById('{concat('error.',../@package,'.',../@name,'.',@name)}'))">Error »</a> + </xsl:when> + <xsl:when test="failure"> + <a href="javascript:void(0)" + onClick="toggleDivVisibility(document.getElementById('{concat('failure.',../@package,'.',../@name,'.',@name)}'))">Failure »</a> + </xsl:when> + <xsl:otherwise>Success</xsl:otherwise> + </xsl:choose> + </td> + <xsl:choose> + <xsl:when test="not(failure|error)"> + <td> + <xsl:value-of select="format-number(@time,'0.000')"/> + </td> + </xsl:when> + <xsl:otherwise> + <td/> + </xsl:otherwise> + </xsl:choose> + </tr> + <xsl:if test="error"> + <tr> + <td colspan="5"> + <div id="{concat('error.',../@package,'.',../@name,'.',@name)}" class="testresults-output-div" style="display: none;"> + <span style="font-weight:bold">Error:</span><br/> + <xsl:apply-templates select="error/text()" mode="newline-to-br"/> + </div> + </td> + </tr> + </xsl:if> + <xsl:if test="failure"> + <tr> + <td colspan="5"> + <div id="{concat('failure.',../@package,'.',../@name,'.',@name)}" class="testresults-output-div" style="display: none;"> + <span style="font-weight:bold">Failure:</span><br/> + <xsl:apply-templates select="failure/text()" mode="newline-to-br"/> + </div> + </td> + </tr> + </xsl:if> + </xsl:template> + + <!-- + Display Properties and Output links + and construct hidden div's with data + --> + <xsl:template match="testsuite" mode="details"> + <tr class="unittests-data"> + <td colspan="2"> + <xsl:if test="count(properties/property)>0"> + <a href="javascript:void(0)" onClick="toggleDivVisibility(document.getElementById('{concat('properties.',@package,'.',@name)}'))">Properties »</a> + </xsl:if>  + </td> + <td> + <xsl:if test="system-out/text()"> + <a href="javascript:void(0)" onClick="toggleDivVisibility(document.getElementById('{concat('system_out.',@package,'.',@name)}'))">System.out »</a> + </xsl:if>  + </td> + <td> + <xsl:if test="system-err/text()"> + <a href="javascript:void(0)" onClick="toggleDivVisibility(document.getElementById('{concat('system_err.',@package,'.',@name)}'))">System.err »</a> + </xsl:if>  + </td> + <td> </td> + </tr> + <tr> + <td colspan="5"> + <!-- Construct details div's --> + <!-- System Error --> + <xsl:apply-templates select="system-err" mode="system-err-div"> + <xsl:with-param name="div-id" select="concat('system_err.',@package,'.',@name)"/> + </xsl:apply-templates> + <!-- System Output --> + <xsl:apply-templates select="system-out" mode="system-out-div"> + <xsl:with-param name="div-id" select="concat('system_out.',@package,'.',@name)"/> + </xsl:apply-templates> + <!-- Properties --> + <xsl:apply-templates select="properties" mode="properties-div"> + <xsl:with-param name="div-id" select="concat('properties.',@package,'.',@name)"/> + </xsl:apply-templates> +   + </td> + </tr> + </xsl:template> + + <!-- + Create div with detailed system output + --> + <xsl:template match="system-out" mode="system-out-div" > + <xsl:param name="div-id"/> + <div id="{$div-id}" class="testresults-output-div" style="display: none;"> + <span style="font-weight:bold">System out:</span><br/> + <xsl:apply-templates select="current()" mode="newline-to-br"/> + </div> + </xsl:template> + + <!-- + Create div with detailed errors output + --> + <xsl:template match="system-err" mode="system-err-div" > + <xsl:param name="div-id"/> + <div id="{$div-id}" class="testresults-output-div" style="display: none;"> + <span style="font-weight:bold">System err:</span><br/> + <xsl:apply-templates select="current()" mode="newline-to-br"/> + </div> + </xsl:template> + + <!-- + Create div with properties + --> + <xsl:template match="properties" mode="properties-div" > + <xsl:param name="div-id"/> + <div id="{$div-id}" class="testresults-output-div" style="display: none;"> + <span style="font-weight:bold">Properties:</span><br/> + <table> + <tr> + <th>Property</th> + <th>Value</th> + </tr> + <xsl:for-each select="property"> + <xsl:sort select="@name"/> + <tr> + <td><xsl:value-of select="@name"/> </td> + <td><xsl:value-of select="@value"/> </td> + </tr> + </xsl:for-each> + </table> + </div> + </xsl:template> + + <!-- + Convert line brakes in given text into <br/> + --> + <xsl:template match="text()" mode="newline-to-br"> + <xsl:value-of select="replace(current(), '(\n)|(\r)|(\r\n)', '<br/>')" disable-output-escaping="yes"/> + </xsl:template> + +</xsl:stylesheet> diff --git a/config/cruisecontrol/version-2.8.1/webapps/cruisecontrol/xsl/unittests.xsl b/config/cruisecontrol/version-2.8.1/webapps/cruisecontrol/xsl/unittests.xsl new file mode 100644 index 0000000000000000000000000000000000000000..3d29a496f1689bd25ce207fd964870bf769f0588 --- /dev/null +++ b/config/cruisecontrol/version-2.8.1/webapps/cruisecontrol/xsl/unittests.xsl @@ -0,0 +1,283 @@ +<?xml version="1.0"?> +<!--******************************************************************************** + * CruiseControl, a Continuous Integration Toolkit + * Copyright (c) 2001, ThoughtWorks, Inc. + * 200 E. Randolph, 25th Floor + * Chicago, IL 60601 USA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * + Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * + Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * + * + Neither the name of ThoughtWorks, Inc., CruiseControl, nor the + * names of its contributors may be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + ********************************************************************************--> +<xsl:stylesheet + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" + xmlns:lxslt="http://xml.apache.org/xslt"> + + <xsl:output method="html"/> + + <xsl:variable name="testsuite.list" select="//testsuite"/> + <xsl:variable name="testsuite.error.count" select="count($testsuite.list/error)"/> + <xsl:variable name="testcase.list" select="$testsuite.list/testcase"/> + <xsl:variable name="testcase.error.list" select="$testcase.list/error"/> + <xsl:variable name="testcase.failure.list" select="$testcase.list/failure"/> + <xsl:variable name="totalErrorsAndFailures" select="count($testcase.error.list) + count($testcase.failure.list) + $testsuite.error.count"/> + + <xsl:template match="/" mode="unittests"> + <table align="center" cellpadding="2" cellspacing="0" border="0" width="98%"> + + <!-- Unit Tests --> + <tr> + <td class="unittests-sectionheader" colspan="4"> +  Unit Tests: (<xsl:value-of select="count($testcase.list)"/>) + </td> + </tr> + + <xsl:choose> + <xsl:when test="count($testsuite.list) = 0"> + <tr> + <td colspan="2" class="unittests-data"> + No Tests Run + </td> + </tr> + <tr> + <td colspan="2" class="unittests-error"> + This project doesn't have any tests + </td> + </tr> + </xsl:when> + + <xsl:when test="$totalErrorsAndFailures = 0"> + <tr> + <td colspan="2" class="unittests-data"> + All Tests Passed + </td> + </tr> + </xsl:when> + </xsl:choose> + <tr> + <td> + <table align="center" cellpadding="2" cellspacing="0" border="0" width="98%"> + <xsl:apply-templates select="$testcase.error.list" mode="unittests"/> + <xsl:apply-templates select="$testcase.failure.list" mode="unittests"/> + </table> + </td> + </tr> + <tr/> + <tr><td colspan="2"> </td></tr> + + <xsl:if test="$totalErrorsAndFailures > 0"> + + <tr> + <td class="unittests-sectionheader" colspan="4"> +  Unit Test Error Details: (<xsl:value-of select="$totalErrorsAndFailures"/>) + </td> + </tr> + + <!-- (PENDING) Why doesn't this work if set up as variables up top? --> + <xsl:call-template name="testdetail"> + <xsl:with-param name="detailnodes" select="//testsuite/testcase[.//error]"/> + </xsl:call-template> + + <xsl:call-template name="testdetail"> + <xsl:with-param name="detailnodes" select="//testsuite/testcase[.//failure]"/> + </xsl:call-template> + </xsl:if> + </table> + </xsl:template> + + <!-- UnitTest Errors --> + <xsl:template match="error" mode="unittests"> + <tr> + <xsl:if test="position() mod 2 = 0"> + <xsl:attribute name="class">unittests-oddrow</xsl:attribute> + </xsl:if> + + <td class="unittests-data" width="50"> + error + </td> + <td class="unittests-data" width="300"> + <xsl:value-of select="../@name"/> + </td> + <td class="unittests-data" width="400"> + <xsl:value-of select="../@classname"/> + </td> + </tr> + </xsl:template> + + <!-- UnitTest Failures --> + <xsl:template match="failure" mode="unittests"> + <tr> + <xsl:if test="($testsuite.error.count + position()) mod 2 = 0"> + <xsl:attribute name="class">unittests-oddrow</xsl:attribute> + </xsl:if> + + <td class="unittests-data" width="50"> + failure + </td> + <td class="unittests-data" width="300"> + <xsl:value-of select="../@name"/> + </td> + <td class="unittests-data" width="400"> + <xsl:value-of select="../@classname"/> + </td> + </tr> + </xsl:template> + + <!-- UnitTest Errors And Failures Detail Template --> + <xsl:template name="testdetail"> + <xsl:param name="detailnodes"/> + + <xsl:for-each select="$detailnodes"> + <tr> + <td colspan="2"> + <table width="100%" border="0" cellspacing="0"> + + <tr class="unittests-title"> + <td width="50">Test: </td> + <td> + <xsl:value-of select="@name"/> + </td> + </tr> + <tr class="unittests-data"> + <td>Class: </td> + <td> + <xsl:value-of select="@classname"/> + </td> + </tr> + + <xsl:if test="error"> + <xsl:call-template name="test-data"> + <xsl:with-param name="word" select="error"/> + <xsl:with-param name="type" select="'error'"/> + </xsl:call-template> + </xsl:if> + + <xsl:if test="failure"> + <xsl:call-template name="test-data"> + <xsl:with-param name="word" select="failure"/> + <xsl:with-param name="type" select="'failure'"/> + </xsl:call-template> + </xsl:if> + + </table> + </td> + </tr> + + </xsl:for-each> + </xsl:template> + + <xsl:template name="test-data"> + <xsl:param name="word"/> + <xsl:param name="type"/> + <tr> + <td/> + <td> + <xsl:call-template name="stack-trace"> + <xsl:with-param name="word" select="$word"/> + <xsl:with-param name="type" select="$type"/> + </xsl:call-template> + </td> + </tr> + </xsl:template> + + <xsl:template name="stack-trace"> + <xsl:param name="word"/> + <xsl:param name="type"/> + <table width="100%" border="1" cellspacing="0" cellpadding="2"> + <tr> + <td> + <table width="100%" border="0" cellspacing="0" cellpadding="0"> + <xsl:call-template name="br-replace"> + <xsl:with-param name="word" select="$word"/> + <xsl:with-param name="type" select="$type"/> + <xsl:with-param name="count" select="0"/> + </xsl:call-template> + </table> + </td> + </tr> + </table> + </xsl:template> + + <xsl:template name="br-replace"> + <xsl:param name="word"/> + <xsl:param name="type"/> + <xsl:param name="count"/> +<!-- </xsl:text> on next line on purpose to get newline --> +<xsl:variable name="stackstart"><xsl:text> at</xsl:text></xsl:variable> +<xsl:variable name="cr"><xsl:text> +</xsl:text></xsl:variable> + <xsl:choose> + <xsl:when test="contains($word,$cr)"> + <tr> + <xsl:attribute name="class">unittests-<xsl:value-of select="$type"/></xsl:attribute> + <xsl:if test="$count mod 2 != 0"> + <xsl:attribute name="bgcolor">#EEEEEE</xsl:attribute> + </xsl:if> + <xsl:if test="$count != 0 and starts-with($word,$stackstart)"> + <td width="30"/> + <td> + <xsl:value-of select="substring-before($word,$cr)"/>  + </td> + </xsl:if> + <xsl:if test="$count != 0 and not(starts-with($word,$stackstart))"> + <td colspan="2"> + <xsl:value-of select="substring-before($word,$cr)"/>  + </td> + </xsl:if> + <xsl:if test="$count = 0"> + <td colspan="2"> + <xsl:value-of select="substring-before($word,$cr)"/>  + </td> + </xsl:if> + </tr> + <xsl:call-template name="br-replace"> + <xsl:with-param name="word" select="substring-after($word,$cr)"/> + <xsl:with-param name="type" select="$type"/> + <xsl:with-param name="count" select="$count + 1"/> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <tr> + <xsl:attribute name="class">unittests-<xsl:value-of select="$type"/></xsl:attribute> + <xsl:if test="$count mod 2 != 0"> + <xsl:attribute name="bgcolor">#EEEEEE</xsl:attribute> + </xsl:if> + <td width="30"/> + <td> + <xsl:value-of select="$word"/> + </td> + </tr> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + + <xsl:template match="/"> + <xsl:apply-templates select="." mode="unittests"/> + </xsl:template> +</xsl:stylesheet>