Author: jbellis
Date: Mon Apr  6 18:00:43 2009
New Revision: 762442

URL: http://svn.apache.org/viewvc?rev=762442&view=rev
Log:
add cobertura support ('ant codecoverage -Dcobertura.dir=/path/to/cobertura').  
patch by johano; reviewed by jbellis for #55

Modified:
    incubator/cassandra/trunk/build.xml

Modified: incubator/cassandra/trunk/build.xml
URL: 
http://svn.apache.org/viewvc/incubator/cassandra/trunk/build.xml?rev=762442&r1=762441&r2=762442&view=diff
==============================================================================
--- incubator/cassandra/trunk/build.xml (original)
+++ incubator/cassandra/trunk/build.xml Mon Apr  6 18:00:43 2009
@@ -14,10 +14,19 @@
     <property name="test.classes" value="${build.dir}/test/classes"/>
     <property name="final.name" value="cassandra"/>
 
+    <!-- http://cobertura.sourceforge.net/ -->
+    <property name="cobertura.build.dir" value="${build.dir}/cobertura"/>
+    <!-- can't include due to licensing, specify jar via command line -->
+    <property name="cobertura.dir" value="/tmp"/>
+    <property name="cobertura.report.dir" 
value="${cobertura.build.dir}/report"/>
+    <property name="cobertura.classes.dir" 
value="${cobertura.build.dir}/classes"/>
+    <property name="cobertura.datafile" 
value="${cobertura.build.dir}/cobertura.ser"/>
+       
     <!-- 
         Add all the dependencies.
     -->
     <path id="cassandra.classpath">
+        <pathelement location="${cobertura.classes.dir}"/>
         <pathelement location="${build.classes}"/>
         <fileset dir="${build.lib}">
           <include name="**/*.jar" />
@@ -89,8 +98,10 @@
     <!--
        The build target builds all the .class files
     -->
-    <target depends="build-subprojects,build-project" name="build"/>
+    <target name="build" depends="build-subprojects,build-project"/>
     <target name="build-subprojects"/>
+    <target name="codecoverage" 
depends="cobertura-instrument,test,cobertura-report"/>
+       
     <target depends="init,gen-cli-grammar,gen-cql-grammar" 
name="build-project">
         <echo message="${ant.project.name}: ${ant.file}"/>
         <javac debug="true" debuglevel="${debuglevel}" 
destdir="${build.classes}">
@@ -136,15 +147,53 @@
     <testng outputDir="${build.dir}/test/output"
             haltOnFailure="true"
             verbose="2">
+      <sysproperty key="net.sourceforge.cobertura.datafile" 
file="${cobertura.datafile}"/>
       <jvmarg value="-Dstorage-config=test/conf"/>
       <classpath>
+        <pathelement location="${cobertura.classes.dir}"/>
         <path refid="cassandra.classpath" />
         <pathelement location="${test.classes}"/>
+        <pathelement location="${cobertura.dir}/cobertura.jar"/>
       </classpath>
       <classfileset dir="${test.classes}" includes="**/*.class" />
     </testng>
   </target>
        
+  <!-- instruments the classes to later create code coverage reports -->
+  <target name="cobertura-instrument" depends="build,build-test">
+    <taskdef resource="tasks.properties">
+      <classpath>
+        <fileset dir="${cobertura.dir}">
+            <include name="cobertura.jar" />
+            <include name="lib/**/*.jar" />
+        </fileset>
+      </classpath>
+    </taskdef>
+    
+    <delete file="${cobertura.datafile}"/>
+    
+    <cobertura-instrument todir="${cobertura.classes.dir}" 
datafile="${cobertura.datafile}">
+      <ignore regex="org.apache.log4j.*"/>
+      
+      <fileset dir="${build.classes}">
+        <include name="**/*.class"/>
+        <exclude name="**/*Test.class"/>
+        <exclude name="**/*TestCase.class"/>
+        <exclude name="**/test/*.class"/>
+        <exclude name="${cobertura.excludes}"/>
+      </fileset>
+     
+    </cobertura-instrument>
+  </target>    
+
+  <!-- create both html and xml code coverage reports -->
+  <target name="cobertura-report">
+    <cobertura-report format="html" destdir="${cobertura.report.dir}" 
srcdir="${build.src}"
+      datafile="${cobertura.datafile}"/>
+    <cobertura-report format="xml" destdir="${cobertura.report.dir}" 
srcdir="${build.src}"
+      datafile="${cobertura.datafile}"/>
+  </target>    
+       
   <target name="javadoc" depends="init">
     <tstamp>
       <format property="YEAR" pattern="yyyy"/>


Reply via email to