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