I spent a few minutes this morning trying to get an emma coverage  
report over contrib. Short answer is that it doesn't work -- emma  
throws an exception while instrumenting the code (see attached  
console.txt).

I will go and bug the emma folks, but first wanted to ask here if  
there is any specific reason that Clojure-generated bytecode might  
surprise emma?

I have attached a modified build.xml if anybody wants to try this out.

Stu


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To post to this group, send email to clojure@googlegroups.com
To unsubscribe from this group, send email to 
clojure+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---

<project name="clojure-contrib" default="jar" xmlns:mvn="urn:maven-artifact-ant">

  <description>
    Pack all clojure-contrib sources into a JAR. Compile those that can
    be compiled standalone if the clojure.jar property points us to
    clojure.jar.
  </description>

  <property name="src" location="src"/>
  <property name="build" location="classes"/>

  <available property="hasclojure" file="${clojure.jar}"/>

  <!-- The JAR file to create. -->
  <property name="jarfile" location="clojure-contrib.jar"/>
  <property name="slimjarfile" location="clojure-contrib-slim.jar"/>

  <!-- These make sense for building on tapestry.formos.com -->

  <property name="snapshot.repo.dir" location="/var/www/maven-snapshot-repository"/>
  <property name="stable.repo.dir" location="/var/www/maven-repository"/>

  <target name="init">
    <tstamp/>
    <mkdir dir="${build}"/>
  </target>

  <target name="clean" description="Remove generated files and directories.">
    <delete file="${jarfile}"/>
    <delete file="${slimjarfile}"/>
    <delete dir="${build}"/>
  </target>

  <target name="test_clojure"
	  description = "Run clojure tests"
	  if="hasclojure">
    <java classname="clojure.main">
      <classpath>
        <path location="${build}"/>
        <path location="${src}"/>
        <path location="${clojure.jar}"/>
      </classpath>
      <arg value="-e"/>
      <arg value="(require '(clojure.contrib [test-clojure :as main])) (main/run)"/>
    </java>
  </target>

  <target name="test_contrib"
	  description = "Run contrib tests"
	  if="hasclojure">
    <mkdir dir="coverage"/>
    <emmajava classname="clojure.main" libclasspathref="emma.lib">
      <classpath>
        <path location="${build}"/>
        <path location="${src}"/>
        <path location="${clojure.jar}"/>
      </classpath>
      <arg value="-e"/>
      <arg value="(require '(clojure.contrib [test-contrib :as main])) (main/run)"/>
      <txt outfile="coverage/coverage.txt" />
      <xml outfile="coverage/coverage.xml" />
      <html outfile="coverage/coverage.html"  />
      <filter includes="clojure.contrib.*"/>
    </emmajava>
  </target>

  <!-- you will need to grab these files from http://emma.sourceforge.net/ -->
  <path id="emma.lib" >
    <pathelement location="emma/emma.jar" />
    <pathelement location="emma/emma_ant.jar" />
  </path>

  <taskdef resource="emma_ant.properties" classpathref="emma.lib" />

  <target name="emma" description="turns on EMMA's on-the-fly instrumentation mode" >
    <property name="emma.enabled" value="true" />
  </target>

  <target name="test_datalog"
	  description = "Run datalog tests"
	  if="hasclojure">
    <java classname="clojure.main">
      <classpath>
        <path location="${build}"/>
        <path location="${src}"/>
        <path location="${clojure.jar}"/>
      </classpath>
      <arg value="-e"/>
      <arg value="(require '(clojure.contrib.datalog.tests [test :as main])) (main/run)"/>
    </java>
  </target>

  <target name="test" depends="test_clojure,test_contrib,test_datalog"
	  description="Run all tests"/>

  <target name="check_hasclojure"
          description="Print a warning message if clojure.jar is undefined"
          unless="hasclojure">
    <echo>WARNING: You have not defined a path to clojure.jar so I can't compile files.
         This will cause some parts of clojure.contrib not to work (e.g., pretty print).
         To enable compiling, run "ant -Dclojure.jar=&lt;...path to clojure.jar..&gt;"
    </echo>
  </target>

  <target name="compile_clojure" depends="init,check_hasclojure"
          description="Compile Clojure sources."
          if="hasclojure">
    <java classname="clojure.lang.Compile">
      <classpath>
        <path location="${build}"/>
        <path location="${src}"/>
        <path location="${clojure.jar}"/>
      </classpath>
      <sysproperty key="clojure.compile.path" value="${build}"/>
      <arg value="clojure.contrib.accumulators"/>
      <arg value="clojure.contrib.command-line"/>
      <arg value="clojure.contrib.complex-numbers"/>
      <arg value="clojure.contrib.cond"/>
      <arg value="clojure.contrib.core"/>
      <arg value="clojure.contrib.def"/>
      <arg value="clojure.contrib.duck-streams"/>
      <arg value="clojure.contrib.except"/>
      <arg value="clojure.contrib.fcase"/>
      <arg value="clojure.contrib.generic"/>
      <arg value="clojure.contrib.generic.arithmetic"/>
      <arg value="clojure.contrib.generic.collection"/>
      <arg value="clojure.contrib.generic.comparison"/>
      <arg value="clojure.contrib.generic.functor"/>
      <arg value="clojure.contrib.generic.math-functions"/>
      <arg value="clojure.contrib.import-static"/>
      <arg value="clojure.contrib.javadoc.browse"/>
      <arg value="clojure.contrib.javadoc.browse-ui"/>
      <arg value="clojure.contrib.lazy-seqs"/>
      <arg value="clojure.contrib.mmap"/>
      <arg value="clojure.contrib.macros"/>
      <arg value="clojure.contrib.monads"/>
      <arg value="clojure.contrib.ns-utils"/>
      <arg value="clojure.contrib.pprint.ColumnWriter"/>
      <arg value="clojure.contrib.pprint.PrettyWriter"/>
      <arg value="clojure.contrib.pprint"/>
      <arg value="clojure.contrib.pprint.utilities"/>
      <arg value="clojure.contrib.probabilities.dist"/>
      <arg value="clojure.contrib.prxml"/>
      <arg value="clojure.contrib.repl-ln"/>
      <arg value="clojure.contrib.repl-utils"/>
      <arg value="clojure.contrib.seq-utils"/>
      <arg value="clojure.contrib.set"/>
      <arg value="clojure.contrib.server-socket"/>
      <arg value="clojure.contrib.sql.internal"/>
      <arg value="clojure.contrib.sql"/>
      <arg value="clojure.contrib.str-utils"/>
      <arg value="clojure.contrib.stream-utils"/>
      <arg value="clojure.contrib.test-clojure"/>
      <arg value="clojure.contrib.test-is"/>
      <arg value="clojure.contrib.trace"/>
      <arg value="clojure.contrib.types"/>
      <arg value="clojure.contrib.zip-filter"/>
      <arg value="clojure.contrib.graph"/>
      <arg value="clojure.contrib.datalog"/>
      <arg value="clojure.contrib.datalog.database"/>
      <arg value="clojure.contrib.datalog.literals"/>
      <arg value="clojure.contrib.datalog.magic"/>
      <arg value="clojure.contrib.datalog.rules"/>
      <arg value="clojure.contrib.datalog.softstrat"/>
      <arg value="clojure.contrib.datalog.util"/>
      <arg value="clojure.contrib.dataflow"/>
    </java>
  </target>

  <target name="jar" description="Create jar files." depends="compile_clojure">
    <jar jarfile="${jarfile}">
      <fileset file="epl-v10.html"/>
      <fileset dir="${src}" includes="**/*.clj"/>
      <fileset dir="${build}" includes="**/*.class"/>
      <manifest>
        <attribute name="Class-Path" value="."/>
      </manifest>
    </jar>

    <jar jarfile="${slimjarfile}">
      <fileset file="epl-v10.html"/>
      <fileset dir="${src}" includes="**/*.clj"/>
      <manifest>
        <attribute name="Class-Path" value="."/>
      </manifest>
    </jar>

  </target>

  <target name="clean-build" depends="clean,compile_clojure,test,jar"
	  description="Clean build with tests."/>

   <macrodef name="build-and-deploy">
     <attribute name="target-dir" description="Root of Maven repository"/>
     <sequential>
	<typedef resource="org/apache/maven/artifact/ant/antlib.xml" uri="urn:maven-artifact-ant"/>

	<mvn:pom file="pom.xml" id="contrib.pom"/>

       <mvn:dependencies pomRefId="contrib.pom"/>

       <antcall target="clean-build">
	 <param name="clojure.jar" value="${org.clojure:clojure-lang:jar}"/>
       </antcall>

       <mvn:deploy file="${jarfile}" pomrefid="contrib.pom">
	 <attach file="${slimjarfile}" classifier="slim"/>
	 <remoteRepository url="file:@{target-dir}"/>
       </mvn:deploy>
     </sequential>
   </macrodef>

  <target name="nightly-build" 
	  description="Build and deploy to nightly (snapshot) repository.">
    <build-and-deploy target-dir="${snapshot.repo.dir}"/>
  </target>

  <target name="stable-build" description="Build and deploy to stable repository.">
    <build-and-deploy target-dir="${stable.repo.dir}"/>
  </target>

  <property name="emma.dir" value="${basedir}/emma" />


</project>
: ant -Dclojure.jar=../clojure/clojure.jar test_contrib
Buildfile: build.xml

test_contrib:
 [emmajava] EMMA: package [clojure/contrib] contains classes [test_is__init] 
without full debug info
 [emmajava] java.lang.ExceptionInInitializerError (test_contrib.clj:0)
 [emmajava]     at clojure.lang.Compiler.eval(Compiler.java:4533)
 [emmajava]     at clojure.lang.Compiler.load(Compiler.java:4846)
 [emmajava]     at clojure.lang.RT.loadResourceScript(RT.java:325)
 [emmajava]     at clojure.lang.RT.loadResourceScript(RT.java:316)
 [emmajava]     at clojure.lang.RT.load(RT.java:394)
 [emmajava]     at clojure.lang.RT.load(RT.java:366)
 [emmajava]     at clojure.core$load__5042$fn__5045.invoke(core.clj:3746)
 [emmajava]     at clojure.core$load__5042.doInvoke(core.clj:3745)
 [emmajava]     at clojure.lang.RestFn.invoke(RestFn.java:413)
 [emmajava]     at clojure.core$load_one__4994.invoke(core.clj:3590)
 [emmajava]     at clojure.core$load_lib__5015.doInvoke(core.clj:3627)
 [emmajava]     at clojure.lang.RestFn.applyTo(RestFn.java:147)
 [emmajava]     at clojure.core$apply__3231.doInvoke(core.clj:408)
 [emmajava]     at clojure.lang.RestFn.invoke(RestFn.java:443)
 [emmajava]     at clojure.core$load_libs__5027.doInvoke(core.clj:3657)
 [emmajava]     at clojure.lang.RestFn.applyTo(RestFn.java:142)
 [emmajava]     at clojure.core$apply__3231.doInvoke(core.clj:408)
 [emmajava]     at clojure.lang.RestFn.invoke(RestFn.java:443)
 [emmajava]     at clojure.core$require__5033.doInvoke(core.clj:3713)
 [emmajava]     at clojure.lang.RestFn.invoke(RestFn.java:413)
 [emmajava]     at user$eval__1.invoke(Unknown Source)
 [emmajava]     at clojure.lang.Compiler.eval(Compiler.java:4522)
 [emmajava]     at clojure.core$eval__3975.invoke(core.clj:1743)
 [emmajava]     at clojure.main$eval_opt__5805.invoke(main.clj:220)
 [emmajava]     at clojure.main$initialize__5812.invoke(main.clj:239)
 [emmajava]     at clojure.main$null_opt__5834.invoke(main.clj:264)
 [emmajava]     at clojure.main$main__5854$fn__5856.invoke(main.clj:333)
 [emmajava]     at clojure.main$main__5854.doInvoke(main.clj:328)
 [emmajava]     at clojure.lang.RestFn.invoke(RestFn.java:426)
 [emmajava]     at clojure.lang.Var.invoke(Var.java:350)
 [emmajava]     at clojure.lang.AFn.applyToHelper(AFn.java:175)
 [emmajava]     at clojure.lang.Var.applyTo(Var.java:463)
 [emmajava]     at clojure.main.main(main.java:39)
 [emmajava]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 [emmajava]     at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 [emmajava]     at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 [emmajava]     at java.lang.reflect.Method.invoke(Method.java:597)
 [emmajava]     at com.vladium.emma.rt.AppRunner$Invoker.run(AppRunner.java:655)
 [emmajava]     at java.lang.Thread.run(Thread.java:637)
 [emmajava] Caused by: java.lang.ExceptionInInitializerError
 [emmajava]     at java.lang.Class.forName0(Native Method)
 [emmajava]     at java.lang.Class.forName(Class.java:247)
 [emmajava]     at clojure.lang.RT.loadClassForName(RT.java:1491)
 [emmajava]     at clojure.lang.RT.load(RT.java:384)
 [emmajava]     at clojure.lang.RT.load(RT.java:366)
 [emmajava]     at clojure.core$load__5042$fn__5045.invoke(core.clj:3746)
 [emmajava]     at clojure.core$load__5042.doInvoke(core.clj:3745)
 [emmajava]     at clojure.lang.RestFn.invoke(RestFn.java:413)
 [emmajava]     at clojure.core$load_one__4994.invoke(core.clj:3590)
 [emmajava]     at clojure.core$load_lib__5015.doInvoke(core.clj:3627)
 [emmajava]     at clojure.lang.RestFn.applyTo(RestFn.java:147)
 [emmajava]     at clojure.core$apply__3231.doInvoke(core.clj:408)
 [emmajava]     at clojure.lang.RestFn.invoke(RestFn.java:443)
 [emmajava]     at clojure.core$load_libs__5027.doInvoke(core.clj:3653)
 [emmajava]     at clojure.lang.RestFn.applyTo(RestFn.java:142)
 [emmajava]     at clojure.core$apply__3231.doInvoke(core.clj:408)
 [emmajava]     at clojure.lang.RestFn.invoke(RestFn.java:443)
 [emmajava]     at clojure.core$require__5033.doInvoke(core.clj:3713)
 [emmajava]     at clojure.lang.RestFn.invoke(RestFn.java:426)
 [emmajava]     at clojure.contrib.test_is__init.load(Unknown Source)
 [emmajava]     at clojure.contrib.test_is__init.<clinit>(Unknown Source)
 [emmajava]     at java.lang.Class.forName0(Native Method)
 [emmajava]     at java.lang.Class.forName(Class.java:247)
 [emmajava]     at clojure.lang.RT.loadClassForName(RT.java:1491)
 [emmajava]     at clojure.lang.RT.load(RT.java:384)
 [emmajava]     at clojure.lang.RT.load(RT.java:366)
 [emmajava]     at clojure.core$load__5042$fn__5045.invoke(core.clj:3746)
 [emmajava]     at clojure.core$load__5042.doInvoke(core.clj:3745)
 [emmajava]     at clojure.lang.RestFn.invoke(RestFn.java:413)
 [emmajava]     at clojure.core$load_one__4994.invoke(core.clj:3590)
 [emmajava]     at clojure.core$load_lib__5015.doInvoke(core.clj:3627)
 [emmajava]     at clojure.lang.RestFn.applyTo(RestFn.java:147)
 [emmajava]     at clojure.core$apply__3231.doInvoke(core.clj:408)
 [emmajava]     at clojure.lang.RestFn.invoke(RestFn.java:443)
 [emmajava]     at clojure.core$load_libs__5027.doInvoke(core.clj:3653)
 [emmajava]     at clojure.lang.RestFn.applyTo(RestFn.java:142)
 [emmajava]     at clojure.core$apply__3231.doInvoke(core.clj:408)
 [emmajava]     at clojure.lang.RestFn.invoke(RestFn.java:460)
 [emmajava]     at clojure.core$use__5036.doInvoke(core.clj:3723)
 [emmajava]     at clojure.lang.RestFn.invoke(RestFn.java:413)
 [emmajava]     at user$eval__4.invoke(test_contrib.clj:15)
 [emmajava]     at clojure.lang.Compiler.eval(Compiler.java:4522)
 [emmajava]     ... 38 more
 [emmajava] Caused by: java.lang.ArrayIndexOutOfBoundsException: 14
 [emmajava]     at 
com.vladium.emma.instr.InstrVisitor$Block.emit(InstrVisitor.java:1445)
 [emmajava]     at 
com.vladium.emma.instr.InstrVisitor.visit(InstrVisitor.java:1144)
 [emmajava]     at 
com.vladium.jcd.cls.attribute.CodeAttribute_info.accept(CodeAttribute_info.java:137)
 [emmajava]     at 
com.vladium.emma.instr.InstrVisitor.visit(InstrVisitor.java:446)
 [emmajava]     at 
com.vladium.emma.instr.InstrVisitor.visit(InstrVisitor.java:255)
 [emmajava]     at 
com.vladium.emma.instr.InstrVisitor.process(InstrVisitor.java:111)
 [emmajava]     at 
com.vladium.emma.rt.InstrClassLoadHook.processClassDef(InstrClassLoadHook.java:87)
 [emmajava]     at 
com.vladium.emma.rt.InstrClassLoader.findClass(InstrClassLoader.java:275)
 [emmajava]     at 
com.vladium.emma.rt.InstrClassLoader.loadClass(InstrClassLoader.java:122)
 [emmajava]     at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
 [emmajava]     at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:374)
 [emmajava]     at clojure.contrib.template__init.load(Unknown Source)
 [emmajava]     at clojure.contrib.template__init.<clinit>(Unknown Source)
 [emmajava]     ... 80 more
 [emmajava] EMMA: not all instrumented classes were compiled with source file
 [emmajava] EMMA: debug data: no sources will be embedded in the report.
 [emmajava] EMMA: line coverage requested in a report of type [txt] but
 [emmajava] EMMA: not all instrumented classes were compiled with line number
 [emmajava] EMMA: debug data: this column will be removed from the report.
 [emmajava] EMMA: showing up to 3 classes without full debug info per package:
 [emmajava] EMMA:   clojure.contrib.template__init
 [emmajava] EMMA:   clojure.contrib.test_is__init
 [emmajava] EMMA:   clojure.contrib.walk__init
 [emmajava] EMMA: writing [txt] report to 
[/Users/stuart/relevance/customers/rids-alert/vendor/clojure-contrib/coverage/coverage.txt]
 ...
 [emmajava] EMMA: not all instrumented classes were compiled with source file
 [emmajava] EMMA: debug data: no sources will be embedded in the report.
 [emmajava] EMMA: line coverage requested in a report of type [xml] but
 [emmajava] EMMA: not all instrumented classes were compiled with line number
 [emmajava] EMMA: debug data: this column will be removed from the report.
 [emmajava] EMMA: showing up to 3 classes without full debug info per package:
 [emmajava] EMMA:   clojure.contrib.template__init
 [emmajava] EMMA:   clojure.contrib.test_is__init
 [emmajava] EMMA:   clojure.contrib.walk__init
 [emmajava] EMMA: writing [xml] report to 
[/Users/stuart/relevance/customers/rids-alert/vendor/clojure-contrib/coverage/coverage.xml]
 ...
 [emmajava] EMMA: not all instrumented classes were compiled with source file
 [emmajava] EMMA: debug data: no sources will be embedded in the report.
 [emmajava] EMMA: line coverage requested in a report of type [html] but
 [emmajava] EMMA: not all instrumented classes were compiled with line number
 [emmajava] EMMA: debug data: this column will be removed from the report.
 [emmajava] EMMA: showing up to 3 classes without full debug info per package:
 [emmajava] EMMA:   clojure.contrib.template__init
 [emmajava] EMMA:   clojure.contrib.test_is__init
 [emmajava] EMMA:   clojure.contrib.walk__init
 [emmajava] EMMA: writing [html] report to 
[/Users/stuart/relevance/customers/rids-alert/vendor/clojure-contrib/coverage/coverage.html]
 ...

BUILD SUCCESSFUL
Total time: 2 seconds


Reply via email to