You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@maven.apache.org by vm...@apache.org on 2003/03/23 13:54:59 UTC
cvs commit: maven/src/plugins-build/cactus/src/plugin-resources cactus.jsl junit.jsl
vmassol 2003/03/23 04:54:59
Modified: src/plugins-build/cactus/xdocs properties.xml goals.xml
src/plugins-build/cactus plugin.properties plugin.jelly
Added: src/plugins-build/cactus/src/plugin-resources cactus.jsl
Removed: src/plugins-build/cactus/src/plugin-resources junit.jsl
Log:
Added cactus report generation
Revision Changes Path
1.3 +23 -1 maven/src/plugins-build/cactus/xdocs/properties.xml
Index: properties.xml
===================================================================
RCS file: /home/cvs/maven/src/plugins-build/cactus/xdocs/properties.xml,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- properties.xml 22 Mar 2003 21:24:31 -0000 1.2
+++ properties.xml 23 Mar 2003 12:54:58 -0000 1.3
@@ -52,7 +52,7 @@
<td>
<p>
Location where the plugins puts temporary build-generated
- files. Default value is <code>${maven.build.dir}</code>.
+ files. Default value is <code>${maven.build.dir}/cactus</code>.
</p>
</td>
</tr>
@@ -84,6 +84,28 @@
Name of the webapp context under which the application will be
deployed for executing the Cactus tests. Default
value is <code>cactustest</code>.
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td>cactus.junit.usefile</td>
+ <td>Yes</td>
+ <td>
+ <p>
+ Decides whether the test result will be printed to the console or
+ not. Default value is <code>false</code>, meaning errors will be
+ displayed on the console.
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td>cactus.reports.dir</td>
+ <td>Yes</td>
+ <td>
+ <p>
+ Location of junit test reports for the Cactus tests.
+ Default value is
+ <code>${cactus.target.dir}/test-cactus-reports</code>.
</p>
</td>
</tr>
1.3 +15 -0 maven/src/plugins-build/cactus/xdocs/goals.xml
Index: goals.xml
===================================================================
RCS file: /home/cvs/maven/src/plugins-build/cactus/xdocs/goals.xml,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- goals.xml 22 Mar 2003 21:24:31 -0000 1.2
+++ goals.xml 23 Mar 2003 12:54:58 -0000 1.3
@@ -14,6 +14,21 @@
a <code>cactus.home.[container name]</code> property.
</description>
</goal>
+ <goal>
+ <name>cactus:report</name>
+ <description>
+ Generate an HTML report for the Cactus tests that been run. In order
+ to get this report as part of the generated web site, add the
+ following to your <code>project.xml</code>:
+<source><![CDATA[
+ <reports>
+ [...]
+ <report>maven-cactus-plugin</report>
+ [...]
+ </reports>
+]]></source>
+ </description>
+ </goal>
</goals>
</body>
</document>
1.6 +9 -2 maven/src/plugins-build/cactus/plugin.properties
Index: plugin.properties
===================================================================
RCS file: /home/cvs/maven/src/plugins-build/cactus/plugin.properties,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- plugin.properties 22 Mar 2003 16:47:15 -0000 1.5
+++ plugin.properties 23 Mar 2003 12:54:59 -0000 1.6
@@ -15,8 +15,8 @@
# Location of Cactus tests in project sources
cactus.src.dir = ${basedir}/src/test-cactus
-# Location where the plugins puts temporary build-generated files
-cactus.target.dir = ${maven.build.dir}
+# Location where the plugins puts temporary Cactus build-generated files
+cactus.target.dir = ${maven.build.dir}/cactus
# Default port on which to start the containers
cactus.port = 8080
@@ -29,3 +29,10 @@
# Default webapp context
cactus.context = cactustest
+
+# Decides whether the test result will be printed to the console or
+# not. Default is true
+cactus.junit.usefile = false
+
+# Location of junit test reports for the Cactus tests
+cactus.reports.dir = ${cactus.target.dir}/test-cactus-reports
1.10 +54 -0 maven/src/plugins-build/cactus/plugin.jelly
Index: plugin.jelly
===================================================================
RCS file: /home/cvs/maven/src/plugins-build/cactus/plugin.jelly,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- plugin.jelly 23 Mar 2003 09:30:31 -0000 1.9
+++ plugin.jelly 23 Mar 2003 12:54:59 -0000 1.10
@@ -106,10 +106,64 @@
<property name="cactus.context" value="${cactus.context}"/>
</ant>
+ <j:set var="containerFound" value="true"/>
</j:if>
</j:forEach>
+
+ <!-- If no container was defined, display a warning message -->
+ <j:if test="${containerFound != 'true'}">
+ <echo>WARNING: You need to define at least one container property of the form cactus.home.[container name]. See the plugin documentation.</echo>
+ </j:if>
+ </goal>
+
+ <!--
+ ========================================================================
+ Register a Cactus report.
+ ========================================================================
+ -->
+ <goal name="maven-cactus-plugin:register">
+ <doc:registerReport
+ name="Cactus Unit Tests"
+ pluginName="cactus"
+ description="Report on the results of the Cactus unit tests."
+ link="cactus-report"/>
+ </goal>
+
+ <!--
+ ========================================================================
+ Deregister a Cactus report.
+ ========================================================================
+ -->
+ <goal name="maven-cactus-plugin:deregister">
+ <doc:deregisterReport name="Cactus Unit Tests"/>
+ </goal>
+
+ <!--
+ ========================================================================
+ Generate a Cactus report.
+ ========================================================================
+ -->
+ <goal name="cactus:report"
+ description="Generate a report from the test results">
+
+ <!-- Consolidate the reports into a single -->
+ <junitreport todir="${cactus.target.dir}">
+ <fileset dir="${cactus.reports.dir}">
+ <include name="TEST-*.xml"/>
+ </fileset>
+ </junitreport>
+
+ <doc:jsl
+ input="${cactus.target.dir}/TESTS-TestSuites.xml"
+ output="cactus-report.xml"
+ stylesheet="${plugin.resources}/cactus.jsl"
+ omitXmlDeclaration="true"
+ outputMode="xml"
+ prettyPrint="true"
+ />
+
</goal>
</project>
1.1 maven/src/plugins-build/cactus/src/plugin-resources/cactus.jsl
Index: cactus.jsl
===================================================================
<?xml version="1.0"?>
<jsl:stylesheet
select="$doc"
xmlns:j="jelly:core"
xmlns:jsl="jelly:jsl"
xmlns:x="jelly:xml"
xmlns:define="jelly:define"
xmlns:util="jelly:util"
xmlns:junit="junit"
xmlns:doc="doc"
trim="false">
<!-- This needs to be instantiated here to be available in the template matches -->
<j:useBean var="mavenTool" class="org.apache.maven.MavenTool"/>
<j:useBean var="numbers" class="java.text.DecimalFormat"/>
<j:useBean var="htmlescape" class="org.apache.velocity.anakia.Escape"/>
<j:useBean var="formatter" class="org.apache.maven.DVSLFormatter"/>
<j:useBean var="fileutil" class="org.apache.velocity.texen.util.FileUtil"/>
<j:useBean var="pathtool" class="org.apache.maven.DVSLPathTool"/>
<define:taglib uri="junit">
<define:tag name="nav">
<p>
[
<a href="#Summary">summary</a>]
[
<a href="#Package List">package list</a>]
[
<a href="#Test Cases">test cases</a>]
</p>
</define:tag>
<define:tag name="testSuiteHeader">
<tr>
<th>Name</th>
<th>Tests</th>
<th>Errors</th>
<th>Failures</th>
<th>Time(s)</th>
</tr>
</define:tag>
<define:tag name="testCaseHeader">
<tr>
<th>Name</th>
<th>Status</th>
<th>Type</th>
<th>Time(s)</th>
</tr>
</define:tag>
<define:tag name="displayFailure">
<j:choose>
<j:when test="${current.attribute('message') != null}">
${htmlescape.getText(current.attribute('message').value)}
</j:when>
<j:otherwise>
N/A
</j:otherwise>
<p/>
<code>
${htmlescape.getText(current.value())}
</code>
</j:choose>
</define:tag>
</define:taglib>
<jsl:template match="testsuites">
<document>
<properties>
<title>JUnit Test Results</title>
</properties>
<body>
<section name="Summary">
<junit:nav/>
<j:set var="testCount"><x:expr select="sum(testsuite/@tests)"/></j:set>
<j:set var="errorCount"><x:expr select="sum(testsuite/@errors)"/></j:set>
<j:set var="failureCount"><x:expr select="sum(testsuite/@failures)"/></j:set>
<j:set var="timeCount"><x:expr select="sum(testsuite/@time)"/></j:set>
<j:set var="successRate"><x:expr select="($testCount - ($failureCount + $errorCount)) div $testCount"/></j:set>
<table>
<tr>
<th>Tests</th>
<th>Errors</th>
<th>Failures</th>
<th>Success rate</th>
<th>Time(s)</th>
</tr>
<tr>
<td>
<doc:formatAsNumber string="${testCount}" pattern="0"/>
</td>
<td>
<doc:formatAsNumber string="${errorCount}" pattern="0"/>
</td>
<td>
<doc:formatAsNumber string="${failureCount}" pattern="0"/>
</td>
<td>
<doc:formatAsNumber string="${successRate}" pattern="0.00%"/>
</td>
<td>
<doc:formatAsNumber string="${timeCount}" pattern="0.00"/>
</td>
</tr>
</table>
<p>
Note:
<i>failures</i> are anticipated and checked for with
assertions while
<i>errors</i> are unanticipated.
</p>
</section>
<section name="Package List">
<junit:nav/>
<table>
<!--
<junit:testSuiteHeader/>
-->
<x:set var="testsuites" select="./testsuite[not(./@package = preceding-sibling::testsuite/@package)]"/>
<j:forEach var="testsuite" items="${testsuites}">
<j:set var="package" value="${testsuite.attribute('package').value}"/>
<x:set var="quotedPackage" select='"${package}"'/>
<j:set var="testCount"><x:expr select="sum(./testsuite[./@package = $quotedPackage]/@tests)"/></j:set>
<j:set var="errorCount"><x:expr select="sum(./testsuite[./@package = $quotedPackage]/@errors)"/></j:set>
<j:set var="failureCount"><x:expr select="sum(./testsuite[./@package = $quotedPackage]/@failures)"/></j:set>
<j:set var="timeCount"><x:expr select="sum(./testsuite[./@package = $quotedPackage]/@time)"/></j:set>
<tr>
<td>
<a href="#${package}">${package}</a>
</td>
<td>
<doc:formatAsNumber string="${testCount}" pattern="0"/>
</td>
<td>
<doc:formatAsNumber string="${failureCount}" pattern="0"/>
</td>
<td>
<doc:formatAsNumber string="${errorCount}" pattern="0"/>
</td>
<td>
<doc:formatAsNumber string="${timeCount}" pattern="0.00"/>
</td>
</tr>
</j:forEach>
</table>
<p>
Note: package statistics are not computed recursively, they only
sum up all of its testsuites numbers.
</p>
<j:forEach var="testsuite" items="${testsuites}">
<j:set var="package" value="${testsuite.attribute('package').value}"/>
<x:set var="quotedPackage" select='"${package}"'/>
<a name="${package}"></a>
<subsection name="${package}">
<table>
<!--
<junit:testSuiteHeader/>
-->
<x:forEach var="test" select="/testsuites/testsuite[./@package = $quotedPackage]">
<tr>
<td>
<a href="#${test.attribute('name').value}">${test.attribute('name').value}</a>
</td>
<td>
<doc:formatAsNumber string="${test.attribute('tests').value}" pattern="0"/>
</td>
<td>
<doc:formatAsNumber string="${test.attribute('errors').value}" pattern="0"/>
</td>
<td>
<doc:formatAsNumber string="${test.attribute('failures').value}" pattern="0"/>
</td>
<td>
<doc:formatAsNumber string="${test.attribute('time').value}" pattern="0.000"/>
</td>
</tr>
</x:forEach>
</table>
</subsection>
</j:forEach>
</section>
<section name="Test Cases">
<junit:nav/>
<x:set var="testsuites" select="./testsuite"/>
<j:forEach var="testsuite" items="${testsuites}">
<a name="${testsuite.attribute('name').value}"></a>
<subsection name="${testsuite.attribute('name').value}">
<table>
<!--
<junit:testCaseHeader/>
-->
## test can even not be started at all (failure to load the class)
## so report the error directly
##
<x:set var="errors" select="$testsuite/error"/>
<j:forEach var="error" items="${errors}">
<tr>
<td colspan="4">
<junit:displayFailure current="${error}"/>
</td>
</tr>
</j:forEach>
<x:set var="testcases" select="$testsuite/testcase"/>
<j:forEach var="testcase" items="${testcases}">
<j:set var="failure" value="${testcase.selectSingleNode('failure')}"/>
<j:set var="error" value="${testcase.selectSingleNode('error')}"/>
<tr>
<td>${testcase.attribute("name").value}</td>
<j:choose>
<j:when test="${failure != null}">
<td style="width: 60px; color: red; font-weight: bold">Failure</td>
</j:when>
<j:when test="${error != null}">
<td style="width: 60px; color: red; font-weight: bold">Error</td>
</j:when>
<j:otherwise>
<td style="width: 60px;">Success</td>
</j:otherwise>
</j:choose>
<j:choose>
<j:when test="${testcase.attribute('time') != null}">
<td width="60px">
<doc:formatAsNumber string="${testcase.attribute('time').value}" pattern="0.00"/>
</td>
</j:when>
<j:otherwise>
<td width="60px"></td>
</j:otherwise>
</j:choose>
</tr>
<j:choose>
<j:when test="${failure != null}">
<tr>
<td colspan="3" style="padding-left: 50px">
<junit:displayFailure current="${failure}"/>
</td>
</tr>
</j:when>
<j:when test="${error != null}">
<tr>
<td colspan="3" style="padding-left: 50px">
<junit:displayFailure current="${error}"/>
</td>
</tr>
</j:when>
</j:choose>
</j:forEach>
</table>
</subsection>
</j:forEach>
</section>
</body>
</document>
</jsl:template>
</jsl:stylesheet>
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org