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: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]