333 KiB
333 KiB
| 1 | issuekey | title | description | storypoint |
|---|---|---|---|---|
| 2 | CLOV-1086 | Line coverage data is inconsistent | I'm running 2.4.1 on IDEA 7 and get inconsistent line and branch coverage in the editor: every line that is hit by the a test always gets "1" as the hitcount. | 2 |
| 3 | CLOV-379 | Surefire classpath is incorrect when depending on a jar and a test-jar from the same maven module | We have two different applications that have the same symptom. Their test cases work properly when executed without clover, but when we run them with clover, they fail because classes or resource files are missing from the classpath. When running the builds with clover, the test cases are executed multiple times. Only the last time they run they fail. When checking the maven debug output (using the -X option), I found that the last time the test cases are run, a JAR file is missing from the classpath. With both applications it is a jar file from a maven module for which we both depend on the jar and test-jar types of the module. For example we have the following in the pom.xml file: <dependency> <groupId>${parent.groupId}</groupId> <artifactId>server-data-access</artifactId> <version>${version}</version> <type>test-jar</type> <scope>test</scope> </dependency> <dependency> <groupId>${parent.groupId}</groupId> <artifactId>server-data-access</artifactId> <version>${version}</version> </dependency> And for some reason, when the test cases are executed for the last time, the following second dependency is not included in the list of jars in the classpath. I have attached the pom.xml files from the module for which the test cases fail (server-web.pom), the pom.xml files from its parents, the pom.xml file for the module that generates both a jar and a test-jar (server-data-access.pom) and the log file that I get when running maven with the -X option. This is the classpath when the test cases fail (notice that /opt/bamboo/Bamboo/xml-data/build-dir/MONITORING-NIGHTLY/monitoring-server/server-data-access/target/server-data-access-1.0.2-SNAPSHOT.jar is missing): build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/Bamboo/xml-data/build-dir/MONITORING-NIGHTLY/monitoring-server/server-web/target/test-classes build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/Bamboo/xml-data/build-dir/MONITORING-NIGHTLY/monitoring-server/server-web/target/classes build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/xerces/xercesImpl/2.9.1/xercesImpl-2.9.1.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/xml-apis/xml-apis/1.3.04/xml-apis-1.3.04.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/Bamboo/xml-data/build-dir/MONITORING-NIGHTLY/monitoring-server/server-model/target/server-model-1.0.2-SNAPSHOT.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/commons-lang/commons-lang/2.1/commons-lang-2.1.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/Bamboo/xml-data/build-dir/MONITORING-NIGHTLY/monitoring-server/server-actions/target/server-actions-1.0.2-SNAPSHOT.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/commons-logging/commons-logging/1.0.4/commons-logging-1.0.4.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/log4j/log4j/1.2.13/log4j-1.2.13.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/com/i4commerce/bml/util/8.19.0/util-8.19.0.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/com/i4commerce/bml/tk-util/8.19.0/tk-util-8.19.0.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/org/jboss/netty/netty/3.0.0.GA/netty-3.0.0.GA.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/org/springframework/spring/2.5.6/spring-2.5.6.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/Bamboo/xml-data/build-dir/MONITORING-NIGHTLY/monitoring-server/server-core/target/server-core-1.0.2-SNAPSHOT.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/Bamboo/xml-data/build-dir/MONITORING-NIGHTLY/monitoring-server/server-data-access/target/server-data-access-1.0.2-SNAPSHOT-tests.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/org/hibernate/hibernate/3.2.6.ga/hibernate-3.2.6.ga.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/net/sf/ehcache/ehcache/1.2.3/ehcache-1.2.3.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/commons-collections/commons-collections/2.1.1/commons-collections-2.1.1.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/javax/transaction/jta/1.0.1B/jta-1.0.1B.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/asm/asm-attrs/1.5.3/asm-attrs-1.5.3.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/antlr/antlr/2.7.6/antlr-2.7.6.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/cglib/cglib/2.1_3/cglib-2.1_3.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/asm/asm/1.5.3/asm-1.5.3.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/org/hibernate/hibernate-annotations/3.3.0.ga/hibernate-annotations-3.3.0.ga.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/javax/persistence/persistence-api/1.0/persistence-api-1.0.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/org/hibernate/hibernate-commons-annotations/3.3.0.ga/hibernate-commons-annotations-3.3.0.ga.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/org/hibernate/hibernate-validator/3.0.0.ga/hibernate-validator-3.0.0.ga.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/org/hibernate/hibernate-search/3.0.0.GA/hibernate-search-3.0.0.GA.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/org/apache/lucene/lucene-core/2.2.0/lucene-core-2.2.0.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/javax/servlet/servlet-api/2.3/servlet-api-2.3.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/org/drools/drools-core/4.0.7/drools-core-4.0.7.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/org/mvel/mvel/1.3.1-java1.4/mvel-1.3.1-java1.4.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/commons-io/commons-io/1.4/commons-io-1.4.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/javax/j2ee/1.3/j2ee-1.3.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/com/sun/xml/bind/jaxb-impl/2.1.3/jaxb-impl-2.1.3.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/javax/xml/bind/jaxb-api/2.1/jaxb-api-2.1.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/javax/xml/stream/stax-api/1.0-2/stax-api-1.0-2.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/javax/activation/activation/1.1/activation-1.1.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/com/i4commerce/common/common-configuration/1.0.25/common-configuration-1.0.25.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/opensymphony/oscache/2.1.1/oscache-2.1.1.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/com/i4commerce/bml/bml-core/8.20.0-SNAPSHOT/bml-core-8.20.0-SNAPSHOT.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/com/i4commerce/bml/cache/8.20.0-SNAPSHOT/cache-8.20.0-SNAPSHOT.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/com/i4commerce/common/common-spring-util/1.0.25/common-spring-util-1.0.25.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/esper/esper/2.2.0/esper-2.2.0.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/org/antlr/antlr-runtime/3.0.1/antlr-runtime-3.0.1.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/org/antlr/stringtemplate/3.1-b1/stringtemplate-3.1-b1.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/quartz/quartz/1.5.2/quartz-1.5.2.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/junit/junit/3.8.1/junit-3.8.1.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/com/mockrunner/mockrunner/0.3.1/mockrunner-0.3.1.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/com/i4commerce/common/common-abstract-unit-tests/1.0.25/common-abstract-unit-tests-1.0.25-tests.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/com/i4commerce/bml/unittest/8.20.0-SNAPSHOT/unittest-8.20.0-SNAPSHOT.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/Bamboo/xml-data/build-dir/MONITORING-NIGHTLY/monitoring-server/server-data-access/target/server-data-access-1.0.2-SNAPSHOT-tests.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/com/oracle/oracle_jdbc/10.2.0.2.0/oracle_jdbc-10.2.0.2.0.jar This is the classpath for when it succeeds: build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/Bamboo/xml-data/build-dir/MONITORING-NIGHTLY/monitoring-server/server-web/target/test-classes build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/Bamboo/xml-data/build-dir/MONITORING-NIGHTLY/monitoring-server/server-web/target/classes build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/xerces/xercesImpl/2.9.1/xercesImpl-2.9.1.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/xml-apis/xml-apis/1.3.04/xml-apis-1.3.04.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/Bamboo/xml-data/build-dir/MONITORING-NIGHTLY/monitoring-server/server-model/target/server-model-1.0.2-SNAPSHOT.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/commons-lang/commons-lang/2.1/commons-lang-2.1.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/Bamboo/xml-data/build-dir/MONITORING-NIGHTLY/monitoring-server/server-actions/target/server-actions-1.0.2-SNAPSHOT.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/commons-logging/commons-logging/1.0.4/commons-logging-1.0.4.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/log4j/log4j/1.2.13/log4j-1.2.13.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/com/i4commerce/bml/util/8.19.0/util-8.19.0.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/com/i4commerce/bml/tk-util/8.19.0/tk-util-8.19.0.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/org/jboss/netty/netty/3.0.0.GA/netty-3.0.0.GA.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/org/springframework/spring/2.5.6/spring-2.5.6.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/Bamboo/xml-data/build-dir/MONITORING-NIGHTLY/monitoring-server/server-core/target/server-core-1.0.2-SNAPSHOT.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/Bamboo/xml-data/build-dir/MONITORING-NIGHTLY/monitoring-server/server-data-access/target/server-data-access-1.0.2-SNAPSHOT.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/org/hibernate/hibernate/3.2.6.ga/hibernate-3.2.6.ga.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/net/sf/ehcache/ehcache/1.2.3/ehcache-1.2.3.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/commons-collections/commons-collections/2.1.1/commons-collections-2.1.1.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/javax/transaction/jta/1.0.1B/jta-1.0.1B.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/asm/asm-attrs/1.5.3/asm-attrs-1.5.3.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/antlr/antlr/2.7.6/antlr-2.7.6.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/cglib/cglib/2.1_3/cglib-2.1_3.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/asm/asm/1.5.3/asm-1.5.3.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/org/hibernate/hibernate-annotations/3.3.0.ga/hibernate-annotations-3.3.0.ga.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/javax/persistence/persistence-api/1.0/persistence-api-1.0.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/org/hibernate/hibernate-commons-annotations/3.3.0.ga/hibernate-commons-annotations-3.3.0.ga.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/org/hibernate/hibernate-validator/3.0.0.ga/hibernate-validator-3.0.0.ga.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/org/hibernate/hibernate-search/3.0.0.GA/hibernate-search-3.0.0.GA.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/org/apache/lucene/lucene-core/2.2.0/lucene-core-2.2.0.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/javax/servlet/servlet-api/2.3/servlet-api-2.3.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/org/drools/drools-core/4.0.7/drools-core-4.0.7.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/org/mvel/mvel/1.3.1-java1.4/mvel-1.3.1-java1.4.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/commons-io/commons-io/1.4/commons-io-1.4.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/javax/j2ee/1.3/j2ee-1.3.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/com/sun/xml/bind/jaxb-impl/2.1.3/jaxb-impl-2.1.3.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/javax/xml/bind/jaxb-api/2.1/jaxb-api-2.1.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/javax/xml/stream/stax-api/1.0-2/stax-api-1.0-2.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/javax/activation/activation/1.1/activation-1.1.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/com/i4commerce/common/common-configuration/1.0.25/common-configuration-1.0.25.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/opensymphony/oscache/2.1.1/oscache-2.1.1.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/com/i4commerce/bml/bml-core/8.20.0-SNAPSHOT/bml-core-8.20.0-SNAPSHOT.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/com/i4commerce/bml/cache/8.20.0-SNAPSHOT/cache-8.20.0-SNAPSHOT.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/com/i4commerce/common/common-spring-util/1.0.25/common-spring-util-1.0.25.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/esper/esper/2.2.0/esper-2.2.0.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/org/antlr/antlr-runtime/3.0.1/antlr-runtime-3.0.1.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/org/antlr/stringtemplate/3.1-b1/stringtemplate-3.1-b1.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/quartz/quartz/1.5.2/quartz-1.5.2.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/junit/junit/3.8.1/junit-3.8.1.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/com/mockrunner/mockrunner/0.3.1/mockrunner-0.3.1.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/com/i4commerce/common/common-abstract-unit-tests/1.0.25/common-abstract-unit-tests-1.0.25-tests.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/com/i4commerce/bml/unittest/8.20.0-SNAPSHOT/unittest-8.20.0-SNAPSHOT.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/Bamboo/xml-data/build-dir/MONITORING-NIGHTLY/monitoring-server/server-data-access/target/server-data-access-1.0.2-SNAPSHOT-tests.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/com/oracle/oracle_jdbc/10.2.0.2.0/oracle_jdbc-10.2.0.2.0.jar | 2 |
| 4 | CLOV-1083 | Setting special instrumentation output dir to a source dir deletes all source! | NULL | 1 |
| 5 | CLOV-579 | Add method/statement level instrumentation setting in project properties page | NULL | 1 |
| 6 | CLOV-582 | Make Test Run Explorer perform better and stop locking the UI thread | NULL | 4 |
| 7 | CLOV-1085 | Message in Balloon after clean snapshot is bogus | # Clean shapshot # First Optimised test run the balloon message is ok (see CIJ-272 re my thoughts on it) # Second optmised test run has some odd figures in it relating to expected savings and total test run time. | 2 |
| 8 | CLOV-1084 | No instrumentation Done, Always get two Tests run. | Although 0 instr. was done, I still see two tests run. {code} 2009-05-08 14:19:48,851 [8933804] INFO - a.clover.core_v2.5.0-build-dev - Updating existing database at '/Users/niick/work/CLOV-trunk/.clover/coverage.db'. 2009-05-08 14:19:49,638 [8934591] INFO - a.clover.core_v2.5.0-build-dev - Processing files at 1.5 source level. 2009-05-08 14:19:52,664 [8937617] INFO - a.clover.core_v2.5.0-build-dev - Clover all over. Instrumented 0 files (0 packages). 2009-05-08 14:19:52,664 [8937617] INFO - a.clover.core_v2.5.0-build-dev - Elapsed time = 3.026 secs. (0 files/sec, 0 srclines/sec) 2009-05-08 14:19:52,664 [8937617] INFO - over.idea.build.CloverCompiler - completed Instrumentation. 2009-05-08 14:19:53,738 [8938691] INFO - a.clover.core_v2.5.0-build-dev - Clover estimates having saved around 41 seconds on this optimized test run. The full test run takes approx. 41 seconds 2009-05-08 14:19:53,738 [8938691] INFO - a.clover.core_v2.5.0-build-dev - Clover included 2 test classes in this run (total # test classes : 84) 2009-05-08 14:19:54,689 [8939642] INFO - CloverProgressIndicator - Creating database 2009-05-08 14:19:54,690 [8939643] INFO - CloverProgressIndicator - Loading registry file 2009-05-08 14:19:56,686 [8941639] INFO - CloverProgressIndicator - Building Index 2009-05-08 14:19:56,686 [8941639] INFO - CloverProgressIndicator - Loading coverage data 2009-05-08 14:19:56,758 [8941711] INFO - CloverProgressIndicator - Reading per-test data 2009-05-08 14:19:56,995 [8941948] INFO - CloverProgressIndicator - Resolving coverage data 2009-05-08 14:19:57,345 [8942298] INFO - CloverProgressIndicator - Creating tree 2009-05-08 14:19:57,480 [8942433] INFO - CloverProgressIndicator - Tree model ready {code} | 1 |
| 9 | CLOV-573 | Clover should prompt to rebuild a project if its flush or initstring settings change | NULL | 1 |
| 10 | CLOV-701 | Test Columns are empty (or -1) in project.js when generated via a JSON report | When a JSON report is generated, the test fields: "ErroneousTests":0,"FailingTests":0,"FilteredElements":0.42738318,"PassingTests":0,"PcErroneousTests":-1,"PcFailingTests":-1,"PcPassingTests":-1,"TestExecutionTime":0,"Tests":0, are all -1 or 0 in the project.js. e.g. https://bamboo.extranet.atlassian.com/browse/CCD-WCLV-488/artifact/Clover-HTML/project.js The test data is definitely available in the HTML report. | 2 |
| 11 | CLOV-906 | Clover-for-Grails generates an exception when using the -clover.view option on the Grails command line. | Clover-for-Grails generates an exception when using the -clover.view option on the Grails command line. According to Nick's assessment so far, this is a Windows-specific problem. See output below: {noformat} C:\grails-1.2.1\samples\petclinic>grails test-app -clover.on -clover.view Welcome to Grails 1.2.1 - http://grails.org/ Licensed under Apache Standard License 2.0 Grails home is set to: C:\grails-1.2.1 Base Directory: C:\grails-1.2.1\samples\petclinic Resolving dependencies... Dependencies resolved in 2641ms. Running script C:\grails-1.2.1\scripts\TestApp.groovy Environment set to test Clover: Using config: [on:true, view:true] Using clover license path: C:\Documents and Settings\Giles Gaskell\.grails\1.2.1\projects\petclinic\plugins\clover-0.2\grails-app\conf\clover\clover-evaluation. license [clover-env] Loading clover.xml: jar:file:/C:/Documents%20and%20Settings/Giles%20Gaskell/.ivy2/cache/com.cenqua.clover/clover/jars/clover-3.0.0-m3.jar!/clover.x ml Using default clover-setup configuration. Clover: directories: [src/java, src/groovy, test, grails-app] includes: [**/*.groovy, **/*.java] excludes [**/conf/**, **/plugins/**] [clover-setup] Clover Version 3.0.0-m3, built on February 26 2010 (build-780) [clover-setup] Loaded from: C:\Documents and Settings\Giles Gaskell\.ivy2\cache\com.cenqua.clover\clover\jars\clover-3.0.0-m3.jar [clover-setup] Clover Evaluation License registered to Clover Grails Plugin. [clover-setup] You have 23 day(s) before your license expires. [clover-setup] Clover is enabled with initstring 'C:\Documents and Settings\Giles Gaskell\.grails\1.2.1\projects\petclinic\clover\db\clover.db' Clover: Forcing a clean to ensure Clover instrumentation occurs. Disable by setting: clover.forceClean=false [delete] Deleting directory C:\grails-1.2.1\samples\petclinic\target\classes [delete] Deleting directory C:\grails-1.2.1\samples\petclinic\target\test-classes [delete] Deleting directory C:\Documents and Settings\Giles Gaskell\.grails\1.2.1\projects\petclinic\clover Clover: Compile start. [mkdir] Created dir: C:\grails-1.2.1\samples\petclinic\target\classes [groovyc] Compiling 2 source files to C:\grails-1.2.1\samples\petclinic\target\classes [clover-setup] Creating new database at 'C:\Documents and Settings\Giles Gaskell\.grails\1.2.1\projects\petclinic\clover\db\clover.db'. [groovyc] Compiling 17 source files to C:\grails-1.2.1\samples\petclinic\target\classes [clover-setup] Creating new database at 'C:\Documents and Settings\Giles Gaskell\.grails\1.2.1\projects\petclinic\clover\db\clover.db'. [mkdir] Created dir: C:\grails-1.2.1\samples\petclinic\target\test-reports\html [mkdir] Created dir: C:\grails-1.2.1\samples\petclinic\target\test-reports\plain Starting unit test phase ... [mkdir] Created dir: C:\grails-1.2.1\samples\petclinic\target\test-classes\unit [groovyc] Compiling 1 source file to C:\grails-1.2.1\samples\petclinic\target\test-classes\unit [clover-setup] Updating existing database at 'C:\Documents and Settings\Giles Gaskell\.grails\1.2.1\projects\petclinic\clover\db\clover.db'. ------------------------------------------------------- Running 1 unit test... Running test org.grails.samples.OwnerControllerTests...PASSED Tests Completed in 2015ms ... ------------------------------------------------------- Tests passed: 6 Tests failed: 0 ------------------------------------------------------- Starting integration test phase ... [copy] Copying 1 file to C:\grails-1.2.1\samples\petclinic\target\test-classes\integration [copy] Copying 1 file to C:\grails-1.2.1\samples\petclinic\target\test-classes [copy] Copied 3 empty directories to 2 empty directories under C:\grails-1.2.1\samples\petclinic\target\test-classes Clover: Compile start. [groovyc] Compiling 1 source file to C:\grails-1.2.1\samples\petclinic\target\classes [clover-setup] Updating existing database at 'C:\Documents and Settings\Giles Gaskell\.grails\1.2.1\projects\petclinic\clover\db\clover.db'. [copy] Copying 1 file to C:\grails-1.2.1\samples\petclinic\target\classes Clover: Compile start. [groovyc] Compiling 1 source file to C:\grails-1.2.1\samples\petclinic\target\classes [clover-setup] Updating existing database at 'C:\Documents and Settings\Giles Gaskell\.grails\1.2.1\projects\petclinic\clover\db\clover.db'. [junitreport] Processing C:\grails-1.2.1\samples\petclinic\target\test-reports\TESTS-TestSuites.xml to C:\DOCUME~1\GILESG~1\LOCALS~1\Temp\null1750708552 [junitreport] Loading stylesheet jar:file:/C:/Documents%20and%20Settings/Giles%20Gaskell/.ivy2/cache/org.apache.ant/ant-junit/jars/ant-junit-1.7.1.jar!/org/apac he/tools/ant/taskdefs/optional/junit/xsl/junit-frames.xsl [junitreport] Transform time: 735ms [junitreport] Deleting: C:\DOCUME~1\GILESG~1\LOCALS~1\Temp\null1750708552 Tests PASSED - view reports in target\test-reports Clover: Tests ended [clover-historypoint] Clover Version 3.0.0-m3, built on February 26 2010 (build-780) [clover-historypoint] Loaded from: C:\Documents and Settings\Giles Gaskell\.ivy2\cache\com.cenqua.clover\clover\jars\clover-3.0.0-m3.jar [clover-historypoint] Clover Evaluation License registered to Clover Grails Plugin. [clover-historypoint] You have 23 day(s) before your license expires. [clover-historypoint] Writing report to 'C:\grails-1.2.1\samples\petclinic\.cloverhistory\clover-20100305112533.xml.gz' [clover-html-report] Clover Version 3.0.0-m3, built on February 26 2010 (build-780) [clover-html-report] Loaded from: C:\Documents and Settings\Giles Gaskell\.ivy2\cache\com.cenqua.clover\clover\jars\clover-3.0.0-m3.jar [clover-html-report] Clover Evaluation License registered to Clover Grails Plugin. [clover-html-report] You have 23 day(s) before your license expires. [clover-html-report] Not overwriting existing history point 'C:\grails-1.2.1\samples\petclinic\.cloverhistory\clover-20100305112533.xml.gz'. To force, set overw rite="true". [clover-html-report] Loading coverage database from: 'C:\Documents and Settings\Giles Gaskell\.grails\1.2.1\projects\petclinic\clover\db\clover.db' [clover-html-report] Loading historical coverage data from: 'C:\grails-1.2.1\samples\petclinic\.cloverhistory' [clover-html-report] Writing HTML report to 'C:\grails-1.2.1\samples\petclinic\build\clover\report' [clover-html-report] Done. Processed 1 packages in 3047ms (3047ms per package). [clover-html-report] Writing historical report to 'C:\grails-1.2.1\samples\petclinic\build\clover\report' [clover-html-report] Read 3 history points. [clover-html-report] using movers interval of 18 hours [clover-html-report] using movers interval of 18 hours [clover-html-report] Writing JSON historical-data to: C:\grails-1.2.1\samples\petclinic\build\clover\report\historical-json.js [clover-html-report] Done. Error executing script TestApp: java.lang.StringIndexOutOfBoundsException: String index out of range: 1 gant.TargetExecutionException: java.lang.StringIndexOutOfBoundsException: String index out of range: 1 at gant.Gant$_dispatch_closure4.doCall(Gant.groovy:331) at gant.Gant$_dispatch_closure6.doCall(Gant.groovy:334) at gant.Gant$_dispatch_closure6.doCall(Gant.groovy) at gant.Gant.withBuildListeners(Gant.groovy:344) at gant.Gant.this$2$withBuildListeners(Gant.groovy) at gant.Gant$this$2$withBuildListeners.callCurrent(Unknown Source) at gant.Gant.dispatch(Gant.groovy:334) at gant.Gant.this$2$dispatch(Gant.groovy) at gant.Gant.invokeMethod(Gant.groovy) at gant.Gant.processTargets(Gant.groovy:495) at gant.Gant.processTargets(Gant.groovy:480) Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: 1 at java.lang.String.charAt(String.java:687) at java.util.regex.Matcher.appendReplacement(Matcher.java:703) at java.util.regex.Matcher.replaceAll(Matcher.java:813) at java.lang.String.replaceAll(String.java:2190) at _Events.launchReport(_Events.groovy:138) at _Events$_run_closure6.doCall(_Events.groovy:108) at _GrailsEvents_groovy$_run_closure5.doCall(_GrailsEvents_groovy:58) at _GrailsEvents_groovy$_run_closure5.call(_GrailsEvents_groovy) at _GrailsTest_groovy$_run_closure1.doCall(_GrailsTest_groovy:214) at TestApp$_run_closure1.doCall(TestApp.groovy:102) at gant.Gant$_dispatch_closure4.doCall(Gant.groovy:324) ... 10 more Error executing script TestApp: java.lang.StringIndexOutOfBoundsException: String index out of range: 1 Application context shutting down... Application context shutdown. {noformat} | 1 |
| 12 | CLOV-930 | Implement Test Optimization for Grails: -clover.optimize | Running -clover.optimize will: * save a clover.snapshot on the first build * use this, to discern the optimal set of tests and their order, to run for subsequent builds based on: ** which source files have been modified ** length of test ** test result - failed tests will always be re-run | 2 |
| 13 | CLOV-940 | clover + ant + GWT does not compile and test with clover. | https://support.atlassian.com/browse/BSP-2952 It looks like the GWT.clover.xxx are not executed. build 06-May-2010 17:24:30 Build sequence for target(s) `clover.fullclean' is [clover.clean, clover.fullclean] build 06-May-2010 17:24:30 Complete build sequence is [clover.clean, clover.fullclean, clover.save-history, GWT.clover.report, GWT.clover.json, checkstyle, common.checkstyle, buildonly, dist-dev, tools, apicheck-nobuild, apicheck, test, verify, common.all, build, doc, dist, -compile.emma.if.enabled, dev, GWT.with.clover, compile.emma.if.enabled, common.clean, GWT.clover.fullclean, common.build, GWT.clover.current, presubmit, all, GWT.clover.clean, GWT.clover.save-history, clover.snapshot, clover.json, clover.report, user, clover.log, common.compile.emma.if.enabled, ci, common.-compile.emma.if.enabled, GWT.clover.log, bikeshed, emma.merge, GWT.test, with.clover, jni, clean, clover.all, common.-create.emma.coverage.if.enabled, clover.xml, common.verify, -create.emma.coverage.if.enabled, buildtools, clover.current, samples, dist-bikeshed, soyc, GWT.clover.all, GWT.clover.xml, common.test, servlet, GWT.clover.snapshot, ] However targets without GWT are executed. | 3 |
| 14 | CLOV-951 | Assertion failing (call not made from EDT) | {code} Access is allowed from event dispatch thread only. Details: Current thread: Thread[ApplicationImpl pooled thread,5,Idea Thread Group] 1631384517 Our dispatch thread:Thread[AWT-EventQueue-1 9.0.2#IU-95.66, eap:false,6,Idea Thread Group] 1360788520 SystemEventQueueThread: Thread[AWT-EventQueue-1 9.0.2#IU-95.66, eap:false,6,Idea Thread Group] 1360788520 java.lang.Throwable com.intellij.openapi.diagnostic.Logger.error(Logger.java:55) com.intellij.openapi.application.impl.ApplicationImpl.a(ApplicationImpl.java:860) com.intellij.openapi.application.impl.ApplicationImpl.assertIsDispatchThread(ApplicationImpl.java:847) com.cenqua.clover.idea.coverage.DefaultCoverageManager.setCoverageTree(DefaultCoverageManager.java:176) com.cenqua.clover.idea.coverage.DefaultCoverageManager.clearCache(DefaultCoverageManager.java:160) com.cenqua.clover.idea.coverage.DefaultCoverageManager.setContextFilter(DefaultCoverageManager.java:151) com.cenqua.clover.idea.ProjectPlugin.getCoverageManager(ProjectPlugin.java:219) com.cenqua.clover.idea.config.ContextFilterPane.<init>(ContextFilterPane.java:16) com.cenqua.clover.idea.config.ProjectConfigPanel.getFilterPane(ProjectConfigPanel.java:200) com.cenqua.clover.idea.config.ProjectConfigPanel.getTabbedContent(ProjectConfigPanel.java:120) com.cenqua.clover.idea.config.ProjectConfigPanel.getLicensedPanel(ProjectConfigPanel.java:82) com.cenqua.clover.idea.config.ProjectConfigPanel.initComponents(ProjectConfigPanel.java:63) com.cenqua.clover.idea.config.ProjectConfigPanel.<init>(ProjectConfigPanel.java:54) com.cenqua.clover.idea.ProjectPlugin.createComponent(ProjectPlugin.java:328) com.intellij.openapi.options.newEditor.OptionsEditor$Simple.<init>(OptionsEditor.java:1113) com.intellij.openapi.options.newEditor.OptionsEditor.b(OptionsEditor.java:350) com.intellij.openapi.options.newEditor.OptionsEditor.access$2100(OptionsEditor.java:63) com.intellij.openapi.options.newEditor.OptionsEditor$6$1.run(OptionsEditor.java:328) com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:695) com.intellij.openapi.options.newEditor.OptionsEditor$6.run(OptionsEditor.java:326) com.intellij.openapi.application.impl.ApplicationImpl$5.run(ApplicationImpl.java:329) java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) java.util.concurrent.FutureTask.run(FutureTask.java:138) java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) java.lang.Thread.run(Thread.java:637) com.intellij.openapi.application.impl.ApplicationImpl$1$1.run(ApplicationImpl.java:125) Access is allowed from event dispatch thread only. Details: Current thread: Thread[ApplicationImpl pooled thread,5,Idea Thread Group] 1631384517 Our dispatch thread:Thread[AWT-EventQueue-1 9.0.2#IU-95.66, eap:false,6,Idea Thread Group] 1360788520 SystemEventQueueThread: Thread[AWT-EventQueue-1 9.0.2#IU-95.66, eap:false,6,Idea Thread Group] 1360788520 java.lang.Throwable com.intellij.openapi.diagnostic.Logger.error(Logger.java:55) {code} | 2 |
| 15 | CLOV-953 | Occasionally clover is getting broken on the Hudson | We are using Grails 1.2.2 , Hudson, clover From time to time Hudson fails with the following console output. Without any changes the next build can be fine. Licensed under Apache Standard License 2.0 Grails home is set to: D:\Apps\grails-1.2.2 Base Directory: D:\Apps-Pub\HUDSON_HOME\jobs\LifePoints\workspace\Lifepoints WARNING: Dependencies cannot be resolved for plugin [clover-3.0.2] due to error: null Resolving dependencies... Dependencies resolved in 1422ms. Running script D:\Apps\grails-1.2.2\scripts\TestApp.groovy Environment set to test Clover: Using config: [on:true] Using clover license path: D:\Apps-Pub\HUDSON_HOME\jobs\LifePoints\workspace\Lifepoints/clover.license [taskdef] Could not load definitions from resource cloverlib.xml. It could not be found. Error executing script TestApp: Problem: failed to create task or type clover-env Cause: The name is undefined. Action: Check the spelling. Action: Check that any custom tasks/types have been declared. Action: Check that any <presetdef>/<macrodef> declarations have taken place. : Problem: failed to create task or type clover-env Cause: The name is undefined. Action: Check the spelling. Action: Check that any custom tasks/types have been declared. Action: Check that any <presetdef>/<macrodef> declarations have taken place. org.apache.tools.ant.UnknownElement.getNotFoundException(UnknownElement.java:484) org.apache.tools.ant.UnknownElement.makeObject(UnknownElement.java:416) org.apache.tools.ant.UnknownElement.maybeConfigure(UnknownElement.java:160) _Events.toggleCloverOn(_Events.groovy:302) _Events$_run_closure3.doCall(_Events.groovy:56) _GrailsEvents_groovy$_run_closure5.doCall(_GrailsEvents_groovy:58) _GrailsEvents_groovy$_run_closure5.call(_GrailsEvents_groovy) _GrailsEvents_groovy.run(_GrailsEvents_groovy:62) _GrailsEvents_groovy$run.call(Unknown Source) _GrailsClean_groovy$run.call(Unknown Source) _GrailsClean_groovy.run(_GrailsClean_groovy:29) _GrailsClean_groovy$run.call(Unknown Source) TestApp.run(TestApp.groovy:44) TestApp$run.call(Unknown Source) gant.Gant.processTargets(Gant.groovy:494) gant.Gant.processTargets(Gant.groovy:480) Error executing script TestApp: Problem: failed to create task or type clover-env Cause: The name is undefined. Action: Check the spelling. Action: Check that any custom tasks/types have been declared. Action: Check that any <presetdef>/<macrodef> declarations have taken place. | 3 |
| 16 | CLOV-964 | <testsources> does not work with Ant groovyc task | Since TestSourceSet is not Serializable it doesn't work with Ant/groovyc. {noformat}Clover failed to integrate with <groovyc/>java.io.NotSerializableException: com.cenqua.clover.tasks.TestSourceSet at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1081) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:302) at java.util.ArrayList.writeObject(ArrayList.java:569) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:917) ... at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:302) at com.atlassian.clover.instr.java.InstrumentationConfig.saveToFile(InstrumentationConfig.java:427) at com.atlassian.clover.ant.groovy.GroovycSupport.newConfigDir(GroovycSupport.java:360) at com.atlassian.clover.ant.groovy.GroovycSupport.augmentCompilationClasspath(GroovycSupport.java:350) at com.atlassian.clover.ant.groovy.GroovycSupport.taskStarted(GroovycSupport.java:160) at org.apache.tools.ant.Project.fireTaskStarted(Project.java:2182){noformat} | 1 |
| 17 | CLOV-977 | Clover's embedding of GSON brings in "assembly-descriptor.xml" into clover.jar which causes problems for ejbdoclet, others | see support case https://support.atlassian.com/browse/CLV-5576 and forum post http://forums.atlassian.com/thread.jspa?messageID=257357810 the solution is to simply exclude this file when building the clover.jar | 1 |
| 18 | CLOV-987 | Cannot select contexts in IDEA 10.0.2 | I select either the filter button in the coverage panel or go via the project settings (same either way) to get to the clover setting dialog. I select the 3rd tab (Contexts) and check the check-boxes 'catch bosy' and 'property methods'. The boxes become checked but the Apply button remains disabled (this is the main issue). I add a new custom context - and the Apply button is enabled. I click apply and the check boxes all reset back to their un-set state. The custom context remains. | 1 |
| 19 | CLOV-991 | Ternary clauses never executed still get coverage | I don't know if this is disoverable at all, but the following example will work with any ternary statement: @Test public void testTernaryStatement() { ternaryStatement(true); } public static void ternaryStatement(boolean bool) { String value = bool ? "true" : "false"; System.out.println(value); } This will mark the entire ternary statement as covered, while the false branch was in fact never triggered. Since Clover is primarily a coverage tool, I marked this issue Major. | 2 |
| 20 | CLOV-1007 | clover2:check fails with negative coverage if no class to instrument | This happens either if no java class was found for instrumentation or if they were all excluded. Clover then reports a negative coverage of -100%. To my mind, this is not correct : strictly speaking, if no java class has to be tested for coverage, there is no relevant coverage value (I guess it is what the -100% means) but check should be OK. | 1 |
| 21 | CLOV-1011 | Coverage data not showing up in Intellij | I've got the dev build from CLOV-1004, which worked for Intellij 10.3 but since I upgraded to 10.5.1, neither the latest public rev (3.1.0.v20110608114626-dev) nor the dev version of the plugin from CLOV-1004 works. In the projects view, it looks like the code is instrumented. But after I run a test, no coverage information is displayed. When I explicitly update the clover database, nothing is updated. The "Test Runs" view behaves as if I never ran a test. | 1 |
| 22 | CLOV-1015 | Test Optimization says 0 tests should run but all tests are run anyway | Recently upgraded my Maven builds to use the Maven Surefire plugin version 2.9. Now my builds that run Clover2:optimized and say 0 tests should run, run all tests anyway. The upshot of this is that our optimized test runs are now taking over an hour versus the 15 to 20 minutes they were when the tests were correctly optimized away. Here is a section of the log file that shows the problem: {noformat} [shell] cd dba; mvn -PPERSONAL,UnitTests,Clover.optimize -Djava.awt.headless=true --offline -Dforkmode=once -Dmaven.download.meter=silent -DskipAssembly -Dmaven.test.failure.ignore=true -Dmaven.test.redirectTestOutputToFile=false -Dmaven.clover.licenseLocation=/prodinfolocal/BambooHome/clover.license -Dclover.plugin.version=3.1.0 -Dclover.version=3.1.0 install clover2:aggregate clover2:clover [INFO] NOTE: Maven is executing in offline mode. Any artifacts not already in your local repository will be inaccessible. [INFO] Scanning for projects... [WARNING] Profile with id: 'PERSONAL' has not been activated. [WARNING] Profile with id: 'UnitTests' has not been activated. [INFO] ------------------------------------------------------------------------ [INFO] Building dba [INFO] task-segment: [install] [INFO] ------------------------------------------------------------------------ [INFO] [clover2:setup {execution: clover}] [INFO] No Clover instrumentation done on source files in: [/Users/mhusby/workarea/dba/src/main/java] as no matching sources files found [INFO] No Clover instrumentation done on source files in: [/Users/mhusby/workarea/dba/src/test/java] as no matching sources files found [WARNING] Using [Squid:configuration:jar:1.0-SNAPSHOT], built on Fri Jul 22 15:44:02 EDT 2011 even though a Clovered version exists but it's older (lastModified: Fri Jul 22 15:43:02 EDT 2011 ) and could fail the build. Please consider running Clover again on that dependency's project. [INFO] [resources:resources {execution: default-resources}] [WARNING] Using platform encoding (MacRoman actually) to copy filtered resources, i.e. build is platform dependent! [INFO] Copying 2 resources [INFO] Copying 1 resource [INFO] [compiler:compile {execution: default-compile}] [INFO] Nothing to compile - all classes are up to date [INFO] [resources:testResources {execution: default-testResources}] [WARNING] Using platform encoding (MacRoman actually) to copy filtered resources, i.e. build is platform dependent! [INFO] Copying 6 resources [INFO] [compiler:testCompile {execution: default-testCompile}] [INFO] Nothing to compile - all classes are up to date [INFO] [clover2:optimize {execution: clover}] [INFO] Adding fileset: directory=/Users/mhusby/workarea/dba/target/clover/src-test-instrumented, includes=[**/*Tests.*, **/*Test.*, **/Test*.*, qxjShouldNeverMatchAClass], excludes=[**/*TestCase.*, **/Test*Servlet.*, **/Abstract*.*, **/*FormModuleTests.*, **/*.xml, **/*$*.*] [INFO] Clover estimates having saved around 44 seconds on this optimized test run. The full test run takes approx. 44 seconds [INFO] Clover included 0 test classes in this run (total # test classes : 22) [INFO] [surefire:test {execution: default-test}] [INFO] Surefire report directory: /Users/mhusby/workarea/dba/target/surefire-reports ------------------------------------------------------- T E S T S ------------------------------------------------------- Running edu.mit.broad.prodinfo.dba.BlobDefTest Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.327 sec Running edu.mit.broad.prodinfo.dba.LongDefTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec Running edu.mit.broad.prodinfo.dba.ExceptionWrapperTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 sec Running edu.mit.broad.prodinfo.dba.DoubleDefTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec Running edu.mit.broad.prodinfo.dba.CacheMapTest Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.108 sec Running edu.mit.broad.prodinfo.dba.OurDBsTest Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.596 sec Running edu.mit.broad.prodinfo.dba.VArrayDefTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.004 sec Running edu.mit.broad.prodinfo.dba.VArrayFormatterTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.006 sec Running edu.mit.broad.prodinfo.dba.RowDefTest Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.311 sec Running edu.mit.broad.prodinfo.dba.BigDecimalDefTest Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.003 sec Running edu.mit.broad.prodinfo.dba.DoubleFormatterTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec Running edu.mit.broad.prodinfo.dba.DateFormatterTest Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.007 sec Running edu.mit.broad.prodinfo.dba.LongFormatterTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 sec Running edu.mit.broad.prodinfo.dba.ClobDefTest Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.004 sec Running edu.mit.broad.prodinfo.dba.DBTest Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.778 sec Running edu.mit.broad.prodinfo.dba.DataIteratorTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.003 sec Running edu.mit.broad.prodinfo.dba.ProcedureDefTest Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.052 sec Running edu.mit.broad.prodinfo.dba.VArrayListTest Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.003 sec Running edu.mit.broad.prodinfo.dba.DBPoolTest Tests run: 8, Failures: 0, Errors: 0, Skipped: 1, Time elapsed: 39.08 sec Running edu.mit.broad.prodinfo.dba.StringDefTest Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.002 sec Running edu.mit.broad.prodinfo.dba.DataDefIteratorTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 sec Running edu.mit.broad.prodinfo.dba.RowTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.54 sec Results : Tests run: 49, Failures: 0, Errors: 0, Skipped: 1 [INFO] [clover2:snapshot {execution: clover}] [INFO] No span specified, using span of: 48s [INFO] Saving snapshot to: /Users/mhusby/.clover/Squid-dba/clover.snapshot [INFO] Clover Version 3.1.0, built on May 31 2011 (build-821) [INFO] Loaded from: /Users/mhusby/.m2/repository/com/cenqua/clover/clover/3.1.0/clover-3.1.0.jar [INFO] Clover: Academic License registered to Broad/MIT Institute. [INFO] Updating snapshot '/Users/mhusby/.clover/Squid-dba/clover.snapshot' against Clover database at '/Users/mhusby/workarea/dba/target/clover/clover.db' {noformat} | 5 |
| 23 | CLOV-1018 | Can't Use "Google App Engine" Run Configuration in IDEA 10.5 when Clover Plug-in is Installed | I am trying to start a GAE run configuration in IDEA 10.5 - after compilation and the web artifact being built, the process simply fails to start, with no errors. I uninstalled the plug-in and the process once again starts correctly. I also attempted to create a plain Java Application run configuration to start the process instead and this also fails with the same issue. The GAE libraries are pulled in as module libraries, via a Maven POM. I'm not sure if this is linked, but there definitely seems to be a problem with Run configurations when the main Java class being run is located in an external library, rather than being part of the project code-base. I've checked the IDEA logs and no errors are thrown. The plain Java Application run configuration had the following settings: Main Class: com.google.appengine.tools.development.DevAppServerMain VM Parameters: -Dappengine.sdk.root=<sdk_root> -javaagent:<sdk_root>/lib/agent/appengine-agent.jar Program Parameters: --disable_update_check <war_file_location> Working Directory: <sdk_root> | 2 |
| 24 | CLOV-1025 | Log the actual percentage coverage instead of "Coverage check PASSED". | Clover logs the minimum percentage: Checking for coverage of [90.0%] for database But not the actual percentage. Coverage check PASSED Please add this logging, in order to help us know when it's safe to bump the threshold higher. | 1 |
| 25 | CLOV-1056 | IDEA 11 error turning OFF Clover coverage | Error during dispatching of java.awt.event.MouseEvent[MOUSE_CLICKED,(691,256),absolute(1963,178),button=1,modifiers=Button1,clickCount=1] on frame0 java.lang.NullPointerException clover.net.sf.jtreemap.swing.JTreeMap$Zoom.setNewDimension(JTreeMap.java:694) clover.net.sf.jtreemap.swing.JTreeMap$Zoom.execute(JTreeMap.java:664) clover.net.sf.jtreemap.swing.JTreeMap.zoom(JTreeMap.java:570) clover.net.sf.jtreemap.swing.JTreeMap$HandleMouseClick.mouseClicked(JTreeMap.java:616) java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:270) java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:269) java.awt.Component.processMouseEvent(Component.java:6507) javax.swing.JComponent.processMouseEvent(JComponent.java:3321) java.awt.Component.processEvent(Component.java:6269) java.awt.Container.processEvent(Container.java:2229) java.awt.Component.dispatchEventImpl(Component.java:4860) java.awt.Container.dispatchEventImpl(Container.java:2287) java.awt.Component.dispatchEvent(Component.java:4686) java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) java.awt.LightweightDispatcher.processMouseEvent(Container.java:4501) java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) java.awt.Container.dispatchEventImpl(Container.java:2273) java.awt.Window.dispatchEventImpl(Window.java:2713) java.awt.Component.dispatchEvent(Component.java:4686) java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707) java.awt.EventQueue.access$000(EventQueue.java:101) java.awt.EventQueue$3.run(EventQueue.java:666) java.awt.EventQueue$3.run(EventQueue.java:664) java.security.AccessController.doPrivileged(Native Method) java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) java.awt.EventQueue$4.run(EventQueue.java:680) java.awt.EventQueue$4.run(EventQueue.java:678) java.security.AccessController.doPrivileged(Native Method) java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) java.awt.EventQueue.dispatchEvent(EventQueue.java:677) com.intellij.ide.IdeEventQueue.e(IdeEventQueue.java:694) com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:530) com.intellij.ide.IdeEventQueue.b(IdeEventQueue.java:416) com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:374) java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211) java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128) java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117) java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113) java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105) java.awt.EventDispatchThread.run(EventDispatchThread.java:90) | 2 |
| 26 | CLOV-1062 | Clover-for-Groovy failed to instrument Groovy sources having methods overridden by metaClass | We were able to get clover report from maven-clover2-plugin even for groovy classes successfully. However when we try to override a method via Groovy metaclass in some tests, clover plugin fails on these tests. We simply added the following lines to our tests. MyClass.metaClass.myMethod = { return "called" } Clover plugin gave the following error. Exception in thread "main" BUG! exception in phase 'instruction selection' in source unit Test.groovy Clover-for-Groovy failed to instrument Groovy source: Test.groovy I attached the full stacktrace for further details. | 13 |
| 27 | CLOV-1077 | Missing icons on TreeView and Cloud Report tabs | On IDEA 11 the "Tree View" and "Cloud Report" tabs have missing icons. See attached screenshot. | 2 |
| 28 | CLOV-1082 | Write up on CAC how to get Clover working with Maven and integration tests | In particular: * numClients=1 should be set in the config * that the test runner JVM should not have -Dclover.distributed.coverage=ON set as this will override the numClients setting * that a context listener that starts on webapp start needs to be registered in web.xml so that the webapp Clover runtime connects back to the test runner JVM so that tests proceed | 1 |
| 29 | CLOV-1087 | Prepare tutorial how to configure distributed coverage for web applications | Extend a following page: http://confluence.atlassian.com/display/CLOVER/Working+with+Distributed+Applications or add a subpage. Prepare a step-by-step tutorial how to set compile options, deploy artifacts and set container options in order to test web applications. Things to be considered (not a complete list): * fact that -Dclover.distributed.coverage=ON it will use the default settings including the default numClients=0 * numClients must be set to 1 in order to have blocking unit tests * we need a servlet context listener to avoid circular dependency: unit tests are waiting for business code to connect, but business code will not connect until first request (which will be triggered by unit tests) | 1 |
| 30 | CLOV-1090 | Consistent statistics reporting in IDE and HTML reports for subpackages | See https://answers.atlassian.com/questions/11664/package-summary-including-sub-packages A problem is as follows. In IDE (IntelliJ/Eclipse) in the Coverage view when we see statistics for given package it is a aggregated summary of the package and all its subpackages. By clicking "Flatten packages" we can see statistics for a package without subpackages. See idea1.png. In HTML report we can see aggregated coverage only for the whole project. When we click on a certain package, we see statistics gathered only from classes from given package and not its subpackages. See html1.png and html2.png. The expected behaviour is as follows: 1) When we click on the "Coverage" link in top-left frame in HTML report, the functionality shall be as it is now. I.e. it should open in the right (main) frame a list of packages, a statistics panel in the top-right corner will show stats for whole project, clicking on a package on the list will open a package details frame with stats in top-right corner for the package only. 2) When we click on the "Coverage (Aggregate)" link in top-left frame, it will open in right frame list of package and a statistics panel for whole project (as it is now). But when user clicks on a package from list it will open a different package details frame with aggregated stats in top-right corner for the package and all subpackages. 3) A stats panel for option 1 shall have a label like "Statistics for package (without subpackages) <package name>" and for option 2 like "Statistics for package (with subpackages) <package name>" 4) A stats panel should have a link "show with subpackages" / "show without subpackages" for easy switch between reports. See html3.png *Update:* In new HTML report introduced in Clover 4, a package-level page could look this way: [^clover4-adg-package.png] so that toggle buttons would be similar to those a project-level page: [^clover4-adg-project.png] | 3 |
| 31 | CLOV-1092 | Finish About+Clover-for-Grails page | Complete content on http://confluence.atlassian.com/display/CLOVER/About+Clover-for-Grails and make it visible. Expand http://confluence.atlassian.com/display/CLOVER/Coverage+Legend Retake screengrab - with more context - i.e. bigger image and provide an explanation of the columns. Expand http://confluence.atlassian.com/display/CLOVER/Source+Cross-Referencing+in+Reports Add image with mouse pointer - i.e. hyperlinks within the code. Try to avoid getting the tooltip in the image as it is unrelated to the (point of the) hyperlink itself. Add more examples for advanced setuptask / reporttask configuration. | 1 |
| 32 | CLOV-1097 | Guide users through Eclipse setup | Our current Clover-for-Eclipse documentation is hard to follow. First it tells you how to enable Clover for your projects, mentions briefly that the views will pop up but won't have anything interesting on them yet, and then goes into great detail about each view. It would be helpful to instead walk the user through how to enable Clover for a project, and then go straight to configuration. There's no need to explain the views until there's something to show on them! It would also be helpful to describe how a project should be laid out. Do you need your test classes in the same Eclipse project as your source code, for example? | 2 |
| 33 | CLOV-1100 | Drop support for Eclipse 3.4, 3.5 and RAD 7.5 | Drop support for Eclipse 3.4.x and RAD 7.5. These tools are practically unused. Background: According to the latest 2012 [Eclipse community survey|http://ianskerrett.wordpress.com/2012/06/08/eclipse-community-survey-result-for-2012/] the 3.4 version is being used by 0.7% of users; 3.5 is used by 2.3% of users. Rational Application Developer 8.0 which is based on Eclipse 3.6 is available since September 2010, so since nearly two years - i.e. we can expect that IBM customers had a lot of time to upgrade to the latest RAD. The previous version of RAD 7.5 (based on Eclipse 3.4) was released in 2008. To do: * update http://confluence.atlassian.com/display/CLOVER/Supported+Platforms page * update clover-for-eclipse build scripts and manifest files | 1 |
| 34 | CLOV-1105 | license information inconsistent in IDEA | see screenshot | 1 |
| 35 | CLOV-1106 | bad alignment of "About" box in IDEA | see screenshot | 1 |
| 36 | CLOV-1108 | Eclipse does not exclude filtered-out methods from statistics | When we define certain methods to be filtered-out in Eclipse, they are being marked as not executed (hit count = 0) instead of not being taken into consideration at all (no hit count). What's interesting, an HTML report generated from Eclipse use filters correctly. Metrics in Eclipse says: 4 methods, 4 statements; Metrics in HTML says: 3 methods, 3 statements. See attached screenshots. | 1 |
| 37 | CLOV-1109 | Unit test failure during Clover2 custom lifecycle do not fail builds | The Maven Clover2 plugin creates a custom lifecycle. When the unit tests are run in that lifecycle the build will not fail if there are test failures. This is because the lifecycle.xml file forces the Surefire plugin's testFailureIgnore configuration property to false. This is especially problematic in Jenkins builds where unit tests should fail the build (rather than allowing them to be unstable). Please remove this configuration or replace it with a mechanism that can be set in the POM. The file in question is src/main/resources/META-INF/maven/lifecycle.xml. See the [related Answers discussion|https://answers.atlassian.com/questions/61973/clover-ignore-dmaven-test-failure-ignore-false]. | 2 |
| 38 | CLOV-1111 | Prepare tutorial how to instrument RCP application under Eclipse | Prepare manual on confluence.atlassian.com describing how to instrument and run RCP application under Eclipse IDE. Topics to be covered: * "Run with Clover as ..." vs "Run as ..." * various options in Run Configuration dialog * adding Clover dependency via Xbootclasspath or manually created plugin * exporting instrumented code (plugins, fragments, features, product) * config.ini for product and Xbootclasspath - running exported product (separately) and running it in IDE Prepare also code example showing how we can use Clover with RCP application. Open issue: how to distribute it with Clover-for-Eclipse. Options: * prepare sample aside and attach as zip to manual on confluence * implement a wizard so that using "File > New > Example > Clover RCP Example" will generate sample projects in workspace (preferred solution, but more work effort) | 1 |
| 39 | CLOV-1112 | Reading clover database across platforms does not resolve path correctly for FileInfo | Clover database contains FileInfo objects for every source file. One of FileInfo fields is an absolute path to given file. When database is written, it uses current platform file separator for file name ('\' for windows, '/' for Linux/MacOS). However, when database is read it interprets file name using again current platform file separator. As a consequence, when database is generated on Windows and report generated on Linux, it cannot resolve file name properly - it takes whole path as a single path segment, resulting in paths like: /path/from/report/generation/sourcepath/D:/path/from/instrumented/build/file.java As a consequence report generation does create html file containing source code with highlighted coverage. | 1 |
| 40 | CLOV-1129 | Prepare manual how to set-up cross-platform testing | Write how to set up Clover in case when someone is using a test framework not written in Java - for example shell scripts, C/C++ code. How to wrap this so that Clover can not only execute, but also optimize such tests. | 1 |
| 41 | CLOV-1131 | Unicode CR/LF characters in javadoc causes Eclipse/IntelliJ editors get out of sync | Try the following example: {code:java} class Unicode { void foo() { System.out.println("1"); /** {@code \u000a} LF */ } void goo() { System.out.println("2"); /** {@code \u000d} CR */ } void hoo() { System.out.println("3"); } } // end {code} In Eclipse editor, every CR/LF written in unicode causes that it interprets it as newline character. As a result left ruler "sees" more lines and all subsequent coverage blocks are shifted down. In IntelliJ it's even worse, as we get exception. Stack trace: {noformat} Error during dispatching of java.awt.event.InvocationEvent[INVOCATION_DEFAULT,runnable=com.cenqua.clover.idea.content.ContentPlugin$1@789e7511,notifier=null,catchExceptions=false,when=1343648365649] on sun.awt.windows.WToolkit@2018aa27: Wrong end: 270; document length=249; start=246 java.lang.IllegalArgumentException: Wrong end: 270; document length=249; start=246 com.intellij.openapi.editor.impl.RangeMarkerImpl.<init>(RangeMarkerImpl.java:47) com.intellij.openapi.editor.impl.DocumentImpl.createRangeMarker(DocumentImpl.java:303) com.intellij.openapi.editor.impl.RangeHighlighterImpl.<init>(RangeHighlighterImpl.java:58) com.intellij.openapi.editor.impl.MarkupModelImpl.a(MarkupModelImpl.java:119) com.intellij.openapi.editor.impl.MarkupModelImpl.addRangeHighlighter(MarkupModelImpl.java:135) com.cenqua.clover.idea.content.DocMarkupPlugin$HighlightMarkupBuilder.highlightStatement(DocMarkupPlugin.java:286) com.cenqua.clover.idea.content.DocMarkupPlugin$HighlightMarkupBuilder.process(DocMarkupPlugin.java:220) com.cenqua.clover.idea.content.DocMarkupPlugin.updateMarkups(DocMarkupPlugin.java:136) com.cenqua.clover.idea.content.DocMarkupPlugin.refresh(DocMarkupPlugin.java:424) com.cenqua.clover.idea.content.ContentPlugin$1.run(ContentPlugin.java:96) java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209) java.awt.EventQueue.dispatchEventImpl(EventQueue.java:646) java.awt.EventQueue.access$000(EventQueue.java:84) java.awt.EventQueue$1.run(EventQueue.java:607) java.awt.EventQueue$1.run(EventQueue.java:605) java.security.AccessController.doPrivileged(Native Method) java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) java.awt.EventQueue.dispatchEvent(EventQueue.java:616) com.intellij.ide.IdeEventQueue.f(IdeEventQueue.java:627) com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:508) com.intellij.ide.IdeEventQueue.b(IdeEventQueue.java:405) com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:369) java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) java.awt.EventDispatchThread.run(EventDispatchThread.java:122) {noformat} | 2 |
| 42 | CLOV-1132 | Fix Clover-for-IDEA compatibility with IntelliJ IDEA 12 | IDEA12 is going to be released quite soon. Make sure that Clover will work on it properly: http://blogs.jetbrains.com/idea/2012/08/meet-august-with-new-intellij-idea-12-eap-build-120305/ http://confluence.jetbrains.net/display/IDEADEV/Leda+120.305+Release+Notes http://confluence.jetbrains.net/display/IDEADEV/IDEA+12+EAP | 4 |
| 43 | CLOV-1135 | Coverage ruler does not read settings from Preferences | A left ruler showing code coverage markers is always reading default color values (defined in plugin.xml), instead of current settings from IDE (Window > Preferences > ... Text editors > Annotations). Note that color in text editor is updated correctly. See attached screenshot. | 1 |
| 44 | CLOV-1136 | Coverage ruler does not refresh correctly when all source code annotations are disabled | A left Clover coverage ruler does not refresh correctly after change in coverage in case when we don't have Clover-related source code annotations enabled. Steps to reproduce: - install Clover, enable it for a Moneybags project, perform full rebuild - open MoneyBagTest -> coverage is red - open Window > Preferences > Editors > Text editors > Annotations - for all "Clover: xxx" annotation types disable "Vertical ruler", "Overview ruler" and "Text as" checkboxes - run opened test case (right click, run as, junit test) Result: - JUnit view shows that tests were executed, Coverage Explorer view is also updated correctly, but the ruler is still highlighted in red - now scroll the text editor up and down - ruler refreshes during repaint; (the same happens when editor is reopened or resized) See attached screenshot. Expected result: 1) ruler should refresh automatically when coverage data is changed, no matter whether source annotation is enabled or not OR 2) ruler should not draw any color if corresponding source code annotation is disabled | 2 |
| 45 | CLOV-1137 | Remove grover*.jar after build | A maven-clover2-plugin creates a groover*.jar file in $java.io.tmpdir directory. This JAR is next being dynamically added as a build dependency artifact. It must be available till end of the build. Unfortunately Maven has nothing like post-build-cleanup phase (which would be always executed at end of build). We need a workaround for this, for example: 1) Create a new Clover goal, like clover2:post-build-cleanup, which will remove this file. 2) Alternatively, find a way to add Clover groovy runtime classes to classpath, so that creation of JAR file would not be needed anymore. As soon as this bug is fixed, a corresponding update of Bamboo Clover Plugin is necessary. See linked issue. *Solution implemented:* Instead of playing with post-build cleanup, there are two new options available in <clover-setup/> taks (Ant) and clover2:setup / clover2:instrument goals (Maven): * skipGroverJar - if set to true it will not extract artifact at all (can be used only if there's no Groovy code in a project) * groverJar - target location of grover.jar file (fixed name and location instead of generating temporary file name in java.io.tmpdir) | 2 |
| 46 | CLOV-1138 | Create utility for upgrading third party libraries bundled in Clover | In Clover-for-Ant we have an upgrade.xml Ant script, which can repackage clover.jar and install new version of jfreechart library into it. We shall extend this script to support replacement of all third party libraries used in Clover. Such script should be also available for Clover-for-Eclipse and Clover-for-IDEA. Keep in mind that we have to retrotranslate third party classes during repackaging to have them compatible with Java 1.4. Keep in mind that we have to prefix java packages with "clover." in order to avoid name space conflicts. Packages: * com.google.gson * com.atlassian.* (Atlassian API) * com.keypoint.* * com.lowagie.* * gnu.cajo.* * it.unimi.dsi.fastutil.* * org.apache.commons.* * org.apache.log4j.* * org.apache.oro.* * org.apache.velocity.* * org.codehaus.groovy.antlr (?) * org.jfree * retrotranslator * org.apache.tools.ant.* (?) | 1 |
| 47 | CLOV-1140 | Make Clover-for-Android prototype publicly available | Take a ShipIt prototype prepared by Michael, merge with the latest Clover version, make it working on Eclipse ADT, publish manual how to use it on CAC/Clover-for-Android page. | 5 |
| 48 | CLOV-1141 | Refresh Clover-for-Scala prototype | Tasks: * take Scala prototype https://confluence.atlassian.com/display/DEV/ShipIt+12+Delivery+-+Clover+for+Scala, * change the code so that it will use new Clover Service Provider Interface - CLOV-1142 * make it working with the latest Clover code base (version 4.0.x), | 13 |
| 49 | CLOV-1142 | Expose a Service Provider Interface for Clover for handling new languages | Create a Service Provider Interface for Clover, which will allow to attach new source code and/or byte code instrumenters. It will allow us to create a pluggable architecture so that new programming languages (e.g. Scala, JRuby, Jython, Closure) could be supported. *Rough idea:* * new language instrumenters can be attached by META-INF/services ** they can provide some callback like canInstrument(File) or canInstrument(InstrumentationSource) ** clover shall pass file/instrumentation source to such instrumenter together with Clover's configuration and an open instrumentation session ** extension instruments on its own calling session.enterXyz()/exitXyz() methods ** extension writes output file on its own ** language instrumenter could work also with an Abstract Syntax Tree (e.g. Groovy or Scala - we may need a different way of attaching here) * new language renderers can be attached by META-INF/services - move to another issue? | 8 |
| 50 | CLOV-1143 | Remove obsolete pages from Clover 3.1 space | Hi Melanie, May I ask your team to delete following pages from CLOVER space? All of them are obsolete or available in spaces for older Clover releases. They are unnecessarily cluttering current documentation. https://confluence.atlassian.com/display/CLOVER/Changes+in+2.6.3.2+for+IDEA https://confluence.atlassian.com/display/CLOVER/Changes+in+2.6.3+for+IDEA https://confluence.atlassian.com/display/CLOVER/Changes+in+2.6.0+for+IDEA https://confluence.atlassian.com/display/CLOVER/Changes+in+2.5.1+for+IDEA https://confluence.atlassian.com/display/CLOVER/Changes+in+2.5.0+for+IDEA https://confluence.atlassian.com/display/CLOVER/Changes+in+2.4.3+for+IDEA https://confluence.atlassian.com/display/CLOVER/Changes+in+2.4.2+for+IDEA https://confluence.atlassian.com/display/CLOVER/Changes+in+2.4.1+for+IDEA https://confluence.atlassian.com/display/CLOVER/Changes+in+2.4.0+for+IDEA https://confluence.atlassian.com/display/CLOVER/Changes+in+2.3.2-beta5+for+IDEA https://confluence.atlassian.com/display/CLOVER/Changes+in+2.3.2-beta4+for+IDEA https://confluence.atlassian.com/display/CLOVER/Changes+in+2.3.2-beta3+for+IDEA https://confluence.atlassian.com/display/CLOVER/Changes+in+2.3.2-beta2+for+IDEA https://confluence.atlassian.com/display/CLOVER/Changes+in+2.3.1-beta1+for+IDEA https://confluence.atlassian.com/display/CLOVER/Changes+in+2.6.3+for+Eclipse https://confluence.atlassian.com/display/CLOVER/Changes+in+2.6.2+for+Eclipse https://confluence.atlassian.com/display/CLOVER/Changes+in+2.6.0+for+Eclipse https://confluence.atlassian.com/display/CLOVER/Changes+in+2.5.1+for+Eclipse https://confluence.atlassian.com/display/CLOVER/Changes+in+2.5.0+for+Eclipse https://confluence.atlassian.com/display/CLOVER/Changes+in+2.4.3+for+Eclipse https://confluence.atlassian.com/display/CLOVER/Changes+in+2.4.2+for+Eclipse https://confluence.atlassian.com/display/CLOVER/Changes+in+2.4.0+for+Eclipse https://confluence.atlassian.com/display/CLOVER/Changes+in+2.3.2+for+Eclipse https://confluence.atlassian.com/display/CLOVER/Changes+in+2.3.1+for+Eclipse https://confluence.atlassian.com/display/CLOVER/Changes+in+2.2.1+for+Eclipse https://confluence.atlassian.com/display/CLOVER/Changes+in+2.1.0+for+Eclipse https://confluence.atlassian.com/display/CLOVER/Changes+in+2.0.3+for+Eclipse https://confluence.atlassian.com/display/CLOVER/Changes+in+2.0.2+for+Eclipse https://confluence.atlassian.com/display/CLOVER/Changes+in+2.0.1+for+Eclipse https://confluence.atlassian.com/display/CLOVER/Changes+in+2.0.0+for+Eclipse https://confluence.atlassian.com/display/CLOVER/Changes+in+2.0.0.b2_1+for+Eclipse https://confluence.atlassian.com/display/CLOVER/Changes+in+2.6.3+for+Ant https://confluence.atlassian.com/display/CLOVER/Changes+in+2.6.2+for+Ant https://confluence.atlassian.com/display/CLOVER/Changes+in+2.6.0+for+Ant https://confluence.atlassian.com/display/CLOVER/Changes+in+2.5.1+for+Ant https://confluence.atlassian.com/display/CLOVER/Changes+in+2.5.0+for+Ant https://confluence.atlassian.com/display/CLOVER/Changes+in+2.4.3+for+Ant https://confluence.atlassian.com/display/CLOVER/Changes+in+2.4.2+for+Ant https://confluence.atlassian.com/display/CLOVER/Changes+in+2.4.0+for+Ant https://confluence.atlassian.com/display/CLOVER/Changes+in+2.3.2+for+Ant https://confluence.atlassian.com/display/CLOVER/Changes+in+2.3.1+for+Ant https://confluence.atlassian.com/display/CLOVER/Changes+in+2.3.0+for+Ant https://confluence.atlassian.com/display/CLOVER/Changes+in+2.2.1+for+Ant https://confluence.atlassian.com/display/CLOVER/Changes+in+2.2.0+for+Ant https://confluence.atlassian.com/display/CLOVER/Changes+in+2.1.0+for+Ant https://confluence.atlassian.com/display/CLOVER/Changes+in+2.0b2+for+Ant https://confluence.atlassian.com/display/CLOVER/Changes+in+2.0b1+for+Ant https://confluence.atlassian.com/display/CLOVER/Changes+in+2.0a5+for+Ant https://confluence.atlassian.com/display/CLOVER/Changes+in+2.0a4+for+Ant https://confluence.atlassian.com/display/CLOVER/Changes+in+2.0a3+for+Ant https://confluence.atlassian.com/display/CLOVER/Changes+in+2.0a2+for+Ant https://confluence.atlassian.com/display/CLOVER/Changes+in+2.0a1+for+Ant https://confluence.atlassian.com/display/CLOVER/Changes+in+2.0.3+for+Ant https://confluence.atlassian.com/display/CLOVER/Changes+in+2.0.2+for+Ant https://confluence.atlassian.com/display/CLOVER/Changes+in+2.0.1+for+Ant https://confluence.atlassian.com/display/CLOVER/Changes+in+2.0.0+for+Ant https://confluence.atlassian.com/display/CLOVER/Changes+in+2.6.0+for+Maven+2 https://confluence.atlassian.com/display/CLOVER/Changes+in+2.5.0+for+Maven+2 https://confluence.atlassian.com/display/CLOVER/Changes+in+2.4.3+for+Maven+2 https://confluence.atlassian.com/display/CLOVER/Changes+in+2.4.2+for+Maven+2 https://confluence.atlassian.com/display/CLOVER/Changes+in+2.3.2+for+Maven+2 https://confluence.atlassian.com/display/CLOVER/Changes+in+2.3.0+for+Maven+2 https://confluence.atlassian.com/pages/viewpage.action?pageId=110035179 https://confluence.atlassian.com/pages/viewpage.action?pageId=134873325 https://confluence.atlassian.com/pages/viewpage.action?pageId=103710921 https://confluence.atlassian.com/display/CLOVER/%5BTRASH%5D+Using+Clover+for+Maven+2+with+the+gwt-maven-plugin https://confluence.atlassian.com/display/CLOVER/%5BTRASH%5D+Using+Clover+with+the+GWT-maven+plugin https://confluence.atlassian.com/pages/viewpage.action?pageId=93683890 https://confluence.atlassian.com/pages/viewpage.action?pageId=71599635 https://confluence.atlassian.com/display/CLOVER/%5BTRASH%5D+Clover-for-Eclipse+User%27s+Guide https://confluence.atlassian.com/display/CLOVER/%28hidden+draft%29+Clover-for+Eclipse+Upgrade+Guide | 1 |
| 51 | CLOV-1144 | Support *.groovy files in src/main/java folder for groovy-eclipse-plugin | *Problem:* Clover fails during instrumentation of *.groovy files in case when sources are put in src/main/java directory, instead of src/main/groovy and when the groovy-eclipse-plugin is used. *Steps to reproduce:* * create a project with groovy-eclipse-plugin and maven-clover2-plugin * put a *.groovy file inside src/main/java * run build *Expected error:* {noformat} [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1.201s [INFO] Finished at: Mon Sep 10 10:16:48 CDT 2012 [INFO] Final Memory: 7M/18M [INFO] ------------------------------------------------------------------------ [ERROR] Failed to execute goal com.atlassian.maven.plugins:maven-clover2-plugin:3.1.7:setup (default-cli) on project test.project: Clover has failed to instrument the source files in the [C:\workspaces\workspace\TestProject\target\clover\src-instrumented] directory -> [Help 1] org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal com.atlassian.maven.plugins:maven-clover2-plugin:3.1.7:setup (default-cli) on project test.project: Clover has failed to instrument the source files in the [C:\workspaces\workspace\TestProject\target\clover\src-instrumented] directory org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:217) org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84) org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59) org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183) org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161) org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:319) org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156) org.apache.maven.cli.MavenCli.execute(MavenCli.java:537) org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196) org.apache.maven.cli.MavenCli.main(MavenCli.java:141) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) java.lang.reflect.Method.invoke(Method.java:597) org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290) org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230) org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409) org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352) Caused by: org.apache.maven.plugin.MojoExecutionException: Clover has failed to instrument the source files in the [C:\workspaces\workspace\TestProject\target\clover\src-instrumented] directory com.atlassian.maven.plugin.clover.internal.instrumentation.AbstractInstrumenter.instrumentSources(AbstractInstrumenter.java:197) com.atlassian.maven.plugin.clover.internal.instrumentation.AbstractInstrumenter.instrument(AbstractInstrumenter.java:72) com.atlassian.maven.plugin.clover.CloverInstrumentInternalMojo.execute(CloverInstrumentInternalMojo.java:309) com.atlassian.maven.plugin.clover.CloverSetupMojo.execute(CloverSetupMojo.java:31) org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101) org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209) ... 19 more [ERROR] [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException *** ERROR: No source files specified USAGE: com.cenqua.clover.CloverInstr [OPTIONS] PARAMS [FILES...] {noformat} A reason is that Java compiler is involved here, Clover is called, it filters out all files which do not have *.java extension and as a consequence it passes wrong argument to CloverInstr. *Solution:* 1) Add check to AbstractInstrumenter (maven-clover2-plugin) so it does not call CloverInstr in case no matching files are found 2) Add support for src/main/java, src/test/java directories for Groovy - probably in GroovySourceScanner + CloverInstrumentInternalMojo *Workaround:* Put Groovy files in correct location i.e. src/main/groovy - they'll be handled correctly by Clover. *Background:* According to groovy-eclipse-plugin documentation, they recommend putting groovy files inside java folder - it's not nice, but it's the fastest set-up. http://groovy.codehaus.org/Groovy-Eclipse+compiler+plugin+for+Maven | 3 |
| 52 | CLOV-1148 | Implement integration with Maven Tycho Plugin | Currently Clover-for-Maven cannot handle maven build with the maven-tycho-plugin. More details here: https://answers.atlassian.com/questions/1919/maven-3-tycho-and-clover To be done: hack the maven-tycho-plugin and intercept its internal call of javac compiler and instrument sources on the fly. | 4 |
| 53 | CLOV-1149 | Make possible to see instrumented sources in Clover-for-Eclipse | Clover-for-Eclipse: Clover instrumentation in performed in memory during compilation. As a consequence when there is any build error, we can see original source only and cannot check whether the problem lies in the Clover instrumenter itself. For example, in Clover-for-IDEA we can see instrumented sources because they're stored in temporary directory. To be implemented: add an option to get instrumented sources in Eclipse too. | 1 |
| 54 | CLOV-1150 | Clover does not instrument groovy source files, (groovy-eclipse compiler) when located in src/main/groovy | When building a groovy project with maven, I am trying to get clover code coverage reports. With all source files in .java and in src/main/java, clover works fine. However, with all source files in .groovy and in src/main/groovy, clover can not instrument the files (clover2:instrument, or clover2:setup). Everything that I can find is saying that clover versions after 3.1.3 support the maven groovy eclipse compiler (so long as the groovy files are located in src/main/groovy). See this ticket: https://jira.atlassian.com/browse/CLOV-1021?page=com.atlassian.jira.plugin.system.issuetabpanels:changehistory-tabpanel There is another support ticket that I found that seems to cover the same issue, however I cannot access it. Here is the link https://support.atlassian.com/browse/CLV-5878 A partial output log is included here. I will try to come up with a small test project that I can upload here. Any help would be appreciated. | 5 |
| 55 | CLOV-1151 | Clover fails to find coverage snapshot files when IBM JRE is used | *Problem:* it seems that IBM JRE implementation differs from Oracle JRE in such way that Object.hashCode() can return a negative value. As a consequence, file name suffix generated for coverage snapshot and test slice snapshot may be composed not only of '0-9a-z_' characters, but also have minus "-" sign in it. As a result such file name does not match regular expression used for searching of coverage files and coverage is not read. *Workaround:* rename coverage snapshot file(s) and remove "-" character. | 1 |
| 56 | CLOV-1154 | Inconsistent popup menu in different IDEA versions | IDEA 10 and newer is not showing the "Exclude from compile" option when sources are instrumented. In IDEA9 it was working fine. See 'popup_menu_in_ideas.png' screenshot. My suspicion is that IDEA somehow does not treat instrumented file as a source code, thus hiding this option from popup menu. What's more, when you click on the "Jump to source" it opens the Explorer window, instead of opening the source file in IDEA. See also: META-INF/plugin.xml com.cenqua.clover.idea.CloverPlugin.initComponent() com.intellij.openapi.actionSystem.IdeActions; @NonNls String GROUP_COMPILER_ERROR_VIEW_POPUP = "CompilerErrorViewPopupMenu"; com.intellij.compiler.imp.CompilerErrorTreeView.addExtraPopupMenuActions(); | 2 |
| 57 | CLOV-1155 | Simple installer for Clover-for-IDEA | When someone downloads the Clover-for-IDEA from www.atlassian.com he gets clover-idea-x.x.x.jar file. What to do next? Of course you have to open IDEA, select Settings > Plugins > Install from disk, but user might not know. Especially when taking into account that "Install from disk" is not available in older IDEA versions. New feature: provide simple installer for Clover-for-IDEA. When user double-clicks on a JAR, a GUI installer starts (class defined in MANIFEST.MF) which asks for location of IDEA installation. Simple check whether selected folder contains config/plugins directory and copy jar into given location. Show also message how it can be installed from IDEA GUI. Business value: makes Clover evaluation easier. | 2 |
| 58 | CLOV-1156 | Refresh clover.atlassian.com | The http://clover.atlassian.com/ page was not updated for last 2 years. Re-activate Bamboo builds related with this site to have live data. Add a link to this page on main Clover product page: http://www.atlassian.com/software/clover/overview | 1 |
| 59 | CLOV-1157 | Run with Clover as on a project with no Clover | Clover-for-Eclipse. When you have a project with Clover disabled, the "Run with Clover as" and "Run optimized" buttons are still active. It makes no sense, buttons should be grayed-out. | 1 |
| 60 | CLOV-1158 | Test Run Explorer does not show test contribution with optimized run | When you execute optimized test runs, the Test Run Explorer does snow show test contribution data. | 1 |
| 61 | CLOV-1159 | Create small legend for Top Risks and Quick Wins in Cloud report | Currently user does not know what the font size and colour means until he reads the documentation. Add small legend box or at least a single-line description for these two reports. Affects HTML report as well as Eclipse/IDEA views. | 1 |
| 62 | CLOV-1160 | Change default sort order in coverage report for packages/classes/methods | Coverage report - show the least covered packages/classes/methods first. Table should not start with the highest coverage (starting from 100%) at the top, because developer is not interested in code which is already covered and tested, but in white spots. Add the possibility to sort by any column. Affected: HTML/IDE | 2 |
| 63 | CLOV-1161 | Add drop-down with two options for coverage | Add the "drop-down" listbox which will have "show cumulative coverage" and "show coverage from last run" options. It should be added in Eclipse and IDEA. Note that the "span" option is already available (Window > Preferences > Clover) but we can have either: * have time-based span or * set it to 0seconds which means load everything. Background reason: coverage is cumulative. Some customer have pointed out that coverage data for successive incremental change/save/compile/test cycles can lie and show coverage that's no longer there. That's because we aggregate all coverage data since the last full rebuild. We will hopefully have a better way of showing this in the future. In the meantime, scrubbing the coverage for a project and re-running the tests will show the coverage of tests just run. | 2 |
| 64 | CLOV-1162 | Generate cumulative statement / complexity metric for need of methodContext filtering | A method context has maxComplexity / maxStatements attributes which allow to reduce the scope of context filter for methods where these metrics are lower than defined level (by default maxComplexity/maxStatements is Int.MAX_VALUE, i.e. all methods are taken into account). Example: {code:xml} <methodContext name="trivial" regexp=".*" maxStatements="1"/> {code} However, customer reported a problem that it excludes methods containing inline classes, for instance: {code:java} // the getListener() method has only one statement: "return <object>;" // if you use <methodContext name="trivial" regexp=".*" maxStatements="1"> // then the whole code block will be filtered-out, including the actionPerformed() method ActionListener getListener() { return new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println("statement #1"); System.out.println("statement #2"); } }; } {code} In the case above ActionListener() is an inner class so it has their own metrics. And because of fact that context filters are "cumulative" (so that whenever any code pattern is matched, then the whole block is excluded), the whole getListener() method is filtered-out, including inner class. *Solution:* We cannot change existing metrics (without breaking backward compatibility) and we cannot change the way how blocks are excluded (it would make no sense). But we can create new metrics called: cumulativeComplexity and cumulativeStatements. It would work as follows: * for every interface, class, enum or method find all inner classes, interfaces, enums or methods (*) ** this can be checked by matching occupied code regions (on a database level during metric calculation - preferred) or during instrumentation (code parser) * calculate cumulativeComplexity and cumulativeStatements by adding cumulative value from all inner objects to current entity complexity/statements value * add maxCumulativeComplexity / maxCumulativeStatments to Ant clover-setup/clover-instr and Maven clover2:setup / clover2:instr goals ** html reports would probably remain unchanged (just grey-out) (*) yes we should make code more flexible in order to make it ready to support code constructs like default methods in Java8 interfaces or Scala's functions inside functions etc | 8 |
| 65 | CLOV-1165 | Fix AbstractAntLogger | The AbstractAntLogger class logs the message only if Ant Task is not null: {noformat} protected void antLog(Project proj, Task task, String aMsg, int antLogLevel) { if (task != null) { proj.log(task, aMsg, antLogLevel); } } {noformat} As a consequence, no log is availalbe in case when code it's called outside Ant - problem was found in open-source Gradle Clover Plugin. | 1 |
| 66 | CLOV-1166 | Clover does not work with Groovy 2.x | *Problem:* Clover instrumentation fails for Groovy 2.x with a stack trace like below: {noformat} BUILD FAILED c:\Work\support\clv-5892-groovyjarjarasm\tutorial\build.xml:32: java.lang.IncompatibleClassChangeError at com.atlassian.clover.instr.groovy.bytecode.RecorderGetterBytecodeInstruction.visit(RecorderGetterBytecodeInstruction.java:109) at org.codehaus.groovy.classgen.AsmClassGenerator.visitBytecodeSequence(AsmClassGenerator.java:1771) at org.codehaus.groovy.classgen.BytecodeSequence.visit(BytecodeSequence.java:64) at org.codehaus.groovy.classgen.asm.StatementWriter.writeBlockStatement(StatementWriter.java:81) at org.codehaus.groovy.classgen.asm.OptimizingStatementWriter.writeBlockStatement(OptimizingStatementWriter.java:155) at org.codehaus.groovy.classgen.AsmClassGenerator.visitBlockStatement(AsmClassGenerator.java:455) at org.codehaus.groovy.ast.stmt.BlockStatement.visit(BlockStatement.java:69) at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClassCodeContainer(ClassCodeVisitorSupport.java:101) at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitConstructorOrMethod(ClassCodeVisitorSupport.java:112) at org.codehaus.groovy.classgen.AsmClassGenerator.visitStdMethod(AsmClassGenerator.java:319) at org.codehaus.groovy.classgen.AsmClassGenerator.visitConstructorOrMethod(AsmClassGenerator.java:276) at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitMethod(ClassCodeVisitorSupport.java:123) at org.codehaus.groovy.classgen.AsmClassGenerator.visitMethod(AsmClassGenerator.java:396) at org.codehaus.groovy.ast.ClassNode.visitContents(ClassNode.java:1056) at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClass(ClassCodeVisitorSupport.java:50) at org.codehaus.groovy.classgen.AsmClassGenerator.visitClass(AsmClassGenerator.java:180) at org.codehaus.groovy.control.CompilationUnit$14.call(CompilationUnit.java:786) at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1027) at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:564) at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:542) at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:519) at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:498) at org.codehaus.groovy.tools.FileSystemCompiler.compile(FileSystemCompiler.java:57) at org.codehaus.groovy.tools.FileSystemCompiler.doCompilation(FileSystemCompiler.java:213) at org.codehaus.groovy.ant.Groovyc.runCompiler(Groovyc.java:947) at org.codehaus.groovy.ant.Groovyc.compile(Groovyc.java:994) at org.codehaus.groovy.ant.Groovyc.execute(Groovyc.java:630) {noformat} *Reason:* RecorderGetterBytecodeInstruction extends org.codehaus.groovy.classgen.BytecodeInstruction and implements a following method: public void visit(groovyjarjarasm.asm.MethodVisitor methodVisitor) In Groovy 1.x MethodVisitor is an interface. In Groovy 2.x MethodVisitor is a class. Although RecorderGetterBytecodeInstruction compiles correctly with both Groovy versions, it fails at runtime during bytecode verification, becase visit() method gets different bytecode signature. *Solution:* Compile RecorderGetterBytecodeInstruction against two different Groovy versions. Load proper version using reflections at runtime. | 2 |
| 67 | CLOV-1167 | Grails Clover Plugin does not intercept 'testc' compiler | Grails 2.x has introduced a new compiler for building unit tests (from test/unit directory). The 'testc' task is the *org.codehaus.groovy.grails.test.compiler.GrailsTestCompiler* Build log looks like this: {noformat} |Compiling 1 source files ... [testc] ... \test\unit\clover\test\UnitTests.groovy |Compiling 1 source files ... [groovyc] ... \test\integration\IntegrationServiceTests.groovy {noformat} Clover does not intercept this compiler call (it supports Groovyc, Grailsc, GrailsCompiler). As a consequence unit tests are not instrumented and not included in coverage. | 1 |
| 68 | CLOV-1170 | CloverOptimizerMojo does not support full include/exclude syntax | *Problem:* CloverOptimizerMojo does not support full include/exclude syntax, which can be handled by maven-surefire-plugin. Two cases are not handled right now: (1) multiple paths separated by comma {noformat} <include>**/Test1.java, **/Test2.java</include> {noformat} (2) regular expression instead of Ant-style pattern {noformat} <include>%regex[.*Test.class]</include> {noformat} See: http://maven.apache.org/plugins/maven-surefire-plugin/examples/inclusion-exclusion.html *Workaround:* (1) use separate entries, like: {noformat} <include>**/Test1.java</include> <include>**/Test2.java</include> {noformat} (2) not available; user can try to replace regexp by set of Ant-style patterns *Implementation:* CloverOptimizerMojo relies an Ant-style patterns underneath. The CloverOptimizerMojo.createFileSet() method has {noformat} private FileSet createFileSet(Project antProject, final File directory, List includes, List excludes) { FileSet testFileSet = new FileSet(); ... testFileSet.appendIncludes((String[]) includes.toArray(new String[includes.size()])); } {noformat} fix for (1) - split every element in includes/excludes arrays using the comma delimiter and pass expanded arrays to appendIncludes() fix for (2) - find all elements from includes/excludes arrays having %regexp keyword, run file search on _directory_ using a filename matcher with regexp, create include/exclude for every file matched | 1 |
| 69 | CLOV-1173 | Add maxComplexity / maxStatements for Clover-for-Maven | Ant has extra maxComplexity and maxStatements attributes available which are not supported in Maven plugin, for example: {code:xml} <methodContext name="simple_method" regexp="(.* )?public .*(get|set|is)[A-Z0-9].*" maxStatements="1"/> {code} in Maven we have _name_ and _regexp_ attributes only: {code:xml} <configuration> <methodContexts> <!-- vvvvv name vvvvvv regexp --> <simple_method>((.* )?public .*(get|set|is)[A-Z0-9].*</simple_method> </methodContexts> </configuration> {code} *Possible solution* Create <methodContextsExt> which would accept entries like: {code:xml} <methodContextsExt> <methodContext> <name>simple_method</name> <regexp>(.* )?public .*(get|set|is)[A-Z0-9].*</regexp> <maxComplexity>10</maxComplexity> <maxStatements>10</maxStatements> <!-- for CLOV-1162: --> <maxCumulativeComplexity>20</maxCumulativeComplexity> <maxCumulativeStatments>20</maxCumulativeStatments> </methodContext> <methodContextsExt> ... more ... {code} Alternatively, extend parsing of existing <methodContexts> tag so whenever it finds the <methodContext> entry it will not treat it as name of new context but as a structure from sample above. See also CLOV-1162. | 2 |
| 70 | CLOV-1175 | Make HTML report more consistent about number of classes | See attached screenshot. HTML report should list interfaces too. | 2 |
| 71 | CLOV-1176 | The clover-log should use default test detection if testSources are not defined | *Steps to reproduce:* 1) Add following target to clover-ant-X.Y.Z/tutorial/build_completed.xml: {code:xml} <target name="clover.log"> <clover-log codeType="APPLICATION"/> <clover-log codeType="TEST"/> <clover-log codeType="ALL"/> </target> {code} 2) Run {noformat} ant -f build_completed.xml -Dtest.target=test.run clover.all {noformat} It will produce output like: {noformat} clover.log: [clover-log] Report for code : APPLICATION [clover-log] Coverage:- [clover-log] Methods: 61/62 (98,4%) [clover-log] Statements: 171/178 (96,1%) [clover-log] Branches: 40/48 (83,3%) [clover-log] Total: 94,4% ... [clover-log] Report for code : TEST [clover-log] Coverage:- [clover-log] Methods: 0/0 ( - ) [clover-log] Statements: 0/0 ( - ) [clover-log] Branches: 0/0 ( - ) [clover-log] Total: - ... [clover-log] Report for code : ALL [clover-log] Coverage:- [clover-log] Methods: 61/62 (98,4%) [clover-log] Statements: 171/178 (96,1%) [clover-log] Branches: 40/48 (83,3%) [clover-log] Total: 94,4% {noformat} *Result:* All classes were qualified to APPLICATION; if we compare it with XML or HTML reports, test and application classes are distinguished there. This is normal behaviour because <clover-log> requires the <testSources> tag to be defined, for instance: {code:xml} <clover-log codeType="TEST"> <testSources dir="src" includes="**/*Test*"/> </clover-log> {code} works fine. *Improvement:* Try to use the [default test detection algorithm|https://confluence.atlassian.com/display/CLOVER/Clover+test+detection] in order to find test classes. It would work in the same way as [<clover-setup>|https://confluence.atlassian.com/display/CLOVER/clover-setup] task when the <testsources> tag is not defined. | 3 |
| 72 | CLOV-1177 | Errors in ErrorLog when toggling between projects with Dashboard view active | 1) Toggle between cloverized projects. Dashboard visible. Message: Unexpected URI in the Dashboard view: C:\Users\Marek\.workspace-eclipse-3.4.2\Moneybags\.clover\report\dashboard-eclipse.html {noformat} java.net.URISyntaxException: Illegal character in opaque part at index 2: C:\Users\Marek\.workspace-eclipse-3.4.2\Moneybags\.clover\report\dashboard-eclipse.html java.net.URI$Parser.fail(Unknown Source) java.net.URI$Parser.checkChars(Unknown Source) java.net.URI$Parser.parse(Unknown Source) java.net.URI.<init>(Unknown Source) com.cenqua.clover.eclipse.views.dashboard.DashboardLocationListener.changing(DashboardLocationListener.java:62) {noformat} 2) Right click on a closed project, which was cloverized before. Dashboard view visible. Message: Error creating the dashboard {noformat} java.lang.NullPointerException com.cenqua.clover.eclipse.views.dashboard.DashboardGenerator.execute(DashboardGenerator.java:41) com.cenqua.clover.eclipse.views.dashboard.DashboardView.generateReport(DashboardView.java:100) com.cenqua.clover.eclipse.views.dashboard.DashboardView.projectSelected(DashboardView.java:91) com.cenqua.clover.eclipse.views.dashboard.DashboardView.selectionChanged(DashboardView.java:130) org.eclipse.ui.internal.AbstractSelectionService.firePostSelection(AbstractSelectionService.java:179) org.eclipse.ui.internal.AbstractSelectionService$2.selectionChanged(AbstractSelectionService.java:71) {noformat} 3) Cloverized project selected in Package Explorer, Dashboard view opened. Close the selected project. Message: Problem generating Dashboard report {noformat} java.lang.NullPointerException com.cenqua.clover.eclipse.views.dashboard.DashboardView.ensureReportFolderCreated(DashboardView.java:107) com.cenqua.clover.eclipse.views.dashboard.DashboardView.generateReport(DashboardView.java:97) com.cenqua.clover.eclipse.views.dashboard.DashboardView$1.run(DashboardView.java:153) org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) {noformat} | 1 |
| 73 | CLOV-1178 | Fix ruler coloring when include coverage from passed only is enabled | Eclipse. Java Editor. Left ruler showing coverage colours (green/yellow/blue). Rules shows "yellow coverage" when the "include from passed only" option is enabled. There should be no yellow colour in such case. Note: source code is highlighted correctly, metrics are fine too. See screenshot. | 1 |
| 74 | CLOV-1179 | Highlight whole method body if method is not covered | If given method was not executed at all, the HTML report shows red highlighting only for method header. It's not a bug in code - our Velocity templates are just written this way. We should highlight the whole method body in red - in the same way as Eclipse/IntelliJ does. See screenshot. | 5 |
| 75 | CLOV-1181 | Multiple test cases in Test Run Explorer in IDEA | Quickly click 'run' button in order to execute multiple sets of unit tests in parallel. IDEA runs them in parallel, as a consequence we've got duplicated test cases on a list. See attached screenshot. Affects all supported IDEA versions. We should have test cases from last test run only. | 2 |
| 76 | CLOV-1182 | Multiple test cases in Test Runs view in Eclipse | If unit tests are executed several times since the last build, the Test Run view shows multiple test results. Not a bug actually, but it could be improved by showing last results only. See screenshot. Affects all supported eclipse versions. | 3 |
| 77 | CLOV-1183 | Cloud Report in IDEA shows interfaces | Cloud Report in IDEA is inconsistent with a Cloud Report in Eclipse - it shows interfaces, which does not actually have any executable code. It shows also annotations. Fix: don't list objects (interfaces, classes) which do not have any statements in the Cloud Report. Note that simple check if !isInterface() is not sufficient as interfaces in Java8 will have default methods with code. | 2 |
| 78 | CLOV-1184 | Check Now button does not work if project is not opened in IDEA | Install the latest Clover plugin version in IDEA. Click Settings > IDE Settings > Clover > Auto Update > Check now button. If project is opened then pop-up is shown that the latest version is already installed. If no project is opened (i.e. you're on a IDEA's welcome page), pop-up is not shown. See attached images. Problem occurs on IDEA 11.x and 12.x. | 1 |
| 79 | CLOV-1185 | Test optimization is broken in IDEA11 and above | JetBrains have changed sth in IDEA 11 regarding unit test run configuration, as a consequence Clover does not "see" and thus does not optimize all unit tests. Problem does not occur on IDEA 9.x, 10.x, 10.5.x. It is present on IDEA 11.x and probably also on 12.x. See attached images. | 2 |
| 80 | CLOV-1186 | IDEA12 JavaSourceTransformingCompiler functionality has been removed | Since build 122.694 Clover 3.1.8 cannot work with IDEA12 EAP, because the "external" build functionality was introduced and the JavaSourceTransformingCompiler is no longer supported. See issue http://youtrack.jetbrains.com/issue/IDEA-94612 | 5 |
| 81 | CLOV-1187 | Don't spam the console with println anytime clover grails plugin is installed | From looking at the _Events.groovy hooks in the plugin, there are several println statements which will execute in all contexts, not just testing and not just when clover.on is specified. Specifically, the set classpath and compile start/end hooks will happen everytime any Grails command is run. This is bad practice for a plugin. The println statements should be changed to use the grailsConsole which is available automatically println "foo" => grailsConsole.log "foo" or grailsConsole.updateStatus "foo" Secondly, this should probably be wrapped in a helper which only prints if the the clover is enabled, ie: def logStuff(msg) { if( config.on ) grailsConsole.log msg } | 1 |
| 82 | CLOV-1188 | Aggregate coverage by current author and commit regex | I love CIJ. When I use git, I find myself making a lot of commits, and I want to see my test coverage aggregated by the jira ticket I've put in my commit log. For example, let's say I'm working on a project for 3 days. I might make 50 commits. All throughout my development, I'd like to keep a running track of how the test coverage is *for my code, bounded by a commit regex*. In other words, I'd like to use something like git blame, married with coverage, to give me feedback like "Hey Zim, the feature you're working on only has 52% coverage". Awesome-er still would be something like the class coverage pane, but using only lines I've changed. So I could have a window that shows the classes I've changed, and a summary of the coverage for the lines that I've changed, again bounded by a the jira ticket in my commit logs. This would be crazy to do in something other than a lightning fast DVCS like git or mercurial...but I have totally drunk the git cool aid. | 13 |
| 83 | CLOV-1190 | The <testsources> tag from <clover-setup> is not passed to groovyc | As in subject. As a consequence, the DefaultTestDetector is always used for Groovy code. *Fix:* Build proper TestDetector instance in GroovycSupport, which will be next serialized into InstrumentationConfig (instrumentation.ser file), so that next the Grover can deserialize it and pass to InstrumentingCodeVisitor. | 2 |
| 84 | CLOV-1192 | Create ClassInfo objects for anonymous inline classes | During implementation of CLOV-1162 I've found that anonymous inline classes does not have their own ClassInfo object crated. Instead of this, methods of inline class are added to the enclosing class. For instance, a following code: {code:java} public class AggregatedMetrics { /** * Inner class, case with a method having an inline anonymous class * statements = 3 (sum of direct methods' statements) * aggregatedStatements = 5 (sum of direct methods' aggregated statements) */ class C { /** * Method: statements = 2; aggregatedStatements = 4 (method's statements + inline class aggregated statements) */ Iterator methodThree() { int d = 4; /** * Inline class: statements = aggregatedStatements = 2 (sum of its methods) */ return new InstrumentationSessionImplTestSample2() { /** statements = aggregatedStatements = 1 */ public boolean hasNext() { return false; } /** statements = aggregatedStatements = 1 */ public Object next() { return null; } /** statements = aggregatedStatements = 0 */ public void remove() { } }; } /** statements = aggregatedStatements = 1 */ void methodFour() { int e = 5; } } } {code} is stored in clover database in this way: {code:xml} <class name="AggregatedMetrics.C" qualifiedName="AggregatedMetrics.C"> <metrics statements="5" aggregatedStatements="5"/> <method name="hasNext() : boolean"> <metrics statements="1" aggregatedStatements="1"/> </method> <method name="next() : Object"> <metrics statements="1" aggregatedStatements="1"/> </method> <method name="remove() : void"> <metrics statements="0" aggregatedStatements="0"/> </method> <method name="methodThree() : Iterator"> <metrics statements="2" aggregatedStatements="2"/> </method> <method name="methodFour() : void"> <metrics statements="1" aggregatedStatements="1"/> </method> </class> {code} It means that on reports the AggregatedMetrics.C class is presented as having 5 methods, while it has 2 actually. It's not a bug. There was a design decision to not present anonymous classes in a report. Possible improvement: * create ClassInfo objects for anonymous classes * add option for reporting whether to show anonymous classes (like InstrumentationSessionImplTestSample2$1) or not | 5 |
| 85 | CLOV-1193 | as a developer I don't need to run Clover on JDK1.4 anymore | *Idea:* Sun Java 1.4 has: * end of public updates - Oct 2008 * end of Premier Support - Feb 2010 * end of Extended Support - Feb 2013 * see http://www.oracle.com/technetwork/java/eol-135779.html IBM Java 1.4: * is no longer Generally Available (GA) since Dec 2004; * its End Of Servcie (EOS) will expire on September 2013: * see https://www.ibm.com/developerworks/java/jdk/lifecycle/ According to various sources, most popular are Java6 and Java7; Java1.4 has a fraction of market right now: * http://www.statowl.com/java.php although the report above shows Java version in web browser. Production environment may be different (especially regarding IBM Java). *Benefits:* Dropping support for Java 1.4 would ease Clover development a lot, as we could: * directly use Java5 generics in code * replace raw collections (List, Map, Set etc) by typed collections (List<Foo> etc) in code * get rid of Retrotranslator (2x faster build ) * it opens a door to introduce generic-based libraries in Clover code (for example replace Apache Commons by Guava) *Tasks:* * update Supported-Platforms page * remove retrotranslator from build scripts * update bamboo / maven configurations * affects Clover, Clover-for-Maven2&3, Clover-for-Eclipse, Clover-for-IDEA (note that Clover-for-Grails already need JDK1.5 or above) *Out of scope:* * replacing existing raw collections by typed ones (like List -> List<Foo> ), introducing foreach loops etc ** this will be done gradually during daily development | 1 |
| 86 | CLOV-1195 | Groovy 2.x @CompileStatic annotation causes static methods to be ignored by Clover | Adding @CompileStatic to a tested Groovy class results in 0% coverage for static methods. e.g. {code} //All ok here class MyClass{ String sayHello(){ 'hello' //Full coverage shown by Clover } static String sayHelloAgain(){ 'hello again' //Full coverage shown by Clover } } //Same class with the annotation @CompileStatic class MyClass{ String sayHello(){ 'hello' //Full coverage shown by Clover } static String sayHelloAgain(){ 'hello again' //***No coverage shown by Clover*** } } {code} Can anyone confirm this? Thanks. | 8 |
| 87 | CLOV-1196 | Add testSources parameter for clover2:clover mojo | The Ant <clover-report/> task has an optional nested <sourcepath> parameter where user can specify an Ant path that Clover should use when looking for source files. Thanks to this, it is possible to generate report using sources from a different location (on a different machine, for instance). Such option is missing for Maven clover2:clover MOJO. The workaround which can be used is to create a custom report descriptor, as described on https://confluence.atlassian.com/display/CLOVER/Creating+custom+reports, which is not convenient actually. Fix: add <sourcepath> parameter for clover2:clover MOJO. | 1 |
| 88 | CLOV-1197 | Perform migration of CLMVN and CLMVNONE from studio.plugins.atlassian.com | The site studio.plugins.atlassian.com is deprecated. All new projects shall be migrated to bitbucket.org or eventually to ecosystem.atlassian.net. *Deadline:* * final deadline 5.03.2013 * it's recommended to finish it before 5.02.2013 *Scope:* -1) Migrate SVN repositories- * https://studio.plugins.atlassian.com/svn/CLMVN * https://studio.plugins.atlassian.com/svn/CLMVNONE -to Mercurial on Bitbucket- -2) Migrate Bamboo builds (if necessary) from- * https://studio.plugins.atlassian.com/builds/browse/CLMVN-TRUNK -Note: CLMVNONE has no builds configured- -to new Bamboo location.- -3) There is no need to migrate Wiki pages and Code reviews (practically empty).- -4) Migrate JIRA issues from- * https://studio.plugins.atlassian.com/browse/CLMVNONE * https://studio.plugins.atlassian.com/browse/CLMVN -to- * https://jira.atlassian.com/browse/CLOV -if this is feasible and set component "Maven 1 Plugin" and "Maven Plugin", respectively.- -Alternatively, create new issue trackers on Bitbucket or Ecosystem, copy all issues "as is" and set projects read-only with a message that issue tracking shall be done in JAC CLOV project.- -5) Update build scripts (Maven / Ant) and handle:- * -new repository type (tagging)- * -new way of deployment of binaries (optional)- -Update also BEAC builds.- | 3 |
| 89 | CLOV-1202 | Compile maven-clover2-plugin using JDK1.5 | Currently we have two executions of maven-compiler-plugin: * one with source/target=1.3 for src/main * one with source/target=1.5 for src/test Use source/target=1.5 for the whole module. | 1 |
| 90 | CLOV-1203 | Update Supported-Platforms page | On http://confluence.atlassian.com/display/CLOVER/Supported+Platforms: * set JRE/JDK = 1.5 or later * add footnote that support for JDK 1.5 has ended with 3.1.x | 1 |
| 91 | CLOV-1204 | Remove retrotranslator | Remove all retrotranslator stuff: * jar files (several extlib locations) * build.xml and upgrade.xml files * about boxes in Eclipse and IDEA * etc/rights license files | 1 |
| 92 | CLOV-1205 | CLMVNONE new property: maven.clover.instrumentationLevel | Moved from https://studio.plugins.atlassian.com/browse/CLMVNONE-14 This should only be set to 'method' if used in conjunction with Test Optimization if the default level (statement) is not performant enough. Valid values are "statement" and "method". | 1 |
| 93 | CLOV-1206 | CLMVNONE Use includes, instead of nested include to allow more than one pattern when merging | Moved from https://studio.plugins.atlassian.com/browse/CLMVNONE-9 For Maven1 plugin: It would be better to change the following code in the clover:merge goal from: {noformat} <ant:cloverDbSet dir="${_multiproject_basedir}"> <ant:include name="${maven.clover.merge.databases}"/> </ant:cloverDbSet> {noformat} to: {noformat} <ant:cloverDbSet dir="${_multiproject_basedir}" includes="${maven.clover.merge.databases}"/> {noformat} | 1 |
| 94 | CLOV-1207 | CLMVNONE Integrate Distributed coverage | Moved from https://studio.plugins.atlassian.com/browse/CLMVNONE-13 Integrate Distributed coverage with Clover-Maven1-Plugin | 3 |
| 95 | CLOV-1208 | Show warning if new update is out of scope of the current license | Case: * user has a valid license key with a certain end-of-maintenance date * new Clover version is released but the release date is later than maintenance end * IDEA / Eclipse gives user an ability to upgrade but * after upgrading user cannot use Clover anymore (!) Improvement: * check end-of-maintenance date from current license key, if it is < than release date of the upgrade we want to download, put additional warning about it the the upgrade dialog box | 1 |
| 96 | CLOV-1209 | Auto update version check reports new version when version strings are identical | Under File > Settings > IDE Settings: Clover > Auto Update, when you press "Check now" a window pops up saying: "New version available: 3.1.10.v20130108000000, you have 3.1.10.v20130108000000 Would you like to upgrade?" | 3 |
| 97 | CLOV-1227 | Add <profiles> element for <clover-setup> and <clover-instr> | Enhance Ant tasks by adding new sub-types and attributes: {code:xml} <clover-setup> <!-- the same for <clover-instr> --> <profiles> <!-- AntCloverProfiles with List<AntCloverProfile> --> <profile name="default" coverageRecorder="..."> <!-- copied as CloverProfile to InstrumentationProfileConfig --> </profile> <!-- more profiles possible, but we will handle "default" only right now --> </profiles> </clover-setup> {code} coverageRecorder * fixed - default value as now, fixed-size coverage recorder requiring presence of clover.db to read the size * growable - like for Android, no need to have clover.db * shared - for Grails app, not only with dynamic size, but also reusing the same instance of recorder if initstring is the same Parse it on Ant level, pass it to InstrumentationConfig and Instrumenter. | 2 |
| 98 | CLOV-1228 | Document <profiles> element on CAC | Write documentation for: * http://confluence.atlassian.com/display/CLOVER/clover-setup * http://confluence.atlassian.com/display/CLOVER/clover-instr * https://confluence.atlassian.com/display/CLOVER/Advanced+setup+configuration | 1 |
| 99 | CLOV-1229 | Add profiles for InstrumentationConfig | NULL | 1 |
| 100 | CLOV-1230 | Embed clover profile array in instrumented classes | Enhance existing instrumentation and embed an array of CloverProfile in instrumented sources/classes, pass this array to Clover.getRecorder(). Java: source based instrumentation RecorderInstrEmitter + Clover.getRecorder() - add static field for _CLR class of *CloverProfile[]* type Groovy: byte code instrumentation - instantiate new CloverProfile[] { new CloverProfile(), ... } array at getRecorder() call | 5 |
| 101 | CLOV-1231 | Use GrowableBitSet for PerTestRecorder.One | In PerTestRecorder.One - wrap 'coverage' and coverageShortcut into a helper class (x) set() method - if index is out of bounds then it shall resize 'coverage' BitSet and 'coverageShortcut' array (/) refactor PerTestRecorder.Any, None, One, Many to top-level classes (/) refactor ThreadVisibilityStrategy to top-level class (/) write unit tests for (/) ThreadVisibilityStrategy.SingleThreaded ThreadVisibilityStrategy.Synchronized ThreadVisibilityStrategy.Volatile | 3 |
| 102 | CLOV-1232 | Create GrowableBitSet class | extend CloverBitSet, add() method shall check index vs size() and call growToInclude(); make it thread-safe - check how antlr.collections.impl.BitSet.growToInclude() is implemented | 2 |
| 103 | CLOV-1235 | Dynamically select coverage recorder based on clover.profile | Clover.getRecorder(): Read -clover.profile system property and if securityexcetion or null then fallback to "default". If list of profiles is empty or given profile name was not found, fallback to fixed coverage recorder. Should read coverageRecorder value and instantiate proper recorder type Should fetch from cache using one of: recorderKey = initString + "" + dbVersion + "" + cfgbits; recorderKey = initString; Add debug log messages for actions taken. Prepare necessary tests for java and groovy (assert on log messages). | 2 |
| 104 | CLOV-1236 | Add 'clover.enabled' system property | If set to 'false' it should disable recording of the coverage data at runtime. | 1 |
| 105 | CLOV-1237 | as a developer I'd like not to deploy clover.jar to app server | *Embed clover-runtime.jar into created JAR/WAR/EAR* *Problem:* Instrumenting code by Clover is not enough, user has to manually add clover.jar to the runtime classpath. Otherwise it gets "ClassNotFoundException com_cenqua_clover/CoverageRecorder" error. There are over 6'000 views on answers.atlassian.com about this problem (it's #1 on the list) *Solution:* Create a possiblity to automatically or manually embed clover-runtime.jar into produced JAR/WAR/EAR artifacts. *Tasks:* 1) (/) Restructure Clover modules and find exact set of runtime classes, create clover-runtime.jar artifact out of it (will be published on Maven Central). Such subset was already found for Clover-for-Android, but it does not have classes for Distributed Coverage feature. See linked issue. 2) Create Ant task like <clover-embed-runtime-jar targetJar="my.jar"/> which will allow to manually put runtime classes into it. 3) Check if it would be possible to intercept all <jar/> calls as well and do it automatically. Add option to disable this automatic integration and/or to specify regular expression pattern which jars shall be enhanced. 4) Create Maven goal like clover2:embed-runtime-jar with <targetJar> property. 5) Check how to automatically embed Clover runtime classes. Possibilities: * extract clover-runtime.jar into target/classes or target/classes-clover * scan build reactor, intercept packaging tasks like maven-ear-plugin, maven-jar-plugin, maven-rar-plugin, maven-war-plugin, maven-assembly-plugin * modify maven project at runtime and add clover:clover-runtime dependency 6) Eclipse integration - we already have -Xbootclasspath for "Run with Clover as..." but it's not enough if user has web application for example. Extract clover-runtime.jar into project's build folder so that other packaging tools could automatically pick these classes. Add pre-build or post-clean event handler to make sure that these classes will be still present after rebuild. Add some option in Window > Preferences or Project > Properties for this. 7) IDEA integration - put these classes into out/production and out/test. Add option in File > Settings > Project Settings or File > Settings > IDE Settings for this. 8) Grails integration - t.b.d. | 40 |
| 106 | CLOV-1238 | Split clover-core into clover-runtime + clover-core | 1) Use class dependency analyzer. Check for classes loaded via reflections too!!! (/) _class dependency analyzer was also used to strip third party libraries from unused classes_ 2) Move runtime classes to clover-runtime module. (/) 3) -Rename packages to com.atlassian.clover.runtime.* but keep few core classes in com_atlassian_clover. Reason: Clover-for-Ant will still have single clover.jar probably and it will use FileInputStream(clover.jar) to dynamically extract classes form archive so we must be able to distinguish them.- (/) _cancelled; too many changes in referenced classes and runtime still "borrows" few classes from core_ 4) Enhance build script to publish this as com.atlassian.clover:clover-runtime artefact on Atlassian Central and Maven Central. (/) Note: - for backward compatibility clover-core shall still contain runtime classes and it's name will not change (com.atlassian.clover:clover) (/) - -we can add dependency to clover-runtime in pom.xml, however - just to keep programmers informed about this change- (/) _dependency not added as clover-core already bundles the clover-runtime_ 5) Update documentation on CAC and inform that new, small artifact is available since version 4.0.x. (/) _done_ 6) Update UML in clover-maven-module-structure.graphml (/) _done_ 7) Test it with Clover-for-Android (original clover-core exceeds method limit in Dalvik image) (/) _couldn't test as Android Studio uses Gradle now and is based on IDEA not Eclipse_ | 5 |
| 107 | CLOV-1239 | Create <clover-embed-runtime> task | Create Ant task: {noformat} <clover-embed-runtime targetFile="jar/war/ear file"/> {noformat} which will put all Clover's runtime classes into targetFile. Unzip all com_cenqua_clover.* and com.atlassian.clover.runtime.* classes from clover.jar archive which is currently on a classpath (we've got a trick how to find it - see searching for clover.license) into a temporary directory and next put them into jar (use Ant <jar/> task for this or handle zip directly). | 3 |
| 108 | CLOV-1240 | Create clover2:embed-runtime-jar goal | Create MOJO for: {noformat} clover2:embed-runtime-jar {noformat} which will read the <targetJar> property and do the same what Ant task does. Difference: we might use maven-assembly-plugin and download clover-runtime artifact for this. | 3 |
| 109 | CLOV-1241 | Maven extracts clover-runtime into target/classes or target/classes-clover | Automatic integration for unknown plug-ins: extract clover-runtime artifact into current build folder (target/classes for clover2:setup and target/classes-clover for clover2:instrument). Thanks to this these runtime classes might be automatically picked up and packaged. Check if there is any Maven's build property holding list of classes which have to be updated. Add configuration option for this, like: {noformat} extractCloverRuntimeIntoTargetClasses=true {noformat} | 3 |
| 110 | CLOV-1242 | Maven: intercept maven-jar-plugin and add clover-runtime | Check if it would be possible to define some Maven property for maven-jar-plugin which would allow to define directory or list of files to be added to the archive. If yes, then extract clover-runtime into e.g. target/clover/runtime (note: it shall not interfere with CLOV-1241 somehow) and pass it to maven-jar-plugin. | 5 |
| 111 | CLOV-1243 | Maven: intercept maven-ear-plugin and add clover-runtime | The same as CLOV-1242 but for maven-ear-plugin | 3 |
| 112 | CLOV-1244 | Maven: intercept maven-rar-plugin and add clover-runtime | The same as CLOV-1242 but for maven-rar-plugin | 3 |
| 113 | CLOV-1245 | Maven: intercept maven-war-plugin and add clover-runtime | The same as CLOV-1242 but for maven-war-plugin | 3 |
| 114 | CLOV-1246 | Maven: intercept maven-cargo-plugin and add clover-runtime dependency | The maven-cargo-plugin is the most popular plugin for running in-container tests. Add <dependency> for clover-runtime there. Add configuration option to have a possibility to disable this. | 5 |
| 115 | CLOV-1247 | Eclipse: extract clover-runtime classes into build directory | Extract clover-runtime.jar into project's build folder so that other packaging tools could automatically pick these classes. Add pre-build or post-clean event handler to make sure that these classes will be still present after rebuild. Add some option in Window > Preferences or Project > Properties for this. | 5 |
| 116 | CLOV-1248 | IDEA: extract clover-runtime classes into build directories | IDEA integration - put these classes into: * out/production and * out/test. Add option in File > Settings > Project Settings or File > Settings > IDE Settings for this. | 5 |
| 117 | CLOV-1249 | Grails: extract clover-runtime into build directory | Usually it's here: <home>\.grails\X.Y.Z\projects\<project_name>\classes | 8 |
| 118 | CLOV-1250 | Prepare integration tests for GrowableCoverageRecorder | Integration tests like: * GrowableCoverageRecorder on a large code base * GrowableCoverageRecorder with different strategies ** PerTestRecorder.One / Many / None ** ThreadVisibilityStrategy.SingleThreaded / Volatile / Synchronized => especially check if/how per-test code coverage is affected by multithreaded tests of multithreaded application * GrowableCoverageRecorder with DistributedCoverage | 5 |
| 119 | CLOV-1251 | Prepare integration tests for SharedCoverageRecorder | Integration tests like (all with partial global and per-test coverage): * SharedCoverageRecorder with single InstrumentationSession and many classes * SharedCoverageRecorder with multiple InstrumentationSessions, classes from sessions running together * SharedCoverageRecorder with multiple clover databases (different initstrings) * SharedCoverageRecorder with the same class compiled multiple times, different versions are running with coverage measurement, | 5 |
| 120 | CLOV-1253 | Some of per-test recording strategies do not work for multi-threaded applications | *Introduction* We've got five per-test recording strategies: * Diffing - clover.pertest.coverage=diff * Null - clover.pertest.coverage=off * SingleThreaded - clover.pertest.coverage=<empty> and clover.pertestcoverage.threading=<empty> - DEFAULT POLICY * Synchronized clover.pertest.coverage=<empty> and clover.pertestcoverage.threading=synchronized * Volatile - clover.pertest.coverage=<empty> and clover.pertestcoverage.threading=volatile *Current status* 1) A SingleThreaded does not work with multi-threaded apps. Of course it's designed for single thread only. But at least it should have a correct value of coverage for a test case from a current thread. Expected number of hit counts is between: {noformat} hits(current test) <= ... <= hits(curent test + all other concurrent tests) {noformat} but currently actualHits can be < than hits(current test) due to fact that CloverBitSet.set\(n\) is not thread-safe. 2) A Volatile strategy has a similar problem. CloverBitSet.set\(n\) is not thread safe. Starting/ending of test slices works fine. 3) A Synchronized is correct because we've got 'CloverBitSet.set\(n\)' wrapped in a synchronized block. Starting/ending of test slices works fine. 4) A Diffing needs more tests. *Possible fix* CloverBitSet could have two variants: * compact - store hits as bit mask in long[] array - set\(n\) is not thread-safe, can be used for report generation as it consumes less memory * exploded - store hits as boolean[] array - set\(n\) \{ arr[n] = true \} would be thread-safe, used for runtime recording; it consumes 8x more memory but on the other hand we usually don't have 10'000 tests running in parallel; number of parallel tests is ~ number of processor cores available | 5 |
| 121 | CLOV-1254 | Add Ant dependendency to com.cenqua.clover:clover maven artifact | Problem occurs in Gradle framework. When developer declares dependency to Clover artefact and tries to instrument project with Clover, it fails with a not-very-informative error: {noformat} [clover-setup] Detected groovyc compiler org.codehaus.groovy.ant.Groovyc [groovyc] Compiling 1 source file to ....... [groovyc] ERROR: Clover-for-Groovy encountered an error while loading config: {noformat} Debug logging reveals more information: {noformat} [groovyc] ERROR: Clover-for-Groovy encountered an error while loading config: Clover-for-Groovy encountered an error while loading config: : org/apache/tools/ant/BuildException [groovyc] java.lang.NoClassDefFoundError: org/apache/tools/ant/BuildException [groovyc] java.lang.Class.getDeclaredFields0(Native Method) [groovyc] java.lang.Class.privateGetDeclaredFields(Unknown Source) ... [groovyc] com.atlassian.clover.instr.java.InstrumentationConfig.loadFromStream(InstrumentationConfig.java:439) [groovyc] com.atlassian.clover.instr.groovy.Grover.newConfigFromResource(Grover.java:241) [groovyc] com.atlassian.clover.instr.groovy.Grover.<init>(Grover.java:210) {noformat} A reason is that normally this code is being called from Ant so the ant.jar is provided. In Gradle it's not available by default. Workaround: add ant.jar dependency in the project build file. | 4 |
| 122 | CLOV-1255 | Prepare code example for Grails | Prepare sample Grails project with domain classes, controllers and unit tests which will use the 'shared' coverage recorder. | 2 |
| 123 | CLOV-1257 | Add clover.coverageRecorder field for Clover-for-Grails plugin | *A follow-up of CLOV-1189:* Support the coverageRecorder natively in the plugin config. It would be nice to go back to using the simpler configuration instead of the setuptask/reporttask closures. Like: {noformat} clover { coverageRecorder: 'SHARED' } {noformat} *Implementation:* If coverageRecorder field is defined, then create a single profile named "default" with coverageRecorder as specified and undefined distributedCoverage. In case clover.setuptask is specified, then settings from this closure will override clover.coverageRecorder value. | 3 |
| 124 | CLOV-1258 | Upgrade third party libraries used by Clover | Upgrade third party libraries to their latest versions: * jebrains annotations 13.0 (/) * ASM 5.0 (/) we're using ASM 3.0, 4.1 and 5.0 actually (for different purposes) * commons-codec 1.9 (/) * commons-collections 3.2.1 (/) * commons-lang 2.6 (/) * guava 18.0 (/) * JCommon 1.0.23 (/) * JFreeChart 1.0.19 (/) * Log4J 1.2.17 (/) * Velocity 1.7 (/) | 8 |
| 125 | CLOV-1259 | Reduce friction in tutorial | Make Clover evaluation easier by simplifying the tutorial. The build.xml shall contain full Clover set-up so that just typing "ant" shall produce all reports. So swap build.xml <-> build_completed.xml, fix "test" target name, add default="clover.all" etc. Futhermore, Ant and Maven configuration in tutorial shall be unified - use 'target' directory for both of them. Get rid of clutter like 'clover', '.clover', 'build' directories. Update tutorial page on CAC. Consider adding groovy-all-1.7.0.jar into /lib directory so that user won't need to define GROOVY_HOME path. | 5 |
| 126 | CLOV-1260 | Add url for 'utils.js' home page | In Clover-for-Eclipse and Clover-for-IDEA "About" dialogs the Utils.js link does not open the library home page. | 2 |
| 127 | CLOV-1261 | PDF report with "include failed test coverage" option fails | Eclipse Install Clover-for-Eclipse, open tutorial project, select Run new report > PDF report > select "Include failed test coverage" > click Finish. PDF report generation fails with error log message: "The JVM report process failed with error code 1 - see log for details" !pdf_fail.png! Increasing heap size from 512M to 768M solved the problem. To do: check why such small project requires so much memory. Check also PDFReporter, Clover-for-IDEA. | 2 |
| 128 | CLOV-1262 | IDEA Darcula theme ignores <table border=0> | Clover's "About" dialog looks ugly when the "Darcula" theme is selected in IDEA 12. Despite having <table border="0"> in JEditorPane("text/html"), it shows table with a border. Example: !clover_about_idea12_themes.png! | 3 |
| 129 | CLOV-1263 | Race condition in IDEA during full rebuild and test execution | Clover-for-IDEA. Race condition during database cleanup and running unit tests at the same time. Steps to reproduce; 1. Open "Moneybags" tutorial project 2. Prepare 'run all unit tests' configuration 3. Click "Delete Coverage Database" button in the "Cloverage" view 4. Click "Rebuild now" in the prompt dialog 5. Quickly click "Run (Shift+F9)" Problem: Project is being rebuilt and clover.db is recreated, at the same time unit tests are compiled and also clover.db is being modified. There's a warning in console log like this: {noformat} WARN: CLOVER: Clover database: 'C:\Work\release\testing-sandbox\clover-ant-3.1.11\tutorial\.clover\coverage.db' is no longer valid. Min required size for currently loading class: 172, actual size: 96 WARN: CLOVER: Coverage data for some classes will not be gathered. Tests taking too long? Try Clover's test optimization. 2 test classes found in package '' {noformat} | 8 |
| 130 | CLOV-1264 | Performance problem with SHARED coverage recorder in Grails app | Follow up of CLOV-1189. {noformat} setuptask = { ant, binding, plugin -> ant.'clover-setup'(initstring: ".clover/common.db") { ant.fileset(dir: "grails-app", includes: "**/domain/**, **/controllers/**, **/jobs/**, **/services/**, **/taglib/**, **/utils/**") { } ant.fileset(dir: "src", includes: "**/*.groovy, **/*.java", excludes: "**/script@*.groovy, **/system/generator/**, **/system/database/generators/**, **/castor/**") { } ant.fileset(dir: "test", includes: "**/*.groovy") { } // ant.testsources(dir: "test", enabled: false) { } ant.profiles { ant.profile(name: "default", coverageRecorder: "SHARED") } } } {noformat} If I uncomment the testsources enabled:false line, it runs about as quickly as before. Normally our coverage run takes about 42 minutes. With the above configuration it's been running for about 3 hours and is about half finished. | 5 |
| 131 | CLOV-1265 | as a developer I'd like to track build events in IDEA12 external build | *Prepare empty plugin for external build.* analyze external build API, prepare a simple plugin which will log compilation progress (module name, file name being compiled) and send notifications about it to IDE; it should also notify about "compilation finished" event. | 5 |
| 132 | CLOV-1266 | Check how clover.db can be accessed from build server and IDE processes at once | probably there are two possible ways to interact with build server process and the IDEA IDE process: 1) build server performs (parallel) instrumentation in memory and at the end of the whole build writes or updates clover.db (it has write access); next it sends notification to IDE which refreshes views and editors; potential problems: deletion of database during build, locking files 2) build server performs (parallel) instrumentation sending information about code structure back to IDEA IDE, which manages the database and sends back indexes of elements; potential problems: high messaging overhead -> need to send at most one message per file -> need to introduce local offset constant per each file; | 13 |
| 133 | CLOV-1267 | Check how parallel instrumentation can be handled | External build supports parallel compilation. Modules are built in parallel, while files in a single module are compiled sequentially. Clover expects that at least a single file is instrumented sequentially (the FileInto getCoverageMask which returns bitmask based on index range), so that the clover database contains continuous range of indexes for code elements from a single file. It means that we need to synchronize per file. It should not be a problem that subsequent files in database are from different modules. possible solutions: 1) simple lock per whole file in some synchronized block; drawback: turns parallel build into single-threaded one. 2) batch operations, like first instrument whole file using relative indexes, next lock database and store information about whole file, database would return base offset value; still in sychronized block but locked for shorter amount of time; 3) change clover.db structure so that elements could be registered in any order; change FileInfo getCoverageMask function (and related); check for any data structures which needs to be made thread-safe; | 8 |
| 134 | CLOV-1268 | Implement clover.db sharing between build server and IDE processes | Based on analysis | 13 |
| 135 | CLOV-1269 | Implement parallel compilation handling | Based on analysis of CLOV-1267 | 13 |
| 136 | CLOV-1270 | Write sequential integration tests for build server | Prepare integration tests for external build feature. Test the scenario when 'parallel compilation' for 'external build' is disabled. Check if any helper test classes for it are available in IDEA code based. | 13 |
| 137 | CLOV-1271 | Test IDEA IDE - build server interaction | Exploratory tests in user interface. | 5 |
| 138 | CLOV-1273 | Reduce coverage requirements for groovy safe operator | Currently any usage of the groovy safe operator requires that that reference be tested with a null and non-null value. This adds significant overhead in the case where multiple calls are chained together with the safe operator. It would be more useful as a coverage measurement if the chain was treated as one call. Look at the following line as an example. def value = a.getB()?.getC()?.getD()?.getE() This line of code should require a test that sets value to null and a test that sets value to something non-null. It should not however require a test where B is null a test where c is null a test where d is null and a test where e is null to reach 100% conditional coverage. While I hope that lines that look like the above are not written very often, it still could happen, and having to write a bunch of tests to cover one line seems like a heavy burden. | 8 |
| 139 | CLOV-1279 | Document how to configure Clover + Bamboo with 'mvn deploy' goal on CAC | The problem is that if 'mvn deploy' is used with Clover, it will deploy instrumented JARs into repository. There's no documentation on confluence.atlassian.com in the BAMBOO space how such separation can be achieved. Create a page with a description like: If you use "Automatically integrate Clover into this build" option, then Bamboo will add clover2:setup + clover2:clover goals into every Maven task found in the Job (more details can be found here). It means that you shall not use "mvn deploy" together with automatic Clover integration. There are at least three ways to solve this problem: 1) Create a separate Plan (or Job) in which automatic Clover integration is enabled and the Maven 2.x task does not deploy artifacts ("mvn verify" is used for instance). So this plan would be used only for Clover reporting. Benefits: full Clover separation from the Plan (or Job) performing deployment Drawbacks: doubled Plan (or Job) or 2) Use manual Clover integration ("Clover is already integrated into this build") but run Clover in a parallel build lifecycle. It means that you'd have to configure Clover goals manually in the pom.xml and use the "clover2:instrument" instead of "clover2:setup". You could have then just one Maven task with "mvn clean deploy". Instrumented jars would have -clover.jar suffix. Benefits: build is executed only once Drawbacks: sometimes there might be problems with resolving correct ("cloverized") dependent artifacts for multi-module projects or deploying the instrumented war to test server or 3) Use manual Clover integration, but run Clover in a default build lifecycle. It means that you'd have to configure Maven task manually and use "clover2:setup" goal. Then you have to use two Maven tasks - one with "... clover2:setup test ..." and one with "deploy". This is an approach you have followed (according to screenshots I see in attached pdf). Benefits: no problems with artifact dependencies Drawbacks: two Maven tasks Recommendation: approach #3. Steps for approach #3: clean clover2:setup test clover2:aggregate clover2:clover b) define "Clover Report" artifact On the 'Artifacts' tab, click Create Definition and complete the form as follows: Name This should begin with with "Clover Report". Location This should point to the HTML report directory (e.g. target/site/clover) Copy Pattern Use **/*.* More details on https://confluence.atlassian.com/display/BAMBOO/Enabling+the+Clover+add-on#EnablingtheCloveradd-on-ManualCloverintegration | 1 |
| 140 | CLOV-1280 | Error when trying to Check for an Update | I just recently upgraded from IntelliJ IDEA 10.5.4 to 12.1.1 and now 12.1.2. I think my last update to Clover was BEFORE I updated IDEA versions. | 5 |
| 141 | CLOV-1281 | Improve message for NoSuchRegistryException | See https://confluence.atlassian.com/x/AIP3F A message "Clover registry file: <path/to/clover.db> does not exist." is too general and does not help developer to understand what the exact problem is. Find a more meaningful message. | 1 |
| 142 | CLOV-1285 | Write parallel integration tests for build server | Create IT for external build process with a parallel compilation enabled. | 13 |
| 143 | CLOV-1286 | as a developer I'd like to build projects using 'classic' build in IDEA12 | Make sure that new 'external build' feature support does not break the old build functionality when the compilation is performed in IDEA IDE process. It shall still use JavaSourceTransformingCompiler class, old Project structure, event handling etc. | 13 |
| 144 | CLOV-1287 | Code instrumentation using jps-builders | scope: * java code instrumentation * statement/method contexts * test detection | 20 |
| 145 | CLOV-1288 | Implement communication between IDEA IDE and JPS builder | * notifications about build events, progress, error handling * model refreshes | 13 |
| 146 | CLOV-1289 | Support custom metrics in PDF report | Currently the PDF report does not handle <columns> element so it's not possible to have a custom set of metrics in the summary. | 5 |
| 147 | CLOV-1291 | PDF report with class-level and method-level summary | The PDF report contains package-level coverage table. Add an option for: * <clover-report> Ant task * clover2:clover mojo * 'generate report' button in Eclipse * 'generate report' button in IDEA which would allow user to select report detail level: * package (default) * class * method for PDF file format. | 8 |
| 148 | CLOV-1292 | Check how parallel instrumentation sessions can be handled | External build will start/close single instrumentation session in which modules will be compiled in parallel (see CLOV-1267). However, a parallel build in ant/maven might involve starting multiple instrumentation sessions at once (just think about <parallel> + <javac> in Ant for instance). Check how we could deal with this. Possible problems: * clover.db file locking (appending instrumentation session) Areas for prototyping: * clover db shared in memory * clover db structure change - adding top-level index for sessions/files/classes etc, possibility to interleave data from several instrumentation sessions * etc ... | 13 |
| 149 | CLOV-1294 | Implement Clover data serialization from IDE to JPS | The following data must be serialized and passed to JPS builder: * global configuration - other.xml (license key, sid, install date) * project settings - <project>.ipr (flush policy, initstring etc ...) * module settings - <module>.iml (exluding entire module from instrumentation) * idea test detector (default test detector + all test source folders) * state of some buttons in UI (FeatureManager) (e.g. 'toggle build with clover') | 20 |
| 150 | CLOV-1295 | Prepare documentation on CAC and AAC | On Clover-for-IDEA pages: * screenshot with "Compiler" settings page from IDEA ** external build can be enabled ** incremental build shall be disabled (recommended) ** parallel build must be disabled (refer to future story) On supported platforms page: * info that IDEA12.0-12.1 + Clover 3.1.8-3.1.11 must have 'external build' disabled Release notes about this new nice feature Update quiestion on AAC | 3 |
| 151 | CLOV-1297 | HTML report shows only one test result per file if external XML JUnit files are used | In the <clover-report> we can define <testresults> element which causes that test results are being read from JUnit-compatible XML files, instead of from Clover's coverage recording files. This works as long as the test name can be mapped to the method name (which is usually the case). However, in case of the Spock framework, test cases are named using a free text like: {noformat} def "check if this test does xyz" {noformat} which is later translated to a method named like: {noformat} $spock_feature_0_0 {noformat} As a consequence Clover is not able to match test name to the method name (in order to link to sources). It uses an empty test id to store the test result (SLICE_ID = -1). If there are more than one non-matched method in the same XML file, all get the same ID=-1, thus overwriting each other in hashmap. As a consequence only one is listed. *Fix:* Generate a unique test id using the test name - a String.hashCode() for instance. | 5 |
| 152 | CLOV-1298 | Contributed and unique coverage are equal | Possible bug. Investigate why these values are identical for MoneyBags tutorial. !unique_and_contributed_coverage.png! | 3 |
| 153 | CLOV-1299 | Find workaround or fix for IDEA-108852 | See http://youtrack.jetbrains.com/issue/IDEA-108852 | 8 |
| 154 | CLOV-1301 | Add more values for a 'threads' drop-down in report dialog | The 'Generate Report' dialog has max 4 threads: !report_generation_threads.png! In age of multi-core multi-threaded processors, we shall have it up to 16 at least. | 2 |
| 155 | CLOV-1302 | The 'include line info' toggle works in the opposite way | This toggle !include_line_info.png! works exactly opposite: when selected, the XML report does NOT contain <line> tags; and vice versa. | 2 |
| 156 | CLOV-1303 | Exclusion icon decoration is not visible in IDEA | Affects IDEA versions 10.5.x-12.1.x (works under IDEA 9.0.x). The toggle 'Annotate icons on included/excluded files ...' does not work: !icon_decoration_do_not_work.png! | 5 |
| 157 | CLOV-1326 | Class loader fails on clover.jar package-info | Occurs in Bamboo, for instance. {noformat} 2013-07-15 12:16:10,250 ERROR [http-9087-Processor12] [[default]] Servlet.service() for servlet default threw exception java.lang.ClassFormatError: Illegal class name "com/google/common/collect/package-info" in class file com/google/common/collect/package-info at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631) at java.lang.ClassLoader.defineClass(ClassLoader.java:615) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1876) at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:889) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1353) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1232) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:249) at java.lang.Package.getPackageInfo(Package.java:352) at java.lang.Package.getAnnotation(Package.java:367) at org.codehaus.jackson.xc.JaxbAnnotationIntrospector.findAnnotation(JaxbAnnotationIntrospector.java:885) at org.codehaus.jackson.xc.JaxbAnnotationIntrospector.findAccessType(JaxbAnnotationIntrospector.java:265) at org.codehaus.jackson.xc.JaxbAnnotationIntrospector.findAutoDetectVisibility(JaxbAnnotationIntrospector.java:216) at org.codehaus.jackson.map.AnnotationIntrospector$Pair.findAutoDetectVisibility(AnnotationIntrospector.java:1018) {noformat} | 3 |
| 158 | CLOV-1328 | as a Clover developer I'd like to use the latest version of ANTLR | Clover uses ANTLR 2.x currently which is few light-years from the latest version, which is ANTLR 4.x. Upgrade to the latest ANTLR library version. * check ANTLR 4.x license (it's different from 2.x) whether we can actually use it; if not - try to use 3.x, if possible * check if there's any Java grammar (the best for Java 8) available for Antlr 4 * estimate whether it's better to use completely new grammar file and embed clover stuff there or to upgrade our existing grammar file from 2.x to 4.x ** watch out for our custom extensions like unicode escape sequence handling, annotations etc | 13 |
| 159 | CLOV-1333 | as a developer I'd like to instrument Java8 new language features | This is an enhancement of CLOV-1139. Clover should be able not only to parse Java8 syntax without error, but also be able to add it's own code statements in order to measure code coverage for: * lambda expressions * ??? Scope: * instrumentation (java.g file) Out of scope: * database format * reporting | 20 |
| 160 | CLOV-1335 | as a developer I'd like to generate reports with Java8 sources | New language features might require enhancements of existing reports. Evaluate how to represent lambdas - for instance: - as a separate entity in the report, like a class or a method - as an integral part of enclosing scope - similarly as the inline class is being handled by Clover Scope: * HTML, XML, JSON, PDF reports | 13 |
| 161 | CLOV-1336 | as a developer I'd like to have information about lambdas in the Clover database | 1) Evaluate how to represent Java8 lambdas - for instance: - as a separate entity in the model, like a class or a method - as an integral part of enclosing scope - similarly as the inline class is being handled by Clover 2) Design the DB format having in mind a future extensibility (like functions, functions-in-functions, global variables etc) for other JVM-based languages (like Scala or Closure) 3) Implement it. Scope: * database format Out of scope: * source code instrumentation | 20 |
| 162 | CLOV-1337 | as a developer I want be able to select 1.8 language level | The "1.8" language level shall be available for: * <clover-setup> <clover-instr> Ant tasks * clover2:setup clover2:instrument goal * project settings in Clover-for-Eclipse, Clover-for-IDEA Add such option, if necessary, write unit tests. | 3 |
| 163 | CLOV-1338 | Warn if directory selected on Test Classes tab is disabled on Source Files tab | On the "Project Properties > Clover > Source Files" tab user can select which source folders shall be instrumented by Clover. By de-selecting the checkbox, the whole source root becomes excluded from instrumentation: !source_files.png! On the "Test Classes" files user can select which source roots contain test sources: !test_classes.png! It it possible to have such combination that: * source root is excluded * source root is marked as a test root This can be misleading. Add appropriate warning for it. | 3 |
| 164 | CLOV-1339 | The <testmethod name=".*> does not match constructors | *Problem:* If you declare custom test detector, for instance: {code:xml} <clover-setup> <testsources dir="src/test/java"> <testclass name=".*"> <testmethod name=".*"/> </testclass> </testsources> </clover-setup> {code} Then the test detector does not match constructors. As a consequence, a class like this: {code:java} public class SomeException extends Exception { public SomeException(String s) { super(s); } } {code} will be treated as APPLICATION not as TEST code. *Background reason:* {code:java} public boolean isMethodMatch(SourceContext sourceContext, MethodContext methodContext) { final MethodSignature signature = methodContext.getSignature(); return methodMatches(signature.getName()) && methodAnnotationMatches(signature.getModifiers()) && methodReturnPatternMatches(signature.getReturnType()) && methodTagMatches(signature.getTags()); } public boolean methodReturnPatternMatches(String methodReturnType) { return methodReturnType != null && (methodReturnTypePattern == null || methodReturnTypePattern.matcher(methodReturnType).matches()); } {code} The methodReturnType==null for constructors, thus constructor do not match the pattern. *Solution:* We could rewrite check like this: {code:java} return methodReturnTypePattern == null || (methodReturnType != null && methodReturnTypePattern.matcher(methodReturnType).matches()); {code} However, this would require entirely new handling of code instrumentation for constructors. The reason is that code would be currently rewritten like: {code:java} public SomeException(String s) { __CLR3_1_12_100hjv4vvu6.R.globalSliceStart(getClass().getName(), 0); int $CLV_p$ = 0; java.lang.Throwable $CLV_t$ = null; try { __CLR3_1_12_162c4pt0(s); // <<< ORIGINAL CONSTRUCTOR $CLV_p$ = 1; } catch (java.lang.Throwable $CLV_t2$) { if ($CLV_p$ == 0 && $CLV_t$ == null) { $CLV_t$ = $CLV_t2$; } __CLR3_1_12_100hjv4vvu6.R.rethrow($CLV_t2$); } finally { __CLR3_1_12_100hjv4vvu6.R.globalSliceEnd(getClass().getName(), "SomeException.SomeException", 0, $CLV_p$, $CLV_t$); } } private __CLR3_1_12_162c4pt0(String s) { // << COMPILATION FAILURE, MISSING RETURN TYPE super(s); __CLR3_1_12_100hjv4vvu6.R.inc(1); __CLR3_1_12_100hjv4vvu6.R.inc(0); } {code} Problems: * call to super() must be first * we should not move constructor body into another method | 20 |
| 165 | CLOV-1341 | Implicit return in Groovy switch statement is instrumented incorrectly | *Problem:* Consider the following code: {code:java} def create(boolean b) { switch (b) { case true: new Integer(10) break case false: new String("abc") break } } {code} * switch statement is the last statement in function, so it's value is being returned from a function call * new Integer() / new String() are last statements before 'break' which is a function's exit point * thus 10 or "abc" are returned Clover instruments code as follows: {code:java} def create(boolean b) { recorder.inc(0); switch (b) { case true: recorder.inc(1); new Integer(10) recorder.inc(2); break case false: recorder.inc(3); new String("abc") recorder.inc(4); break } } {code} * as a consequence, the last statement before 'break' becomes recorder.inc(), which returns void; as a result the create() function returns null *Workaround:* Use return instead of break in a switch statement, e.g.: {code:java} case true: return new Integer(10) // no break {code} *Fix:* * do not add recorder.inc() before 'break'; drawback of the solution: we loose tracking of empty breaks, see below. {code:java} def foo(int i) { switch (i) { case 1: recorder.inc(1); println("one") /*recorder.inc(2); not added*/ break; case 2: case 3: /*recorder.inc(3); not added*/ break; } } foo(1) foo(2) {code} in the code above it would be nice to have "case2: case 3: recorder.inc(3); break;" colored in green, despite that code makes nothing ... | 5 |
| 166 | CLOV-1344 | Added LICENSES.html file to Clover artfiacts | Add the LICENSES.html file containing a table with: * name of third party library * link to home page (download sources / binaries) * link to the license file into the following artifacts: * Clover-for-Ant ZIP * Clover-for-Eclipse update site ZIP * Clover-for-IDEA plug-in JAR Note: * there's no need to add such file in the Clover-for-Grails and Clover-for-Maven2&3, because these plug-ins do not contain any third party libraries embedded in it (just references in pom.xml / BuildConfig.groovy) Reason for change: * ensuring that we obey requirements imposed by various open source licences | 3 |
| 167 | CLOV-1348 | review navigation links on a page summary | frames/no frames - deleted show help - exists on some of pages overview/package/file - moved to breadcrumbs on a page header todo: discuss with UX designer how breadcrumbs shall show the structure, e.g.: - shall we display report name and a project name only? - or some main section? - or the entire path - if so, shall we have: Report > Project > Test/App/Clouds > Package > FIle/Class > (Test) or something else? | 2 |
| 168 | CLOV-1350 | Add ADG navigation bar in the HTML report | * probably should be optional, because we embed reports in Bamboo -> how to handle this? all links from navigation bar shall be available somewhere else? * what to put in the nav bar? we don't have 'create issue' button for sure ;-) | 1 |
| 169 | CLOV-1352 | Create code samples with java8 syntax | annontations on java types repeating annotations lambdas virtual extension methods | 13 |
| 170 | CLOV-1353 | Prepare unit tests compiling and instrumenting code samples | test: compile code samples from CLOV-1352 using JDK1.8 javac instrument these code samples using Clover expected: no instrumentation of lambdas yet, just test if files are parsed correctly | 13 |
| 171 | CLOV-1354 | Set up a Bamboo build for JDK1.8 | run all clover tests, including tests of java8 syntax on JDK1.8 on Bamboo | 3 |
| 172 | CLOV-1355 | Add new grammar rules for java8 syntax | just to correctly parse new syntax, do not add clover instrumentation to these new code constructs something like: lambda : ( lambdaNoArgs | lambdaImplicitTypesArgs | lambdaExplicitTypesArgs ) '->' ( lambdaExpressionLikeStatement | lambdaCodeBlock ) plus extend the method definition and add 'default' keyword as optional; probably won't need to distinguish between method declaration in interface and in a class | 3 |
| 173 | CLOV-1357 | as an administrator I need to monitor Clover usage on machines | As a system administrator I need to have a way to track down usage of Clover licenses within my organization in order to make sure that Clover is not installed or used on more machines than the license allows to. Currently there is no tool for this purpose and the only indirect way is to scan for clover license files. One of possible solutions: * add the environment variable which will enable tracking of clover license usage, such variable could be set on all machines in users' profiles by system administrator * the variable would point to the URL which will collect data about license usage, e.g.: {noformat} -Dclover.license.usage.url=http://path.to.web.server/clover.php?someoptions {noformat} * whenever code instrumentation or report generation is performed and the environment variable is defined, clover will connect to the specified URL using simple HTTP GET request * it would be up to the system administrator to collect data from such HTTP GET requests (e.g. parsing apache logs, using some php script to store data in database ...) * options of HTTP GET {noformat} ?LicenseID=ABCDEF&LicenseExpiryDate=YYYY-MM-DD&MaintenanceExpiryDate=YYYY-MM-DD&Organisation=CompanyName&NumberOfUsers=NN&LicenseTypeName=DESKTOP_OR_SERVER {noformat} Scope: clover core (would work in ant, maven, grails, eclipse, idea ...) | 13 |
| 174 | CLOV-1358 | Enhance Clover database to keep full instrumentation history | *Problem:* Currently Clover database keeps list of instrumentation sessions plus information about classes which is a sum of all previous instrumentation sessions in such way that for given class only the latest class version is stored. There are two limitations of current design: 1) Test optimization might not work correctly for some test frameworks for Groovy language. This is due to nature of the Groovy language itself, where compiler allows to compile code which does not have all symbols resolved (they're being resolved at runtime). As a consequence if a dependent application class is changed, this does not to have trigger recompilation of the test class. See comment for more details. 2) Syntax highlighting in HTML report is always based on the latest class version, so if someone has older source file, it can be rendered incorrectly. There's a warning for this in HTML report, but we could fetch the actual line/char indexes from the older class version. *Solution:* 1) Enhance UpdateableRegFile and keep all versions of classes. This should be optional and disabled by default. 2) Enhance RegFile API to allow querying for older versions of given file (by default it should always return the latest version). 3) Add new option for <clover-setup> and <clover-instr> to allow to keep full instrumentation history. Either as "true/false" or as a number (maximum number of versions of the single class to store). 4) Add API to calculate index bitset as a logical OR of bitsets from all versions of the given file or class. | 40 |
| 175 | CLOV-1359 | Fix test optimization and check all class versions | Depends on CLOV-1358 Test optimization should scan for hit count indexes of all versions of given class. This is necessary in order to workaround the problem of the groovyc compiler which resolves some of symbols at runtime and thus it does not always recompile test class if application class is not changed. | 13 |
| 176 | CLOV-1360 | Analyse how tests are converted by Spock | Analyse how a test named like: {noformat} def "my test name" {noformat} is converted to a method like: {noformat} $spock_feature_1_0 {noformat} It's being done during AST transformation I guess. Check how it's possible to either: * reverse engineer this behaviour i.e. get a back-ward mapping $spock_feature_1_0 -> def "my test name" or * reproduce this behaviour, i.e. instrument methods in such order/way that Clover could 'calculate' the same method name | 13 |
| 177 | CLOV-1361 | Implement test name to method name mapping in Clover | Based on the investigation results from CLOV-1360 write proper mapping in Clover so that we could keep original names of test cases in Clover database (like "my test name" instead of $spock_feature_1). And these tests should properly "link" to appropriate sections in source code - for instance in order to allow navigation in HTML report from test result to the test class source code. | 13 |
| 178 | CLOV-1362 | Add Spock test name patterns in default test detector | Clover's default test detector should properly recognize Spock-framework test classes and which methods are test ones and which are helper ones. We shall not see stuff like this in the test summary: {noformat} Tests Started Status Time (secs) Message OpsWiseJobQueryTestSpec. 12 mar 10:32:50 PASS 0 // BAD OpsWiseJobQueryTestSpec.$spock_feature_1_0 12 mar 10:32:49 PASS 0,001 // OK, but use original name OpsWiseJobQueryTestSpec. 12 mar 10:32:49 PASS 0 // BAD OpsWiseJobQueryTestSpec.setup 12 mar 10:32:49 PASS 0,009 // BAD {noformat} | 8 |
| 179 | CLOV-1363 | Ensure that reports show the test name and not the method name | Make sure that HTML, XML, PDF, JSON reports will display the test name (like "my test name" taken from def) rather than the actual name of test method (like $spock_feature). | 8 |
| 180 | CLOV-1369 | as a developer I don't need to run Clover on JDK1.5 anymore | *Idea:* Sun Java 1.5 has: * end of public updates - Oct 2009 * end of Premier Support - May 2011 * end of Extended Support - May 2015 * see http://www.oracle.com/technetwork/java/eol-135779.html IBM Java 1.5: * its End Of Servcie (EOS) will expire on September 2015 * see https://www.ibm.com/developerworks/java/jdk/lifecycle/ According to various sources, most popular are Java6 and Java7 with Java8 growing up; Java1.5 has a fraction of market right now: * http://www.statowl.com/java.php although the report above shows Java version in web browser. Production environment may be different (especially regarding IBM Java). *Benefits:* Dropping support for Java 1.5 would improve Clover development, as we could: * use @Override for interfaces * use newer version of Guava (we're on Guava 9 (!) due to required JDK1.5 binary compatibility) * have all Clover modules and plugins on the same JDK level ** Groovy/Grails require JDK6+ to compile and execute ** Clover-for-IDEA (IDEA12 JPS) requires JDK6+ to compile and execute ** rest is on JDK5 *Tasks:* * update Supported-Platforms page * update guava library (and all others which are compiled against jdk6) * update build scripts * affects Clover Core, Clover-for-Ant, Clover-for-Maven2&3, Clover-for-Eclipse, Clover-for-IDEA, Clover-for-Grails *Out of scope:* * adding Override annotations - this will be done gradually during daily development | 5 |
| 181 | CLOV-1375 | Extend API for loading and manipulate coverage files | Clover 3.2.0 published new interfaces describing a database model (com.atlassian.clover.api.registry). We need to reveal more Clover stuff via API in order to make it more usable by other developers. For example: * loading database and coverage files, handling instrumentation sessions * manipulating coverage files | 8 |
| 182 | CLOV-1376 | Change signature of getXyz() methods in HasXyz interfaces | Current signatures have <? extends X>, for example: {code:java} List<? extends MethodInfo> getMethods() {code} This works fine for Clover's internal data structures (as there are subclasses), but it's not usable by developers using this API. It should be possible to have an assignment like: {code:java} List<HasMetrics> methodMetrics = classInfo.getMethods() {code} Fix: change to <? super X>. Note: We may need to expose additional methods in interface. They could throw Exception("not implemented") or return nulls. | 5 |
| 183 | CLOV-1377 | Create interfaces and factory methods for loading Clover database | *Problem:* Database entities are already in c.a.c.api.registry package. However, in order to load the database you have to call an inner class, for example: {code:java} import com.atlassian.clover.CloverDatabase; // XXX internal class import com.atlassian.clover.CoverageDataSpec; // XXX internal class import com.atlassian.clover.api.registry.ProjectInfo; // ... CloverDatabase db = CloverDatabase.loadWithCoverage(args[0], new CoverageDataSpec()); ProjectInfo projectInfo = db.getRegistry().getProject(); {code} *Fix:* Create proper interfaces and a factory hiding the CoverageDataSpec and CloverDatabase. | 3 |
| 184 | CLOV-1378 | Create interfaces and some template class for handling instrumentation sessions | *Problem:* In order to update content of a database and store new instrumentation session a number of internal classes must be used, e.g.: {code:java} import com.atlassian.clover.context.ContextSet; import com.atlassian.clover.registry.Clover2Registry; import com.atlassian.clover.registry.FixedSourceRegion; import com.atlassian.clover.registry.entities.MethodSignature; import com.atlassian.clover.registry.entities.Modifier; import com.atlassian.clover.registry.entities.Modifiers; import com.atlassian.clover.registry.entities.Parameter; // ... registry = Clover2Registry.createOrLoad(dbFile, projectName); session = registry.startInstr(encoding) // ... session.enterMethod(new ContextSet(), new FixedSourceRegion(12, 1), methodSignature, false, false, 5, LanguageConstruct.Builtin.METHOD); {code} *Fix:* - move MethodSignature, Modifier, Modifiers, Parameter to API - create factory for FixedSourceRegion, ContextSet - enterMethod (and others) shall use ContextSet from API | 5 |
| 185 | CLOV-1379 | Create API for handling coverage recording files | *Problem:* Currently there's no API which would allow to create a global recording or a per-test recording file. Such API would be useful, e.g. for conversion of coverage data from other tools such as Cobertura or Emma. *Fix:* - publish global and per-test recording file format on CAC (including naming convention for files) - expose class for global coverage file (equivalent of FileBasedGlobalCoverageRecording) - expose class for per-test coverage file (equivalent of FileBasedPerTestRecording) | 8 |
| 186 | CLOV-1380 | Create API for handling optimization snapshot | *See:* * [Hacking Clover / Updating optimization snapshot file|https://confluence.atlassian.com/display/CLOVER/Updating+optimization+snapshot+file] * [src/it/optmized/snapshot-hacking|https://bitbucket.org/atlassian/maven-clover2-plugin] *Problem:* Internal classes are used to manipulate snapshot. {code:java} import com.atlassian.clover.registry.entities.TestCaseInfo; import com.atlassian.clover.optimization.Snapshot; // ... Snapshot snapshot = Snapshot.loadFrom(snapshotLocation); final Set<TestCaseInfo> allTestCaseInfos = db.getCoverageData().getTests(); for (TestCaseInfo tci : allTestCaseInfos) { ... } snapshot.store(); {code} *Fix:* Create proper interfaces/classes in c.a.c.api.optimization | 8 |
| 187 | CLOV-1381 | Add showInnerFunctions and showLambdaFunctions to clover2:setup | Command line tools and a <clover-report> Ant task have these options. Add: showInnerFunctions=false showLambdaFunctions=false to CloverReportMojo. Pass these values to a report descriptor. Define such values also in the default descriptor (clover-report.xml). | 1 |
| 188 | CLOV-1382 | Add lambda toggle to report wizards in Eclipse and IDEA | Add toggles for showInnerFunctions and showLambdaFunctions in report wizards in Eclipse and IDEA plugins. Toggles shall be visible for HTML and XML reports. Consider using a drop down "show lambda functions": - NONE (inner=false, lambda=false) - FIELDS ONLY (inner=false, lambda=true) - FIELDS AND METHODS (inner=true, lambda=true) | 2 |
| 189 | CLOV-1384 | Fully qualified java.lang is not used for system properties in Clover.getRecorder | Generated code: {code:java} R=com_cenqua_clover.Clover.getNullRecorder();_R=com_cenqua_clover.Clover.getNullRecorder();_R=com_cenqua_clover.Clover.getRecorder( "\u0063....\u0064\u0062", 1382598086449L,8589935092L,49,profiles, new String[]{"clover.distributed.coverage",null}); ^^^^^ java.lang. is missing {code} | 2 |
| 190 | CLOV-1385 | Perform Scala spike | This task is time-boxed to 5 days. Take a look at: * our Scala prototype * SCCT * Scoverage to learn how instrumentation could be implemented. Expected outcome: * knowledge how scalac works (compilation phases, AST structure, plugging into it) * detailed list of tasks required * task estimation * prioritisation | 5 |
| 191 | CLOV-1387 | Clover integration with Bamboo - enhancements | *THIS EPIC IS OPTIONAL* There is a number of open issues in Bamboo JIRA project related with a Clover plugin. Sorted by importance (in my opinion): * BAM-13564 (Remove the $\{buildKey\} from Clover plugin URLs) * BAM-12852 (Add Clover tab for Build Summary page) * BAM-13404 (Use BuildConfig's DSL to install Clover plugin) * BAM-13208 (Improve Automatic Clover integration for multi-module maven builds) * BAM-13610 (Facilitate Clover configuration for plans using automatic Clover integration) * BAM-13786 (Test Coverage History drops to zero on days with no tests) * BAM-12118 (Perform cleanup of clover_fs_rez* and grover*jar files) * BAM-13787 (Allow Clover test coverage history duration be customized for the graph) * BAM-11590 (Add job failure based on coverage threshold for Clover plugin) TODO: check which ones could be implemented for this release. | 40 |
| 192 | CLOV-1388 | as a developer I'd like to have Spock @Unroll annotation being recognized by Clover | The {noformat}@Unroll{noformat} annotation causes that a test name will be unrolled for every combination of test data. It means that we can have multiple tests having different name, which in fact are related with exactly the same test method, but ran with different input arguments. Examples (from http://docs.spockframework.org/en/latest/data_driven_testing.html): {code:java} // sequence index at the end @Unroll def "maximum of two numbers"() { ... } maximum of two numbers[0] PASSED maximum of two numbers[1] FAILED // variable substitution @Unroll def "maximum of #a and #b is #c"() { ... } maximum of 3 and 5 is 5 PASSED maximum of 7 and 0 is 7 FAILED {code} Problem for Clover: we don't know neither a number of tests nor their names during compilation. it would have to be deferred to runtime. => add some inner class for a test class which would monitoring the test name and somehow pass to the per-test coverage recorder? | 20 |
| 193 | CLOV-1389 | Instrumentation of a branch condition with a generic type leads to javac compilation error | *For a declaration like this:* {code:java} public <T> T getFeatureValue(); ... if (client.getFeatureValue()) { {code} the instrumented line gets instrumented like: {code:java} _CLR3_1_113f23f2hnz3nmqe.R.inc(5146);if ((((client.getFeatureValue())&&(CLR3_1_113f23f2hnz3nmqe.R.iget(5147)!=0|true))||(_CLR3_1_113f23f2hnz3nmqe.R.iget(5148)==0&false))) {{ {code} which leads to compilation error: {noformat} error: bad operand types for binary operator '&&' {noformat} *Reason:* Javac performs autoboxing of the if condition. However it cannot deal properly if the same generic value is used with && or || operators. It looks like if javac wraps the entire if condition, not a single element. Look at the example: {code:java} public class BranchCoverageWithAutoboxing { interface Data { public <T> T getValue(); } public boolean testGetValue(Data source) { if (source.getValue()) { // Implicit conversion to Boolean via autoboxing return true; } return false; } public boolean testGetValueWithBoolean(Data source) { if (source.getValue() && true) { // Error: Operator && cannot be applied to java.lang.Object, boolean return true; } return false; } public boolean testGetValueWithWrappedBoolean(Data source) { if (Boolean.valueOf(source.getValue().toString()) && true) { // Explicit conversion, compilation is successful return true; } return false; } } {code} *Workaround:* Don't rely on boolean autoboxing and change a generic type to Boolean. or Extract expression being autoboxed to a local variable and evaluate before "if". Use the variable in "if". {code:java} // original: if (source.getValue) // fixed: Boolean b = source.getValue(); if (b) {code} or surround problematic code block with "///CLOVER:OFF" and "///CLOVER:ON" inline comments (note that three slashes are used) | 13 |
| 194 | CLOV-1390 | clover intrumented testcode with PersitenceConstructor and parameters fails | If the integration tests running without clover instrumentation the test works fine, but with clover instrumentation the one test will fail. {code} org.springframework.data.mapping.model.MappingException: No property null found on entity class com.test.framework.Model.DataModel to bind constructor parameter to! org.springframework.data.mapping.model.PersistentEntityParameterValueProvider.getParameterValue(PersistentEntityParameterValueProvider.java:74) org.springframework.data.mapping.model.SpELExpressionParameterValueProvider.getParameterValue(SpELExpressionParameterValueProvider.java:63) org.springframework.data.convert.ReflectionEntityInstantiator.createInstance(ReflectionEntityInstantiator.java:71) org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:232) org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:212) org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:176) org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:172) org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:75) org.springframework.data.mongodb.core.MongoTemplate$ReadDbObjectCallback.doWith(MongoTemplate.java:1841) org.springframework.data.mongodb.core.MongoTemplate.executeFindOneInternal(MongoTemplate.java:1492) org.springframework.data.mongodb.core.MongoTemplate.doFindOne(MongoTemplate.java:1303) org.springframework.data.mongodb.core.MongoTemplate.findOne(MongoTemplate.java:475) org.springframework.data.mongodb.core.MongoTemplate.findOne(MongoTemplate.java:470) com.test.framework.DatabaseSpec.search User Query(DatabaseSpec.groovy:52) {code} its seem to be a problem with follow declaration {code} @PersistenceConstructor public DataModel(String username, String password) {code} | 1 |
| 195 | CLOV-1392 | as a code reviewer I'd like to see ADG fonts and colours in the HTML report | NULL | 40 |
| 196 | CLOV-1393 | review ADG page layout in the HTML report | review layouting of various components on the page and an interaction between them | 1 |
| 197 | CLOV-1395 | IDEA13 compatiblity issues | Compatiblity issues of Clover-for-IDEA with the latest IDEA13: 1) Attempt to load a license key from a file (About Clover box > License button > Load) fails with an error: {noformat} com.intellij.openapi.fileChooser.FileChooser.chooseFiles(Ljava/awt/Component;Lcom/intellij/openapi/fileChooser/FileChooserDescriptor;)[Lcom/intellij/openapi/vfs/VirtualFile;: com.intellij.openapi.fileChooser.FileChooser.chooseFiles(Ljava/awt/Component;Lcom/intellij/openapi/fileChooser/FileChooserDescriptor;)[Lcom/intellij/openapi/vfs/VirtualFile; java.lang.NoSuchMethodError: com.intellij.openapi.fileChooser.FileChooser.chooseFiles(Ljava/awt/Component;Lcom/intellij/openapi/fileChooser/FileChooserDescriptor;)[Lcom/intellij/openapi/vfs/VirtualFile; com.cenqua.clover.idea.config.LicenseConfigPanel.loadLicenseFile(LicenseConfigPanel.java:321) com.cenqua.clover.idea.config.LicenseConfigPanel.actionPerformed(LicenseConfigPanel.java:216) javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) java.awt.Component.processMouseEvent(Component.java:6505) javax.swing.JComponent.processMouseEvent(JComponent.java:3321) java.awt.Component.processEvent(Component.java:6270) java.awt.Container.processEvent(Container.java:2229) java.awt.Component.dispatchEventImpl(Component.java:4861) java.awt.Container.dispatchEventImpl(Container.java:2287) java.awt.Component.dispatchEvent(Component.java:4687) java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) java.awt.Container.dispatchEventImpl(Container.java:2273) java.awt.Window.dispatchEventImpl(Window.java:2719) java.awt.Component.dispatchEvent(Component.java:4687) java.awt.EventQueue.dispatchEventImpl(EventQueue.java:729) java.awt.EventQueue.access$200(EventQueue.java:103) java.awt.EventQueue$3.run(EventQueue.java:688) java.awt.EventQueue$3.run(EventQueue.java:686) java.security.AccessController.doPrivileged(Native Method) java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) java.awt.EventQueue$4.run(EventQueue.java:702) java.awt.EventQueue$4.run(EventQueue.java:700) java.security.AccessController.doPrivileged(Native Method) java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) java.awt.EventQueue.dispatchEvent(EventQueue.java:699) com.intellij.ide.IdeEventQueue.e(IdeEventQueue.java:696) com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:520) com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:335) java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:154) java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:182) java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:221) java.security.AccessController.doPrivileged(Native Method) java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:219) java.awt.Dialog.show(Dialog.java:1082) com.intellij.openapi.ui.impl.DialogWrapperPeerImpl$MyDialog.show(DialogWrapperPeerImpl.java:786) com.intellij.openapi.ui.impl.DialogWrapperPeerImpl.show(DialogWrapperPeerImpl.java:462) com.intellij.openapi.ui.DialogWrapper.showAndGetOk(DialogWrapper.java:1543) com.intellij.openapi.ui.DialogWrapper.show(DialogWrapper.java:1511) com.intellij.ide.actions.ShowSettingsUtilImpl.a(ShowSettingsUtilImpl.java:263) com.intellij.ide.actions.ShowSettingsUtilImpl.editConfigurable(ShowSettingsUtilImpl.java:228) com.intellij.ide.actions.ShowSettingsUtilImpl.editConfigurable(ShowSettingsUtilImpl.java:213) com.cenqua.clover.idea.AboutDialog$1.actionPerformed(AboutDialog.java:216) javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) java.awt.Component.processMouseEvent(Component.java:6505) javax.swing.JComponent.processMouseEvent(JComponent.java:3321) java.awt.Component.processEvent(Component.java:6270) java.awt.Container.processEvent(Container.java:2229) java.awt.Component.dispatchEventImpl(Component.java:4861) java.awt.Container.dispatchEventImpl(Container.java:2287) java.awt.Component.dispatchEvent(Component.java:4687) java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) java.awt.Container.dispatchEventImpl(Container.java:2273) java.awt.Window.dispatchEventImpl(Window.java:2719) java.awt.Component.dispatchEvent(Component.java:4687) java.awt.EventQueue.dispatchEventImpl(EventQueue.java:729) java.awt.EventQueue.access$200(EventQueue.java:103) java.awt.EventQueue$3.run(EventQueue.java:688) java.awt.EventQueue$3.run(EventQueue.java:686) java.security.AccessController.doPrivileged(Native Method) java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) java.awt.EventQueue$4.run(EventQueue.java:702) java.awt.EventQueue$4.run(EventQueue.java:700) java.security.AccessController.doPrivileged(Native Method) java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) java.awt.EventQueue.dispatchEvent(EventQueue.java:699) com.intellij.ide.IdeEventQueue.e(IdeEventQueue.java:696) com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:520) com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:335) java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:154) java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:182) java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:221) java.security.AccessController.doPrivileged(Native Method) java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:219) java.awt.Dialog.show(Dialog.java:1082) com.intellij.openapi.ui.impl.DialogWrapperPeerImpl$MyDialog.show(DialogWrapperPeerImpl.java:786) com.intellij.openapi.ui.impl.DialogWrapperPeerImpl.show(DialogWrapperPeerImpl.java:462) com.intellij.openapi.ui.DialogWrapper.showAndGetOk(DialogWrapper.java:1543) com.intellij.openapi.ui.DialogWrapper.show(DialogWrapper.java:1511) com.cenqua.clover.idea.actions.AboutAction.actionPerformed(AboutAction.java:19) com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAware(ActionUtil.java:162) com.intellij.openapi.actionSystem.impl.ActionButton.a(ActionButton.java:170) com.intellij.openapi.actionSystem.impl.ActionButton.a(ActionButton.java:133) com.intellij.openapi.actionSystem.impl.ActionButton.processMouseEvent(ActionButton.java:311) java.awt.Component.processEvent(Component.java:6270) java.awt.Container.processEvent(Container.java:2229) java.awt.Component.dispatchEventImpl(Component.java:4861) java.awt.Container.dispatchEventImpl(Container.java:2287) java.awt.Component.dispatchEvent(Component.java:4687) java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) java.awt.Container.dispatchEventImpl(Container.java:2273) java.awt.Window.dispatchEventImpl(Window.java:2719) java.awt.Component.dispatchEvent(Component.java:4687) java.awt.EventQueue.dispatchEventImpl(EventQueue.java:729) java.awt.EventQueue.access$200(EventQueue.java:103) java.awt.EventQueue$3.run(EventQueue.java:688) java.awt.EventQueue$3.run(EventQueue.java:686) java.security.AccessController.doPrivileged(Native Method) java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) java.awt.EventQueue$4.run(EventQueue.java:702) java.awt.EventQueue$4.run(EventQueue.java:700) java.security.AccessController.doPrivileged(Native Method) java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) java.awt.EventQueue.dispatchEvent(EventQueue.java:699) com.intellij.ide.IdeEventQueue.e(IdeEventQueue.java:696) com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:520) com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:335) java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) java.awt.EventDispatchThread.run(EventDispatchThread.java:91) {noformat} 2) Compilation of the project with Clover enabled fails with compilation error "package com_cenqua_clover" does not exist. The most probably Clover fails to add clover.jar to project's class path. {noformat} java: package com_cenqua_clover does not exist {noformat} 3) There is no option to enable/disable external build feature. It seems that the "classic" build functionality has been removed in IDEA13. | 13 |
| 198 | CLOV-1396 | "No such property: testTargetPatterns" exception with Grails 2.3 | Unable to use Clover-for-Grails with Grails 2.3. Build fails with an exception: {noformat} |Environment set to test ................................... [mkdir] Created dir: C:\Work\grails-clover-plugin-hg\testcases\petclinic233\target\test-reports\html . [mkdir] Created dir: C:\Work\grails-clover-plugin-hg\testcases\petclinic233\target\test-reports\plain .Error | Error executing script TestApp: No such property: testTargetPatterns for class: _Events groovy.lang.MissingPropertyException: No such property: testTargetPatterns for class: _Events at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:50) at org.codehaus.groovy.runtime.callsite.PogoGetPropertySite.getProperty(PogoGetPropertySite.java:49) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGroovyObjectGetProperty(AbstractCallSite.java:231) at _Events$_run_closure3.doCall(_Events.groovy:75) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90) at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233) at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1086) at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1110) at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:910) {noformat} *Reason:* In the Grails 2.3 the _GrailsTest.groovy has been refactored into GrailsProjectTestRunner and GrailsProjectTestCompiler. The testTargetPatterns property has been removed. *Probable fix:* Replace testTargetPattern by iterator over testNames. | 2 |
| 199 | CLOV-1397 | Java+Groovy compilation fails with Clover enabled in IntelliJ 12.1.x | When building my project in IntelliJ the build fails with the following exception. I saw a couple other similar comments about how using an external build can cause problems but I thought this was fixed with Clover 3.2? If I turn off the external build then the compilation does succeed. The project is a combined Java/Groovy project if that matters. Let me know if you need any more details. {noformat} Error: java.lang.IllegalArgumentException: org.jetbrains.jps.javac.TransformableJavaFileObject java.lang.RuntimeException: java.lang.IllegalArgumentException: org.jetbrains.jps.javac.TransformableJavaFileObject com.sun.tools.javac.main.Main.compile(Main.java:475) com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:132) org.jetbrains.jps.javac.JavacMain.compile(JavacMain.java:167) org.jetbrains.jps.incremental.java.JavaBuilder.compileJava(JavaBuilder.java:364) org.jetbrains.jps.incremental.java.JavaBuilder.compile(JavaBuilder.java:276) org.jetbrains.jps.incremental.java.JavaBuilder.doBuild(JavaBuilder.java:190) org.jetbrains.jps.incremental.java.JavaBuilder.build(JavaBuilder.java:162) org.jetbrains.jps.incremental.IncProjectBuilder.runModuleLevelBuilders(IncProjectBuilder.java:1018) org.jetbrains.jps.incremental.IncProjectBuilder.runBuildersForChunk(IncProjectBuilder.java:742) org.jetbrains.jps.incremental.IncProjectBuilder.buildTargetsChunk(IncProjectBuilder.java:790) org.jetbrains.jps.incremental.IncProjectBuilder.buildChunkIfAffected(IncProjectBuilder.java:705) org.jetbrains.jps.incremental.IncProjectBuilder.buildChunks(IncProjectBuilder.java:526) org.jetbrains.jps.incremental.IncProjectBuilder.runBuild(IncProjectBuilder.java:314) org.jetbrains.jps.incremental.IncProjectBuilder.build(IncProjectBuilder.java:179) org.jetbrains.jps.cmdline.BuildRunner.runBuild(BuildRunner.java:129) org.jetbrains.jps.cmdline.BuildSession.runBuild(BuildSession.java:220) org.jetbrains.jps.cmdline.BuildSession.run(BuildSession.java:112) org.jetbrains.jps.cmdline.BuildMain$MyMessageHandler$1.run(BuildMain.java:132) org.jetbrains.jps.service.impl.SharedThreadPoolImpl$1.run(SharedThreadPoolImpl.java:41) java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) java.util.concurrent.FutureTask.run(FutureTask.java:262) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) java.lang.Thread.run(Thread.java:744) Caused by: java.lang.IllegalArgumentException: org.jetbrains.jps.javac.TransformableJavaFileObject com.sun.tools.javac.file.JavacFileManager.inferBinaryName(JavacFileManager.java:660) javax.tools.ForwardingJavaFileManager.inferBinaryName(ForwardingJavaFileManager.java:84) com.sun.tools.javac.api.ClientCodeWrapper$WrappedJavaFileManager.inferBinaryName(ClientCodeWrapper.java:225) com.sun.tools.javac.jvm.ClassReader.fillIn(ClassReader.java:2524) com.sun.tools.javac.jvm.ClassReader.fillIn(ClassReader.java:2505) com.sun.tools.javac.jvm.ClassReader.complete(ClassReader.java:2143) com.sun.tools.javac.code.Symbol.complete(Symbol.java:421) com.sun.tools.javac.comp.Enter.visitTopLevel(Enter.java:298) com.sun.tools.javac.tree.JCTree$JCCompilationUnit.accept(JCTree.java:459) com.sun.tools.javac.comp.Enter.classEnter(Enter.java:258) com.sun.tools.javac.comp.Enter.classEnter(Enter.java:272) com.sun.tools.javac.comp.Enter.complete(Enter.java:484) com.sun.tools.javac.comp.Enter.main(Enter.java:469) com.sun.tools.javac.main.JavaCompiler.enterTrees(JavaCompiler.java:929) com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:824) com.sun.tools.javac.main.Main.compile(Main.java:439) ... 23 more {noformat} {panel:title=Problem summary|bgColor=yellow} This bug occurs when all of the following conditions are met: * IDEA 12.1.1 or later is used * Clover 3.1.12 or later is used * an "external build" feature is enabled (Settings > Compiler > Use external build) * project has a mixed Java + Groovy code It's an IDEA bug - http://youtrack.jetbrains.com/issue/IDEA-110835 - and has been fixed in IDEA13. Therefore: * in IDEA 12.x - disable the "external build" feature * in IDEA 13.x - problem does not occur {panel} | 13 |
| 200 | CLOV-1398 | Java 1.8 Exceptions not being propagated correctly | I have the following test stub (src/main/java) {code:java} public final class TestStub { TestStub() { throw new IllegalArgumentException(); } public static void getHandler() { new HashMap<>().computeIfAbsent(String.class, t -> new TestStub()); } } {code} And the following test (src/test/java) {code:java} public class FooTest { @Test(expected = IllegalArgumentException.class) public void test0() { TestStub.getHandler(); } } {code} Using maven It runs fine using "clean install" however using clover I get the following exception {noformat} java.lang.reflect.UndeclaredThrowableException com.sun.proxy.$Proxy12.apply(Unknown Source) java.util.HashMap.computeIfAbsent(HashMap.java:1118) org.cakeframework.internal.container.TestStub.getHandler(TestStub.java:26) org.cakeframework.internal.container.FooTest.test0(FooTest.java:29) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(Method.java:483) org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) org.junit.internal.runners.statements.ExpectException.evaluate(ExpectException.java:19) org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271) org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) org.junit.runners.ParentRunner.run(ParentRunner.java:309) org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264) org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153) org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124) org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200) org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153) org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103) Caused by: java.lang.reflect.InvocationTargetException sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(Method.java:483) org.cakeframework.internal.container.TestStub$__CLR3_2_0wqwqhpd53be5$1.invoke(TestStub.java:20) ... 28 more Caused by: java.lang.IllegalArgumentException org.cakeframework.internal.container.TestStub.<init>(TestStub.java:22) org.cakeframework.internal.container.TestStub.lambda$getHandler$6(TestStub.java:26) org.cakeframework.internal.container.TestStub$$Lambda$13/1227074340.apply(Unknown Source) ... 33 more {noformat} If I replace with a standard anonymous class implementing java.util.function.Function it runs fine | 3 |
| 201 | CLOV-1399 | Java 1.8 compilation fails when lambda is passed to a generic argument | The following piece of code fails to be instrumented {code:java} public class Fails<N> { public final <S extends N> Iterable<S> depthFirstTraversal(Class<S> type) { return (Iterable<S>) depthFirstTraversal(e -> type.isInstance(e)); } public final Iterable<N> depthFirstTraversal(Predicate<? super N> predicate) { return null; } } {code} Javac gives the following error message: [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project cake-util: Compilation failure: Compilation failure: [ERROR] /Users/kasperni/workspace/CAKE/cake-util/cake-util/target/clover/src-instrumented/org/cakeframework/internal/util/tree/Fails.java:[27,67] reference to depthFirstTraversal is ambiguous [ERROR] both method <S>depthFirstTraversal(java.lang.Class<S>) in org.cakeframework.internal.util.tree.Fails and method depthFirstTraversal(java.util.function.Predicate<? super N>) in org.cakeframework.internal.util.tree.Fails match [ERROR] /Users/kasperni/workspace/CAKE/cake-util/cake-util/target/clover/src-instrumented/org/cakeframework/internal/util/tree/Fails.java:[27,86] incompatible types: cannot infer type-variable(s) I,T [ERROR] (argument mismatch; java.lang.Class is not a functional interface) [ERROR] -> [Help 1] | 3 |
| 202 | CLOV-1401 | Clover fails to instrument generic type with a constructor reference | This works fine: {code:java} myLambda = ArrayList::new; // javac error since JDK8 b114 myLambda = ArrayList::<String>new; {code} But the following: {code:java} myLambda = ArrayList<String>::new; myLambda = ArrayList<String>::<String>new; {code} fails with a parser error: {noformat} ERROR: Instrumentation errorInstrumentation error : c:\Work\clover-hg\clover-core\src\test\resources\javasyntax1.8\LambdaAndMethodReferences.java:78:28:unexpected token: ArrayList com.atlassian.clover.api.CloverException: c:\Work\clover-hg\clover-core\src\test\resources\javasyntax1.8\LambdaAndMethodReferences.java:78:28:unexpected token: ArrayList com.atlassian.clover.instr.java.Instrumenter.instrument(Instrumenter.java:158) com.atlassian.clover.CloverInstr.execute(CloverInstr.java:73) com.atlassian.clover.CloverInstr.mainImpl(CloverInstr.java:49) com.atlassian.clover.JavaSyntaxCompilationTestBase.instrumentSourceFile(JavaSyntaxCompilationTestBase.java:145) com.atlassian.clover.JavaSyntaxCompilationTestBase.instrumentAndCompileSourceFile(JavaSyntaxCompilationTestBase.java:111) com.atlassian.clover.JavaSyntax18CompilationTest.testLambdaAndMethodReferences(JavaSyntax18CompilationTest.java:84) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(Method.java:483) junit.framework.TestCase.runTest(TestCase.java:168) junit.framework.TestCase.runBare(TestCase.java:134) junit.framework.TestResult$1.protect(TestResult.java:110) junit.framework.TestResult.runProtected(TestResult.java:128) junit.framework.TestResult.run(TestResult.java:113) junit.framework.TestCase.run(TestCase.java:124) junit.framework.TestSuite.runTest(TestSuite.java:243) junit.framework.TestSuite.run(TestSuite.java:238) org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:83) org.junit.runner.JUnitCore.run(JUnitCore.java:157) com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:77) com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:195) com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:63) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(Method.java:483) com.intellij.rt.execution.application.AppMain.main(AppMain.java:120) Caused by: line 78:28: unexpected token: ArrayList com.atlassian.clover.instr.java.JavaRecognizer.conditionalExpression(JavaRecognizer.java:4407) com.atlassian.clover.instr.java.JavaRecognizer.assignmentExpression(JavaRecognizer.java:4274) com.atlassian.clover.instr.java.JavaRecognizer.assignmentExpression(JavaRecognizer.java:4319) com.atlassian.clover.instr.java.JavaRecognizer.expression(JavaRecognizer.java:3366) com.atlassian.clover.instr.java.JavaRecognizer.statement(JavaRecognizer.java:2909) com.atlassian.clover.instr.java.JavaRecognizer.outerCompoundStmt(JavaRecognizer.java:2696) com.atlassian.clover.instr.java.JavaRecognizer.field(JavaRecognizer.java:2265) com.atlassian.clover.instr.java.JavaRecognizer.classBlock(JavaRecognizer.java:1728) com.atlassian.clover.instr.java.JavaRecognizer.classDefinition(JavaRecognizer.java:736) com.atlassian.clover.instr.java.JavaRecognizer.typeDefinition2(JavaRecognizer.java:666) com.atlassian.clover.instr.java.JavaRecognizer.typeDefinition(JavaRecognizer.java:524) com.atlassian.clover.instr.java.JavaRecognizer.compilationUnit(JavaRecognizer.java:445) com.atlassian.clover.instr.java.Instrumenter.instrument(Instrumenter.java:212) com.atlassian.clover.instr.java.Instrumenter.instrument(Instrumenter.java:121) ... 27 more {noformat} | 8 |
| 203 | CLOV-1403 | Cloverage view layout is crappy with the Coverage Summary panel | 1. Not all buttons are visible by default. 2. Width/height proportion which triggers a change between horizontal/vertical layout is not set correctly. As a result we've got a crappy behavior as on the following screen shot: !cloverage_view_layout.png! | 2 |
| 204 | CLOV-1404 | Source highlighting label is cropped in the settings dialog | Project Settings > Clover > View "Out of date" labels are cropped [^project_settings_clover.png] | 2 |
| 205 | CLOV-1406 | URISyntaxException from Clover IDEA plugin under IDEA13 on Mac OS X | {noformat} java.net.URISyntaxException: Illegal character in path at index 37: file:/Users/grant/Library/Application Support/IntelliJIdea13/clover-idea-3.2.1.jar: java.net.URISyntaxException: Illegal character in path at index 37: file:/Users/grant/Library/Application Support/IntelliJIdea13/clover-idea-3.2.1.jar java.lang.RuntimeException: java.net.URISyntaxException: Illegal character in path at index 37: file:/Users/grant/Library/Application Support/IntelliJIdea13/clover-idea-3.2.1.jar com.cenqua.clover.idea.LibrarySupport.getCloverClassBase(LibrarySupport.java:150) com.cenqua.clover.idea.build.CloverCompiler$RefreshCloverGlobalLibraryTask.execute(CloverCompiler.java:282) com.intellij.compiler.impl.CompileDriver.a(CompileDriver.java:2375) com.intellij.compiler.impl.CompileDriver.access$900(CompileDriver.java:122) com.intellij.compiler.impl.CompileDriver$8.run(CompileDriver.java:706) com.intellij.compiler.progress.CompilerTask.run(CompilerTask.java:167) com.intellij.openapi.progress.impl.ProgressManagerImpl$TaskRunnable.run(ProgressManagerImpl.java:464) com.intellij.openapi.progress.impl.ProgressManagerImpl$2.run(ProgressManagerImpl.java:178) com.intellij.openapi.progress.ProgressManager.executeProcessUnderProgress(ProgressManager.java:209) com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:212) com.intellij.openapi.progress.impl.ProgressManagerImpl.runProcess(ProgressManagerImpl.java:171) com.intellij.openapi.progress.impl.ProgressManagerImpl$8.run(ProgressManagerImpl.java:373) com.intellij.openapi.application.impl.ApplicationImpl$8.run(ApplicationImpl.java:436) java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439) java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) java.util.concurrent.FutureTask.run(FutureTask.java:138) java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) java.lang.Thread.run(Thread.java:695) com.intellij.openapi.application.impl.ApplicationImpl$1$1.run(ApplicationImpl.java:153) Caused by: java.net.URISyntaxException: Illegal character in path at index 37: file:/Users/grant/Library/Application Support/IntelliJIdea13/clover-idea-3.2.1.jar java.net.URI$Parser.fail(URI.java:2810) java.net.URI$Parser.checkChars(URI.java:2983) java.net.URI$Parser.parseHierarchical(URI.java:3067) java.net.URI$Parser.parse(URI.java:3015) java.net.URI.<init>(URI.java:577) com.cenqua.clover.idea.LibrarySupport.getCloverClassBase(LibrarySupport.java:121) ... 19 more java.net.URISyntaxException: Illegal character in path at index 37: file:/Users/grant/Library/Application Support/IntelliJIdea13/clover-idea-3.2.1.jar: java.net.URISyntaxException: Illegal character in path at index 37: file:/Users/grant/Library/Application Support/IntelliJIdea13/clover-idea-3.2.1.jar java.lang.RuntimeException: java.net.URISyntaxException: Illegal character in path at index 37: file:/Users/grant/Library/Application Support/IntelliJIdea13/clover-idea-3.2.1.jar com.cenqua.clover.idea.LibrarySupport.getCloverClassBase(LibrarySupport.java:150) {noformat} | 2 |
| 206 | CLOV-1408 | As a developer I'd like to see JUnit Parameterized tests in the report | Similarly to the Spock framework (CLOV-1256) I'd like to see runtime test names from the JUnit4 parameterized tests. Example: {code:java} import org.junit.*; import org.junit.runner.*; import org.junit.runners.*; import java.util.*; import static org.junit.Assert.*; import static org.junit.runners.Parameterized.*; @RunWith(Parameterized.class) public class FibonacciTest { @Parameters public static Collection<Object[]> data() { return Arrays.asList(new Object[][] { { 0, 0 }, { 1, 1 }, { 2, 1 }, { 3, 2 }, { 4, 3 }, { 5, 5 },{ 6, 8 } }); } private int fInput; private int fExpected; public FibonacciTest(int input, int expected) { fInput= input; fExpected= expected; } @Test public void test() { assertEquals(fExpected, Fibonacci.compute(fInput)); } } class Fibonacci { static int compute(int a) { return a; } } {code} | 5 |
| 207 | CLOV-1409 | Split velocity templates to 2 sets: adg and classic | make a copy of original templates extend HtmlReporter and add option to choose one of them, e.g.: HtmlReporter -style classic/adg ADG is the default one | 2 |
| 208 | CLOV-1410 | Add report style=adg/classic options for Ant, Maven, Grails | scope: ant, maven, grails plugins new toggle, default adg, pass to HtmlReporter | 2 |
| 209 | CLOV-1411 | Add radio button style=adg/classic in eclipse and idea IDEs | optional: add radio button in reports wizards alternatively: use the default one (ADG) | 1 |
| 210 | CLOV-1412 | Use ADG-compliant colour set for widgets | Replace existing colours by those recommended by ADG: * https://developer.atlassian.com/design/latest/colors.html Scope: (/) tree map (/) cloud view (/) coverage bars (dashboard, package/class/file summary) (/) test results bars (dashboard, test results pages) (/) coverage markers on the page margin (/) class coverage distribution / class complexity diagrams (use "Blue" from ADG) (/) colours of hyperlinks | 1 |
| 211 | CLOV-1413 | as a developer I expect that Clover will automatically configure IntelliJ IDEA compiler settings | Since IDEA12 a new external build feature has been introduced. It has also an option to perform parallel build (Settings > Compile > Build independent modules in parallel toggle), however Clover does not support parallel instrumentation (see CLOV-1284). Clover should automatically disable the parallel build toggle whenever compilation starts (it can notify about this fact by a baloon), otherwise it will throw various runtime exceptions during compilation. | 1 |
| 212 | CLOV-1415 | The clover2:clover goal does not pass the sourcepath property to underlying <clover-report> task | *Original problem from the cloned issue:* {quote} Clover database contains FileInfo objects for every source file. One of FileInfo fields is an absolute path to given file. When database is written, it uses current platform file separator for file name ('\' for windows, '/' for Linux/MacOS). However, when database is read it interprets file name using again current platform file separator. As a consequence, when database is generated on Windows and report generated on Linux, it cannot resolve file name properly - it takes whole path as a single path segment, resulting in paths like: /path/from/report/generation/sourcepath/D:/path/from/instrumented/build/file.java As a consequence report generation does create html file containing source code with highlighted coverage. {quote} *Problem with the clover2:clover goal:* The clover2:clover call <clover-report> using a default report descriptor (which is located in the maven-clover2-plugin-X.X.X.jar/default-clover-report.xml). This report descriptor has a reporting defined like: {code:xml} <current outfile="${output}" summary="${summary}" charset="${charset}" title="${title}" titleAnchor="${titleAnchor}" span="${span}" alwaysReport="${alwaysReport}" showInnerFunctions="${showInnerFunctions}" showLambdaFunctions="${showLambdaFunctions}"> <format refid="clover.format"/> <testsources refid="test.sources"/> <columns refid="clover.columns"/> </current> {code} i.e. there is no <sourcepath> property. Possible fix #1: * add the <sourcepath> property * set it's value to a list of standard source roots, similarly as it's done for <testsources> tag _excerpt from the CloverReportMojo:_ {code:java} antProject.setProperty("testPattern", "**/src/test/**"); {code} _excerpt from the default-clover-report.xml:_ {code:xml} <fileset id="test.sources" dir="${projectDir}"> <include name="${testPattern}"/> </fileset> ... <testsources refid="test.sources"/> {code} so it could be like this: {code:java} antProject.setProperty("sourceRootsPattern", "**/src/test/*;**/src/main/*"); ... {code} (!) potential problem: build may have source roots different than src/test/xxx and src/main/xxx; in such case sources would not be found; it means that settings this <sourcepath> property should be optional; it could be done via boolean flag Possible fix #2: * add the <sourcepath> property to the clover2:clover goal * if it's not null then pass it's value to the <sourcepath> property in the <clover-report> goal in the report descriptor (!) potential problem: how developers could easily find all source roots in all modules in their maven project in order to pass it as the property? | 2 |
| 213 | CLOV-1419 | change project/package statistics to the boxed component | Change this: !package_summary.png! Move it under a horizontal navigation (on overview tab for instance). Keep it as a boxed component (div grid). | 2 |
| 214 | CLOV-1420 | change package and class list tables into TablesSortable | Change this (project summary, package summary): !package_and_class_list.png! into a sortable table like this: https://docs.atlassian.com/aui/latest/sandbox/# | 2 |
| 215 | CLOV-1423 | change contributing tests table to TablesSortable etc | Change a table with contributing tests: !contributing_tests.png! To do: * table into TableSortable * "Show/hide tests" label into expander * "Select all/deselect all" labels into single master toggle * remember about highlighting of lines of code and class' methods in a table | 5 |
| 216 | CLOV-1424 | change small class histogram into container | similarly as for coverage statistics put into a box: https://developer.atlassian.com/design/1.2/containers.html this: !small_histogram.png! | 1 |
| 217 | CLOV-1425 | change dashboard boxes look | This: [^dashboard_boxes.png] should look like this: https://developer.atlassian.com/design/1.2/containers.html | 1 |
| 218 | CLOV-1426 | change page footer look | This: [^page_footer.png] should look like this: https://developer.atlassian.com/design/1.2/page-footer.html | 1 |
| 219 | CLOV-1427 | change cloud tabs | The "Package risks" and "Quick Wins" tabs: !cloud_tabs.png! should have an ADG tabs look: https://developer.atlassian.com/design/1.2/tabs.html | 1 |
| 220 | CLOV-1428 | change classes/tests/results bottom left frame | Change this: !classes_tests_results.png! Scope: * add a title: https://developer.atlassian.com/design/1.2/typography.html * use tabs: https://developer.atlassian.com/design/1.2/tabs.html * use sortable table: https://developer.atlassian.com/design/1.2/tables.html | 2 |
| 221 | CLOV-1429 | chage test result labels to lozenges | "pass" / "fail" / "error" test statuses shall be changed to Subtle lozenges: https://developer.atlassian.com/design/1.2/lozenges.html | 1 |
| 222 | CLOV-1431 | JDK8 sources fail to compile when instrumented by Clover | See the attached comparison of original and instrumented code: [^unicode_decoding_error.png] A problem is as follows: * Clover has a UnicodeDecodingReader class which translates 6-letter character sequences "\uNNNN" into a single UTF16 character * this is used to correctly tokenize code identifiers (IDENT) written in non-ascii characters (a variable with German umlaut for instance) In this specific example, some "\uNNNN" sequences were translated inside comments, and some characters were "swallowed". So for instance a fragment: {noformat} {@code \u} {noformat} ends with "java: illegal unicode escape". Related issues: * CLOV-1305 - syntax highlighting problem * CLOV-1131 - Eclipse/IDEA editors get out of sync | 3 |
| 223 | CLOV-1432 | Integration tests are not being instrumented in Grails 2.3 | Clover does not instrument integration tests in Grails 2.3. Caused by: * new GrailsIntegrationTestCompiler wrapper introduced in Grails 2.3.0 is not being recognized by Clover as a Groovy compiler * GrailsTestRunner calls Groovy compiler internally and this compiler does not have grover.jar on a classpath, thus Clover AST transformer is not called Todo: * check how to recognize/pass inclusion/exclusion patterns to the internal compiler of GrailsTestRunner Workaround: * not available | 3 |
| 224 | CLOV-1434 | Transitive dependency resolution fails in Grails 2.3 during installation of the Clover plugin | Since Grails 2.3 sth has changed in the dependency resolution mechanism. As a consequence, when the Clover plugin is being installed for a first time, the transitive dependency to com.cenqua.clover:clover is not resolved and this jar is not available on class path. As a consequence build fails when it tries to import "cloverlib.xml". Workaround: define a dependency to com.cenqua.clover:clover in BuildConfig.groovy (or in pom.xml) - in the very same way as it was made in Clover-for-Grails 3.1.12 or older under the Grails 2.2. Fix: 1) reconfigure dependencies.groovy / pom.xml ? 2) roll back to a previous approach - i.e. merge clover-grails1 branch into default, produce one plugin version, rollback documentation | 1 |
| 225 | CLOV-1438 | Create an API for plugging custom I/O handler | Currently Clover uses a standard Java IO/NIO libraries to read from and write to: a coverage database, coverage recording files (global and per-test), test optimization snapshots. This is not sufficient when user want to run an application on a custom file system, such as Apache HDFS. Provide an API which would allow to provide a custom IO handler. Scope: * writing coverage files (global and per-test) * reading/writing database (optional - we deal a lot with file channels which might be a problem; a growable coverage recorder can be used at runtime instead of this) * writing optimization snapshot (optional - not everyone uses test optimization) References: * https://answers.atlassian.com/questions/255286/does-clover-support-to-read-and-write-clover-db-and-coverage-recording-files-from-hdfs * https://answers.atlassian.com/questions/48360/how-can-i-get-functional-test-code-coverage-reports-for-mapreduce-program | 8 |
| 226 | CLOV-1441 | Clover plugin doesn't load on IDEA 13 Startup | {noformat} null java.lang.NullPointerException com.cenqua.clover.idea.LibrarySupport.getValidatedCloverLibrary(LibrarySupport.java:81) com.cenqua.clover.idea.build.CloverLibraryInjector$1.run(CloverLibraryInjector.java:44) com.intellij.openapi.application.impl.ApplicationImpl.runWriteAction(ApplicationImpl.java:997) com.cenqua.clover.idea.build.CloverLibraryInjector.addCloverLibrary(CloverLibraryInjector.java:61) com.cenqua.clover.idea.build.CloverLibraryInjector.updateModulesDependencies(CloverLibraryInjector.java:35) com.cenqua.clover.idea.ProjectPlugin.projectPostStartup(ProjectPlugin.java:116) com.cenqua.clover.idea.ProjectPlugin$1.run(ProjectPlugin.java:86) com.intellij.ide.startup.impl.StartupManagerImpl$7.run(StartupManagerImpl.java:286) com.intellij.ide.startup.impl.StartupManagerImpl.a(StartupManagerImpl.java:259) com.intellij.ide.startup.impl.StartupManagerImpl.access$100(StartupManagerImpl.java:52) com.intellij.ide.startup.impl.StartupManagerImpl$4.run(StartupManagerImpl.java:184) com.intellij.openapi.project.DumbServiceImpl.a(DumbServiceImpl.java:238) com.intellij.openapi.project.DumbServiceImpl.access$500(DumbServiceImpl.java:53) com.intellij.openapi.project.DumbServiceImpl$IndexUpdateRunnable$1$3.run(DumbServiceImpl.java:420) java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251) java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733) java.awt.EventQueue.access$200(EventQueue.java:103) java.awt.EventQueue$3.run(EventQueue.java:694) java.awt.EventQueue$3.run(EventQueue.java:692) java.security.AccessController.doPrivileged(Native Method) java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) java.awt.EventQueue.dispatchEvent(EventQueue.java:703) com.intellij.ide.IdeEventQueue.e(IdeEventQueue.java:696) com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:524) com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:335) java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) java.awt.EventDispatchThread.run(EventDispatchThread.java:91) {noformat} | 2 |
| 227 | CLOV-1442 | Use more unique property names in clover.xml | The clover.xml contains the following properties: {code:xml} <property name="project.name" value="${ant.project.name}"/> <!-- By default, use the ant project name. --> <property name="project.title" value="${project.name}"/> <!-- If no title is set, use the project.name. --> <property name="test.target" value="test"/> <!-- The name of the target which runs the tests. --> {code} Their names are not very unique so there's some chance that developer could actually use similar ones in his project. This may lead to clash an Ant properties are not read-only once set. Use more distinct names, e.g. "clover.project.name". Update documentation on CAC accordingly. | 2 |
| 228 | CLOV-1443 | Clover Grails Plugin fails when tests are launched from IDEA | Steps to reproduce: * import Grails-based project into IntelliJ IDEA * add Clover Grails plugin to the project * run *forked* tests from IDEA Build fails with an error like: {noformat} | Error Error running forked test-app: No such property: testNames for class: _Events (Use --stacktrace to see the full trace) | Error Forked Grails VM exited with error {noformat} Workaround: * disable forked test execution in IDEA Probable cause: IDEA does not call "grails test-app" but executes the GrailsScriptRunner, e.g.: {noformat} java -cp ... org.codehaus.groovy.grails.cli.support.GrailsStarter --main org.codehaus.groovy.grails.cli.GrailsScriptRunner {noformat} The most probably this runner does not import the _GrailsTest.groovy, which contains a definition of the testNames property. | 2 |
| 229 | CLOV-1446 | Tree map report has an empty line in context menu | Open TreeMap report in IDEA, right click on a class, a context menu is opened which has an empty first line: !jump_to_source.png! | 2 |
| 230 | CLOV-1447 | Add possibility to configure <profiles> in Eclipse and IDEA IDEs | The <clover-setup> and <clover-instr> tasks allow to define <profiles> section, where we can select coverage recorder type etc. There's no possibility to configure it in Clover-for-Eclipse and Clover-for-IDEA plugins. | 5 |
| 231 | CLOV-1448 | Test spock under gradle | We don't support Gradle. However, it's worth checking how our Spock works (or not :-) ) with open-source gradle clover plugins available. To do: * prepare a sample app with a build.gradle script * integrate Clover into it using the https://github.com/bmuschko/gradle-clover-plugin * check if spock instrumentation works here * publish results on CAC as a developer guide | 3 |
| 232 | CLOV-1449 | Test spock with XML importing | Test how the <clover-report> can be used together with: * Spock Spec classes with @Unroll * test results imported from an external XML file Purpose of test: * check if runtime test names recorded by Clover matches test names reported by Spock Outcome: * document whether it works (and how) or not | 2 |
| 233 | CLOV-1451 | Fix uncheched warnings for code instrumented by Clover | Follow up of CLOV-1399: {quote} I tried it with 3.2.2 same issue for every instrumented class. [WARNING] /Users/kasperni/workspace/cake-container/cake-container/cake-container-api/target/clover/src-instrumented/org/cakeframework/container/RuntimeContainerException.java:[24,758] unchecked cast required: I found: java.lang.Object It is this generated line that generates the warning: return (I) java.lang.reflect.Proxy.newProxyInstance(l.getClass().getClassLoader(), l.getClass() .getInterfaces(), h); It can be solved by adding a @SuppressWarnings("unchecked") to the instrumented file: @SuppressWarnings("unchecked") public static <I, T extends I> I lambdaInc(final int i, final T l, final int si) {........} {quote} | 2 |
| 234 | CLOV-1455 | ///Clover:OFF does not work with lambdas | The following piece of code fails to be instrumented {code:java} public class Foo { // /CLOVER:OFF public static void main(String[] args) { new ConcurrentHashMap<>().computeIfAbsent("foo", e -> null); } // /CLOVER:ON } {code} Results in [ERROR] /Users/kasperni/workspace/cake-container/cake-container/cake-container-impl/target/clover/src-instrumented/org/cakeframework/internal/container/handler/Foo.java:[28,58] cannot find symbol symbol: variable __CLR3_2_2133133hrrnhz2t location: class org.cakeframework.internal.container.handler.Foo | 2 |
| 235 | CLOV-1457 | clover-for-grails plugin is not working with grails.project.fork | Hello, When I run the grails test-app command in grails 2.3.5. I get the following error: {noformat} Error running forked test-app: No such property: testNames for class: _Events groovy.lang.MissingPropertyException: No such property: testNames for class: _Ev ents at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptByteco deAdapter.java:50) at org.codehaus.groovy.runtime.callsite.PogoGetPropertySite.getProperty( PogoGetPropertySite.java:49) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGroovyObjec tGetProperty(AbstractCallSite.java:231) at _Events$_run_closure3.doCall(_Events.groovy:75) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl. java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces sorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(Refl ectiveInterceptor.java:1254) at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java: 90) at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233) at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1086) at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1110) {noformat} | 2 |
| 236 | CLOV-1459 | native2ascii error converting i18n bundles for plugin | When running with -clover.on in our CI environment (TeamCity), we are getting a weird error: Error native2ascii error converting i18n bundles for plugin [xxxx] java.lang.reflect.InvocationTargetException It's not constrained to a single plugin, typically it lists different plugins. The full stack trace is: {code} [15:28:49][Step 4/8] | Error native2ascii error converting i18n bundles for plugin [spring-security-core-1.2.7.3] java.lang.reflect.InvocationTargetException [15:28:49][Step 4/8] | Error Error executing script TestApp: : java.lang.reflect.InvocationTargetException (NOTE: Stack trace has been filtered. Use --verbose to see entire trace.) [15:28:49][Step 4/8] : java.lang.reflect.InvocationTargetException [15:28:49][Step 4/8] org.codehaus.gant.GantBuilder.invokeMethod(GantBuilder.java:99) [15:28:49][Step 4/8] _GrailsTest_groovy$_run_closure1.doCall(_GrailsTest_groovy:102) [15:28:49][Step 4/8] org.codehaus.gant.GantMetaClass.invokeMethod(GantMetaClass.java:133) [15:28:49][Step 4/8] org.codehaus.gant.GantBinding$_initializeGantBinding_closure5_closure16_closure18.doCall(GantBinding.groovy:185) [15:28:49][Step 4/8] org.codehaus.gant.GantBinding$_initializeGantBinding_closure5_closure16_closure18.doCall(GantBinding.groovy) [15:28:49][Step 4/8] org.codehaus.gant.GantBinding.withTargetEvent(GantBinding.groovy:90) [15:28:49][Step 4/8] org.codehaus.gant.GantBinding.this$4$withTargetEvent(GantBinding.groovy) [15:28:49][Step 4/8] org.codehaus.gant.GantBinding$_initializeGantBinding_closure5_closure16.doCall(GantBinding.groovy:185) [15:28:49][Step 4/8] org.codehaus.gant.GantBinding$_initializeGantBinding_closure5_closure16.doCall(GantBinding.groovy) [15:28:49][Step 4/8] org.codehaus.gant.GantMetaClass.invokeMethod(GantMetaClass.java:133) [15:28:49][Step 4/8] TestApp$_run_closure1.doCall(TestApp:32) [15:28:49][Step 4/8] org.codehaus.gant.GantMetaClass.invokeMethod(GantMetaClass.java:133) [15:28:49][Step 4/8] org.codehaus.gant.GantBinding$_initializeGantBinding_closure5_closure16_closure18.doCall(GantBinding.groovy:185) [15:28:49][Step 4/8] org.codehaus.gant.GantBinding$_initializeGantBinding_closure5_closure16_closure18.doCall(GantBinding.groovy) [15:28:49][Step 4/8] org.codehaus.gant.GantBinding.withTargetEvent(GantBinding.groovy:90) [15:28:49][Step 4/8] org.codehaus.gant.GantBinding.this$4$withTargetEvent(GantBinding.groovy) [15:28:49][Step 4/8] org.codehaus.gant.GantBinding$_initializeGantBinding_closure5_closure16.doCall(GantBinding.groovy:185) [15:28:49][Step 4/8] org.codehaus.gant.GantBinding$_initializeGantBinding_closure5_closure16.doCall(GantBinding.groovy) [15:28:49][Step 4/8] gant.Gant$_dispatch_closure5.doCall(Gant.groovy:381) [15:28:49][Step 4/8] gant.Gant$_dispatch_closure7.doCall(Gant.groovy:415) [15:28:49][Step 4/8] gant.Gant$_dispatch_closure7.doCall(Gant.groovy) [15:28:49][Step 4/8] gant.Gant.withBuildListeners(Gant.groovy:427) [15:28:49][Step 4/8] gant.Gant.this$2$withBuildListeners(Gant.groovy) [15:28:49][Step 4/8] gant.Gant$this$2$withBuildListeners$0.callCurrent(Unknown Source) [15:28:49][Step 4/8] gant.Gant.dispatch(Gant.groovy:415) [15:28:49][Step 4/8] gant.Gant.this$2$dispatch(Gant.groovy) [15:28:49][Step 4/8] gant.Gant.invokeMethod(Gant.groovy) [15:28:49][Step 4/8] gant.Gant.executeTargets(Gant.groovy:591) [15:28:49][Step 4/8] gant.Gant.executeTargets(Gant.groovy:590) [15:28:49][Step 4/8] org.grails.wrapper.GrailsWrapper.main(GrailsWrapper.java:93) [15:28:49][Step 4/8] Caused by: java.lang.reflect.InvocationTargetException [15:28:49][Step 4/8] ... 30 more [15:28:49][Step 4/8] Caused by: java.util.ConcurrentModificationException [15:28:49][Step 4/8] com.atlassian.clover.ant.groovy.GroovycSupport.logGroovycTasks(GroovycSupport.java:102) [15:28:49][Step 4/8] com.atlassian.clover.ant.groovy.GroovycSupport.taskStarted(GroovycSupport.java:123) [15:28:49][Step 4/8] org.apache.tools.ant.Project.fireTaskStarted(Project.java:2184) [15:28:49][Step 4/8] ... 30 more [15:28:49][Step 4/8] | Error Error executing script TestApp: : java.lang.reflect.InvocationTargetException [15:28:50][Step 4/8] Process exited with code 1 {code} Running without "-clover.on" removes this problem. | 2 |
| 237 | CLOV-1462 | ClassNotFoundException when running tests in IDEA 13.1 RC with Clover enabled | Install IDEA 13.1 RC and Clover 3.2.2. Load Java project. Create a run configuration for JUnit, select "Test kind: All in package", select "Before launch: Make". Run tests with Clover disabled - all tests are executed. Run tests with Clover enabled - all tests are executed, but after second and next runs - ClassNotFoundException on a test class occurs. | 2 |
| 238 | CLOV-1466 | Several tests fail with Cannot cast object ... to class 'com_cenqua_clover.CoverageRecorder' | See here for a travis build exhibiting this problem: https://travis-ci.org/thehyve/transmart-core-db/jobs/21220075 19 tests there fail because of this problem. The culprit seems to be this line: https://github.com/thehyve/transmart-core-db/blob/5e8f0400b9ddce75e1d3d2adccf747e42bff3ee6/src/groovy/org/transmartproject/db/dataquery/clinical/TerminalConceptVariablesTabularResult.groovy#L39 | 3 |
| 239 | CLOV-1467 | Rename com.cenqua to com.atlassian | Rename all references to "Cenqua" to "Atlassian". It affects: * java packages - com.cenqua.* and com_cenqua_clover (/) * Clover-for-Eclipse plugins and features (/) * com.cenqua.clover:clover artifact (clover core) (/) Optional: Rename also Clover-for-Maven plugin from 'maven-clover2-plugin' to 'clover-maven-plugin'. (x) The maven plugin will not be renamed. Reason? Typing 'mvn clover:setup' in a project where clover-maven-plugin is not explicitly defined in pom.xml causes that Maven resolves the 'clover:setup' as 'com.atlassian.maven.plugins:maven-clover-plugin:maven-plugin:3.7' which is wrong. So it will be very confusing for customers. | 3 |
| 240 | CLOV-1469 | Maven plugin sholud handle target/generated-test-sources | The AbstractInstrumenter recognizes only the target/generated-sources path: {code:java} private boolean isGeneratedSourcesDirectory(final String sourceRoot) { String generatedSrcDirDefaultLifecycle = File.separator + "target" + File.separator + "generated-sources"; String generatedSrcDirCloverLifecycle = File.separator + "target" + File.separator + "clover" + File.separator + "generated-sources"; return sourceRoot.indexOf(generatedSrcDirDefaultLifecycle) != -1 || sourceRoot.indexOf(generatedSrcDirCloverLifecycle) != -1; } {code} It shall also detect the target/generated-test-sources. | 1 |
| 241 | CLOV-1470 | Maven clover2:setup ignores generated sources | We have several maven projects that contain only generated sources (target/generated-sources/...). The default source directory does not exist for those projects. clover2:setup does not work properly for those projects: the generated sources do not get compiled. We currently work around the issue by creating a marker file in the default source directory. | 1 |
| 242 | CLOV-1471 | Maven clover2:setup triggers duplicate class exception | We have several maven projects that have more than one source directory. The non-default directories are added using the build-helper plugin. The clover2:setup goal instruments all source folders, but then sets all non-generated directories as source folders on the maven project. That results in compile errors, since source files are both present in the clover instrumented sources and original location. Example: java/src << 1. default source folder java/src-build << 2. additional source folder target/generate-sources/jaxb << 3. generated source folder Case (2) is causing problems. | 3 |
| 243 | CLOV-1478 | Double instrumentation error when running 'mvn site' on JDK8 | Run 'mvn clean site' on the src/it/setTestFailureIgnore project using the JDK8 and Maven 2.2.1. It fails with an error: {noformat} [INFO] Processing files at 1.8 source level. [INFO] Instrumentation error com.atlassian.clover.api.CloverException: Double instrumentation detected: f:\Work\release\release-maven-clover2-plugin-hg\src\it\setTestFailureIgnore\target\clover\src-instrumented\com\atlassian\maven\plugin\clover\samples\setTestFailureIgnore\Simple.java appears to have already been instrumented by Clover. com.atlassian.clover.instr.java.CloverTokenStreamFilter.guardAgainstDoubleInstrumentation(CloverTokenStreamFilter.java:66) ... {noformat} The same site goal works correctly under JDK7. | 1 |
| 244 | CLOV-1481 | Invalid instrumentation code for test methods inside anonymous inline classes | Clover generates incorrect reference to the static field __CLR3_2_2_TEST_NAME_SNIFFER in case when a test method is declared inside an inner (static or non-static) or inside an anonymous inline class, which are located inside a non-test top-level class. In such case, the top-level class doesn't have the __CLR3_2_2_TEST_NAME_SNIFFER field (as it's not a test class), but inner/inline classes (which are test ones) are trying to access this field. {noformat} [clover] 2 test methods detected. [javac] ---------- [javac] 1. ERROR in ... [javac] public boolean test() {__CLR3_2_262c962c9htee2hlb.R.globalSliceStart(getClass().getName(),284284);int $CLV_p$=0;java.lang.Throwable $CLV_t$=null;try {boolean $CLV_r$=__CLR3_2_2qua64563cs();$CLV_p$=1;return $CLV_r$;} catch(java.lang.Throwable $CLV_t2$){if($CLV_p$==0&&$CLV_t$==null){$CLV_t$=$CLV_t2$;}_CLR3_2_262c962c9htee2hlb.R.rethrow($CLV_t2$);return false;}finally{CLR3_2_262c962c9htee2hlb.R.globalSliceEnd(getClass().getName(),"com.xyz.RuntimeDebugger.SaveTestCaseAction.getDefaultAvailablePredicate.test",CLR3_2_2_TEST_NAME_SNIFFER.getTestName(),284284,$CLV_p$,$CLV_t$);}}private boolean __CLR3_2_2qua64563cs(){_CLR3_2_262c962c9htee2hlb.R.inc(284284); [javac] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [javac] __CLR3_2_2_TEST_NAME_SNIFFER cannot be resolved [javac] ---------- [javac] 1 problem (1 error) {noformat} Code example: {code:java} public class SnifferInInnerAndInline { interface TestAction { boolean test(); } static class InnerStaticTest { public void testInnerStatic() { // FAILS HERE } } class InnerTest { public void testInnerNonStatic() { // FAILS HERE } } TestAction testWithInline() { return new TestAction() { public boolean test() { // FAILS HERE (assuming that we have a custom test pattern which matches it) return true; } }; } public static void main(String[] args) { new SnifferInInnerAndInline.InnerStaticTest().testInnerStatic(); new SnifferInInnerAndInline().new InnerTest().testInnerNonStatic(); new SnifferInInnerAndInline().testWithInline().test(); } } {code} | 2 |
| 245 | CLOV-1486 | change historical report | scope: header, footer, tables with "added" and "movers", optionally, put charts in some boxes | 1 |
| 246 | CLOV-1490 | Clover safeEval method is imcompatible with Groovy's @CompileStatic annotation | When trying to use Clover on a Groovy class that is marked @CompileStatic and it contains a null-safe operator (e.g. Bar bar = foo?.bar), then the groovyc compilation fails with the error: No such property: bar for class: java.lang.Object The error is that the generated {code}$CLV_safeEval${code} method returns an Object instead of the type of the property. This then causes Groovy compiler to fail later. I've created a sample project that exhibits the problem at https://github.com/johnrengelman/clover-grooyv-compilestatic Simply run {code}./gradlew test{code} | 3 |
| 247 | CLOV-1492 | Grails' controller methods are not shown as entered | Hello, For some reason the method in a controller is marked as not entered even though the content inside is shown to be executed. Please can you help me rationalize/ understand this? Please refer to me screenshots: index_method_not_executed.png: to see that the index() method is not executed even though its contents are. test_for_index_method.png: the test that is run to get the method to run. | 3 |
| 248 | CLOV-1496 | reduce html report size | As a developer I'd like to have small HTML report size in order to reduce disk space consumption, especially in case of builds on CI server. Possible ways to reduce report size: 1) extract list of packages to separate JSON file and load it dynamically using JS function (instead of embedding it on virtually every page) (/) DONE 2) use some html compression utility (which would strip all whitespace etc) https://code.google.com/p/htmlcompressor/#Compressing_selective_content_in_Velocity_templates (x) performance of the HtmlCompressor is unacceptable (+340% time) 3) remove whitespace from most frequent loops from velocity templates (/) DONE | 3 |
| 249 | CLOV-1497 | improve report accessiblity | http://www.w3.org/TR/wai-aria-practices/#TreeView | 3 |
| 250 | CLOV-1498 | improve navigation between report entities | We can navigate vertically and horizontally, but on a file level we've got a break: {noformat} project - dashboard | app | test | results | clouds | treemap v package - app | test | results | clouds | +--------------------------------------------------+ v v file - classes | contr tests | methods test class v test {noformat} fix it so that we can jump from test file to test results for a file fix it so that we have one "source" tab for a file -> put 'classes and methods' and 'contributing tests' into expandable tables, dialogs etc | 3 |
| 251 | CLOV-1500 | implement global search in the html report - backend | Implement search box in a blue app header. Generate JSON data: * packages, files, classes, methods, tests Split into several indexes (for smaller file size) as theoretical size is up to 40MB (200'000 objects per 200 chars). Add "automatic" option (up to 10'000 elements). (/) Add options for: <clover report>/<current>/<format>/<globalSearch scope="package,file,class,method,test|auto" limit="10000"/> (/) Add option for HtmlReporter: --globalSearchScope=package,file,class,method,test|auto --globalSearchLimit=10000 to choose which elements shall be searchable. | 8 |
| 252 | CLOV-1502 | tree view is not compacted properly when only 1 package is present | !tree_view_bug.png! We have com.cenqua + samples.money instead of exactly one (root) node named "com.cenqua.samples.money". | 1 |
| 253 | CLOV-1503 | provide explanation when number of files is greater than number of classes for a package | There might be a case that number of files > number of classes listed: !more_files_than_classes.png! This is normal behaviour, because by default Clover hides entities having no executable code, such as: empty classes, enums (with no methods), interfaces (with no virtual extension methods). However, this may be confusing for end user. How we could improve this: 1) Set the showEmpty to true by default. Benefit: 'classes >= files' in all cases. Drawback: report will contain unnecessary noise. 2) Add [(?) Help] button above the table. Example: !package_help.png! 3) Add tooltip for 'Files' (TotalElements.getHelp()) 4) Add small text below the class table. For example: "3 classes are not listed because they contain no executable code." | 1 |
| 254 | CLOV-1505 | replace a vertical navigation component by a sidebar | Instead of the aui-vertical-nav use the aui-sidebar component. | 3 |
| 255 | CLOV-1508 | Upgrade HTML report to ADG 2.0 / AUI 5.7 | Upgrade AUI library to 5.7.x. We may need to make some corrections of CSS to be compatible (probably: colors, shadows, notification messages). | 2 |
| 256 | CLOV-1509 | as a developer I'd like to have nanosecond precision for test duration | In reports lots of tests have duration = 0. This is because unit tests are fast and the System.currentTimeMillis() is used to record start and end time of a test. Which is not precise by design. We could increase precision to nanoseconds using System.nanoTime(). Note: we'd still need to call System.currentTimeMillis() to record datetime when test was run. | 3 |
| 257 | CLOV-1510 | Remove "See more" links from the report dashboard | for: * Most complex packages * Most complex classes * Least tested methods * Class Coverage Distribution * Class Complexity | 1 |
| 258 | CLOV-1511 | "Show contributing test" change to ... | "<a>Select tests</a> to highlight the code coverage" or something similar | 1 |
| 259 | CLOV-1512 | The "Show methods" link does not open the modal dialog | This happens for inner classes (i.e. when a class name contains ".") May be caused by a way how Modal Dialog handles element id. | 1 |
| 260 | CLOV-1514 | tool tips in dashboard widgets shall not be displayed on the right | Tool tips are by default placed on the right, so they don't fit in the 'Clover Dashboard' view: !screenshot-1.png! | 1 |
| 261 | CLOV-1515 | use ADG fonts and colours in Cloud View in IDEA | The ADG HTML report in Clover 4 uses new colour set (shades of red instead of blue-red) for tag clouds. The Clover-for-Eclipse has this theme: [^cloud_view_eclipse.png] but the Clover-for-IDEA still uses the old colour set: [^cloud_view_idea.png] | 1 |
| 262 | CLOV-1517 | AntIntegrator adds unnecessary double quotes for -Dparam=value JVM options | Class com.atlassian.clover.ci.AntIntegrator puts values of the following properties: -Dclover.historydir and -Dclover.license.cert, -Dclover.license.path in double quotes. On Windows platform it causes problems when a value contains space character - parameters are being split. See BAM-10740. Add a check if OS is Windows and don't add double quotes in such case. | 1 |
| 263 | CLOV-1518 | implement global search in the html report - frontend | Implement search box in blue app header. Generate JSON data: * packages, files, classes, methods, tests Split into several indexes (for smaller file size) as theoretical size is up to 40MB (200'000 objects per 200 chars). Add "automatic" option (up to 10'000 elements). Add options for <clover report> <index scope="package, file, ..., method | auto"> to choose which elements shall be searchable. | 5 |
| 264 | CLOV-1526 | View latest Clover information (BAM-14428) | See BAM-14428. | 5 |
| 265 | CLOV-1527 | Clover tab with an HTML report generated by Clover 4 shall have a vertical scroll bar (BAM-14777) | See BAM-14777. | 1 |
| 266 | CLOV-1528 | Configure Fisheye/Crucible build to use Clover 4 | NULL | 1 |
| 267 | CLOV-1534 | Move CloverCompilerAdapter out from org.apache.tools.ant.taskdefs package | The org.apache.tools.ant.taskdefs.CloverCompilerAdapter may cause conflicts with Apache Ant packaged as OSGI bundle which exports the same package. Possible fix: (x) The Javac.getFileList() is a getter for compileList. Try using it - we must ensure that compileList and replacementCompileSet have the same size or (/) Use reflections to access the package-protected field. Thanks to this we could move CloverCompilerAdapter to com.atlassian.clover package. | 1 |
| 268 | CLOV-1535 | Application Packages list is empty in Classic report | NULL | 1 |
| 269 | CLOV-1538 | Instrumenting assignment of method reference to field results in reference to undefined symbol. | Instrumenting the following snippet results in the compilation error [ERROR] clover/src-instrumented/Test.java:[2,18] cannot find symbol [ERROR] symbol: variable __CLR3_3_000hysmxbbd [ERROR] location: class Test Source: public class Test { Runnable r = System::currentTimeMillis; } Instrumented code: /* $$ This file has been instrumented by Clover 3.3.0#2014033113020816 $$ */public class Test { Runnable r = __CLR3_3_000hysmxbbd.lambdaInc(0,System::currentTimeMillis,1); } | 2 |
| 270 | CLOV-1540 | BAM-13404 BAM-15085 Use BuildConfig to install Clover | NULL | 8 |
| 271 | CLOV-1541 | BAM-13208 Automatic integration in multi-module builds | Follow the approach #1 | 8 |
| 272 | CLOV-1542 | BAM-7272 BAM-10516 BAM-11151 Working subdirectory | NULL | 8 |
| 273 | CLOV-1543 | BAM-14734 BAM-14907 Clover charts | https://jira.atlassian.com/browse/BAM-14734 https://jira.atlassian.com/browse/BAM-14907 | 5 |
| 274 | CLOV-1544 | Release Clover 4.0.2 | ant, eclipse, idea, maven, grails | 2 |
| 275 | CLOV-1546 | Resolve path to clover.jar when packed as OSGI bundle | ClassPathUtil.getCloverJarPath() searches for a JAR in case when URL returned by class loader is like: {noformat} jar:file:!/path/to/clover.jar/com/atlassian/clover/util/ClassPathUtil.class {noformat} or {noformat} file:/path/to/classes/directory/com/atlassian/clover/util/ClassPathUtil.class {noformat} However, it does not handle a case for OSGI bundles, which have an URI like: {noformat} bundle://28.0:2/com/atlassian/clover/util/ClassPathUtil.class {noformat} Fix: use getClass().getProtectionDomain().getCodeSource().getLocation().toURI() | 1 |
| 276 | CLOV-1547 | The Grails' @Transactional annotation conflicts with Clover's AST transformations | The @Transactional annotation is the new Grails-y way of controlling transactional behavior in a service. It uses an AST transformation to essentially wrap public methods (if added to the class) in a GrailsTransactionTemplate. So you get code that looks like this: {code:java} public void reject(Invoice invoice) { Reference invoice = new Reference(invoice); CallSite[] arrayOfCallSite = $getCallSiteArray(); GrailsTransactionAttribute $transactionAttribute = (GrailsTransactionAttribute)ScriptBytecodeAdapter.castToType(arrayOfCallSite[9].callConstructor(GrailsTransactionAttribute.class), GrailsTransactionAttribute.class); GrailsTransactionTemplate $transactionTemplate = (GrailsTransactionTemplate)ScriptBytecodeAdapter.castToType(arrayOfCallSite[10].callConstructor(GrailsTransactionTemplate.class, this.transactionManager, $transactionAttribute), GrailsTransactionTemplate.class); $transactionTemplate.execute(new _reject_closure5(this, invoice)); } {code} The real body of the method is in the reject_closure5, which ends up calling a method named "$tt_reject(...)". Clover doesn't realize that the code originally under the reject method has essentially been relocated to the $tt__reject method. Given that @Transactional is a core part of Grails (starting in 2.3, I believe) and the recommended way to control transactions going forward, this is probably something that should be addressed in Clover core. | 3 |
| 277 | CLOV-1552 | Upgrade FastUtil library to version 6.5.2 or later | API was changed since version 4.4.3, some methods used by Clover are missing and there's no direct replacement for them. Migrate Clover's code. | 3 |
| 278 | CLOV-1553 | Upgrade Atlassian Extras to 3.2.x | API has changed in Atlassian Extras 3.x vs 2.5. There's no LicenseManagerFactory.getLicenseManager() We can compose our own license manager and decoder using: Version1LicenseDecoder + Version2LicenseDecoder + DelegatingLicenseDecoder + CloverProductLicenseFactory + DefaultLicenseManager However, there are problems with decoding the "Clover Desktop" license = the CloverLicenseTest.testDesktopLicense fails. Investigate: * maybe Clover Desktop license format has changed? * or maybe overlooked by atlassian-extras developers? * or ... ? | 3 |
| 279 | CLOV-1554 | Replace iText library | Replace current iText 2.0.1 library by: * a commercial version of iText 5.x or * a PDFBox (http://pdfbox.apache.org) or other tool based on a good open-source license (Apache 2.0, MIT, BSD, PD). | 5 |
| 280 | CLOV-1557 | Improve HTML ADG side bar view and a package tree performance | NULL | 1 |
| 281 | CLOV-1559 | Create Bitbucket Connect Clover Plugin | Bitbucket - Dan Bennett (Team Lead) - Investigate the creation of a Connect plugin to expose Clover functionality in Bitbucket diff & file viewer (same as Stash functionality) | 40 |
| 282 | CLOV-1560 | S3 Artifact handler corrupts Clover tab in Bamboo | Bamboo 5.7 introduces new artifact handler to store files in Amazon S3. Due to a fact that it works on a file-by-file basis, we cannot expose the entire HTML report as a 'site' embedded in the <iframe>. As a consequence it looks like this: !clover-tab-with-s3-handler.png! *Workaround:* Do not use S3 artifact handler for builds with Clover. Default handler settings can be overridden in Plan configuration > Miscellaneous: !artifact_handlers.png! *Possible fixes:* 1) Implement a wrapper on S3 handler, which would download all files from an artifact definition to some temporary directory and expose it in <iframe> * problem: Clover's reports may have up to several GB for large projects, downloading all files every time someone opens the 'Clover' tab will be time consuming, we'd need to keep such artifacts for a longer period of time 2) Add warnings for Clover integration in the UI in case when S3 handler is found. Write information about this limitation on confluence.atlassian.com. 3) Create a ZIP archive out of Clover Report artifact and give user an ability to download this file. 4) Add extra option in artifact definition so that user could select which handler should keep given artifact. Thanks to this, S3 could be excluded. 5) Due to a fact that new Clover HTML ADG reports do not contain frames, we could think about a thin wrapper, which would download only one page and replace all original links in the HTML file by proper links to S3; if user would click on a link, he would get another page processed this way... * we'd have to handle *.js, *.css, images etc too. 5b) Create something like a "ZIP File Handler", which could serve files from an archive (then we could pack Clover's HTML report and store on S3 or any other medium). It would also require rewriting links. 6) Look for some solution provided by Amazon, such as Static Website Hosting on S3 http://docs.aws.amazon.com/AmazonS3/latest/dev/website-hosting-custom-domain-walkthrough.html | 8 |
| 283 | CLOV-1561 | Distributed Coverage does not work due to java.rmi.UnmarshalException | {noformat} Received result: Remote_Stub[UnicastRef2 [liveRef: [endpoint:[192.168.157.181:11 98,clover.gnu.cajo.invoke.Remote$RCSF@732e103d](remote),objID:[-26c3f6bf:148ea10 98a9:-7ffb, -3801964032288496245]]]] Started proxy: Thread-9 cutOff(java.rmi.UnmarshalException: error unmarshalling return; nested exception is: java.io.WriteAbortedException: writing aborted; java.io.NotSerializableE xception: com.atlassian.clover.ErrorInfo); from: localhost:1198. Attempting to r econnect. {noformat} | 1 |
| 284 | CLOV-1567 | Test optimization in IDEA 14 shows wrong number of classes | There are 2 test classes in the 'Moneybags' tutorial project. Running test optimization in IDEA 14 (EAP build 138.2458.8) shows "3 test classes". !idea14_clover_test_optimization.png! | 2 |
| 285 | CLOV-1568 | An orphaned lozenge when there are no search results | !html_adg_orphaned_lozenge.png! | 1 |
| 286 | CLOV-1569 | A wrong caption in a search box in an HTML ADG report | !search_box_wrong_caption.png! | 1 |
| 287 | CLOV-1570 | A historical report contains link to an XML report | !wrong_links_in_a_historical_report.png! | 1 |
| 288 | CLOV-1571 | Upgrade third party libraries used by Clover - 2nd phase | Upgrade third party libraries to their latest versions: * Antlr 4.0, including java.g syntax file (x) tracked in CLOV-1329, CLOV-1331 and CLOV-1332 * atlassian-extras 3.2 (x) tracked in CLOV-1553 * cajo 1.175 * commons-lang3 3.3.2 (x) * fastutil 6.5.2 (x) tracked in CLOV-1552 * GSON 2.2.2 * JDOM 2.0.4 * JSON - replace by com.google.code.gson:gson Upgrade feasibility to be verified: * theJIT * KTreeMap/JTreeMap Get rid of: * Overlibvms (x) not until we drop Classic reports (Clover 4.1) * Utils.js (x) not until we drop Classic reports (Clover 4.1) * iText (x) tracked in CLOV-1554 To be considered: * upgrade Log4j to or 2.0.x | 8 |
| 289 | CLOV-1572 | BAM-699 BAM-2883 BAM-13786 Chart points with failed builds or no daily data | NULL | 5 |
| 290 | CLOV-1573 | BAM-9048 More configuration options for automatic Clover integration | NULL | 5 |
| 291 | CLOV-1582 | Test Clover-for-IDEA compatibility with IDEA 14 | NULL | 2 |
| 292 | CLOV-1584 | Add additional logging for <clover-setup>/<files> element | Currently, when <clover-setup> contains a <fileset> element, Clover prints information about included/excluded files (on a verbose logging level). In <clover-setup> we can also use a similar <files> element - but there's no logging for it. Add logging on a verbose level. | 1 |
| 293 | CLOV-1585 | Insert Clover goals between original ones | add "clover2:setup" after the "clean" (if present) and before other goals but "jaxb2:generate clover2:setup" but "wsdl2java clover2:setup" | 3 |
| 294 | CLOV-1586 | Add warnings in UI about install/deploy phases | what to do in case when "install" or "deploy" phase is declared? deploying instrumented JARs shall be avoided in general write help for "automatically integrate clover" radio button? write warning in UI if such goals are found? write warning in a build log if such goals are found? | 3 |
| 295 | CLOV-1587 | Prepare Bamboo documentation about the change | * Write big warning in the Bamboo 5.8 Release Notes what do to with Clover-enabled plans before upgrading * Update "Enabling the Clover add-on" page (how it works for maven in bamboo 5.8 and 5.7) * Update answers.a.c questions about this problem and CLOVERKB too | 2 |
| 296 | CLOV-1588 | Integrate Clover with JUnitParams | The JUnitParams (https://github.com/Pragmatists/junitparams) is much more convenient way to parameterize tests instead of using JUnit's 4.10 @Parameterized annotation. | 5 |
| 297 | CLOV-1595 | Clover does not work with Grails 2.4.4 | When developers use "./grailsw run-app" it gives the following error. {noformat} Running Grails application Error Error loading event script from file [/opt/stanson/target/work/plugins/clover-4.0.2/scripts/_Events.groovy] startup failed: /opt/stanson/target/work/plugins/clover-4.0.2/scripts/_Events.groovy: 4: unable to resolve class org.codehaus.groovy.grails.test.GrailsTestTargetPattern @ line 4, column 1. import org.codehaus.groovy.grails.test.GrailsTestTargetPattern ^ 1 error (Use --stacktrace to see the full trace) {noformat} | 3 |
| 298 | CLOV-1596 | Use heuristics to solve JDK8 Stream compilation errors | Spike in which a problem with Java8 streams will be attacked as it seems that using stream() is very popular and the most probably it causes the majority of compilation problems with Clover's lambdaInc(). Scope: focus on streams only. Out of scope: attacking a generic problem of method signatures with a mixture of functional and non-functional arguments. | 13 |
| 299 | CLOV-1597 | Set instrumentLambda=none as a default value for instrumentation | This is a temporary workaround thanks to which java8 code will always compile, at the cost that lambdas are not measured. User will be still able to enable lambda instrumentation, but this will be a conscious decision, so seeing compilation errors should be less surprising. Scope: CloverInstr, ant, maven, idea, eclipse, grails plugins. | 1 |
| 300 | CLOV-1603 | CloverOptimizedTestNGSelector does not add "clover-optimized" group to TestNG @Before and @After annotations | In order for Clover to optimize a TestNG test suite, we have to use the {{CloverOptimizedTestNGSelector}} listener, and restrict TestNG to only run the "clover-optimized" group, as in: {code:xml|title=build.xml snippet} <testng groups="clover-optimized" listeners="com.atlassian.clover.ant.tasks.testng.CloverOptimizedTestNGSelector" > <!-- ... --> </testng> {code} The problem with this is that TestNG's {{@Before}} and {{@After}} annotations ({{@BeforeMethod}}, {{@AfterClass}}, etc) will not be run, because they are not part of the "clover-optimized" group. I have a workaround, which is to qualify all such annotations with {{alwaysRun=true}}, but this is pretty ugly. A possible solution is for {{CloverOptimizedTestNGSelector}} to implement {{IAnnotationTransformer2}} and override [transform( IConfigurationAnnotation, Class, Constructor, Method )|http://testng.org/javadoc/org/testng/IAnnotationTransformer2.html#transform%28org.testng.annotations.IConfigurationAnnotation,%20java.lang.Class,%20java.lang.reflect.Constructor,%20java.lang.reflect.Method%29], automatically adding the "clover-optimized" group to all non-tests. | 1 |
| 301 | CLOV-1605 | Replace clover.licenseLocation by maven.clover.licenseLocation | While it's perfectly fine to have a declaration like this: {code:xml} <properties> <clover.licenseLocation>clover.license</clover.licenseLocation> </properties> {code} and next refer it in maven-clover2-plugin's configuration like this: {code:xml} <configuration> <licenseLocation>${clover.licenseLocation}</licenseLocation> </configuration> {code} it's misleading for users, because in case they would like to pass it via -D parameter or declare in settings.xml without having the <licenseLocation> in maven-clover2-plugin section, it will not work, because the correct property name is 'maven.clover.licenseLocation'. See: https://docs.atlassian.com/maven-clover2-plugin/latest/setup-mojo.html#licenseLocation Correct all references in documentation on confluence.atlassian.com, answers.atlassian.com, maven-clover2-plugin source code, tutorial source code. | 1 |
| 302 | CLOV-1606 | Java8: method reference to a non-static method fails to compile | {quote} *NOT REPRODUCIBLE* {quote} In this code sample: {code:java} return map.entrySet().stream() .collect(Collectors.toMap( Map.Entry::getKey, e -> e.getValue().getAverage() )); {code} the Collectors.toMap() takes a "Map.Entry::getKey" method reference as input argument. However, the getKey method is not static. Wrapping it by Clover's lambdaInc() method leads to a compilation error like this: {noformat} [javac] symbol: method lambdaInc(int,Map.Entry::getKey,int) [javac] location: class __CLR4_0_22ci2cii4lxhoaj [javac] Foo.java:33: error: invalid method reference [javac] __CLR4_0_22ci2cii4lxhoaj.lambdaInc(3045,Map.Entry::getKey,3046), [javac] ^ [javac] non-static method getKey() cannot be referenced from a static context [javac] where K is a type-variable: [javac] K extends Object declared in interface Entry {noformat} *Possible workarounds ??* 1) Disable instrumentation of expression-like lambda functions (method references are treated as expression-like lambda) - use instrumentLambda="block" or "none". 2) Wrap such method reference with ///CLOVER:OFF and ///CLOVER:ON keywords, e.g.: {code:java} return map.entrySet().stream() .collect(Collectors.toMap( ///CLOVER:OFF Map.Entry::getKey, ///CLOVER:ON e -> e.getValue().getAverage() )); {code} 3) Use a variable with a non-static method reference or change to a lambda expression. {code:java} return map.entrySet().stream() .collect(Collectors.toMap( e -> e.getKey(), // unfortunately IDEA suggests to change it back e -> e.getValue().getAverage() )); {code} | 3 |
| 303 | CLOV-1607 | Java8: don't instrument lambda functions when source < 1.8 | No matter what "-source" value is set, Clover instruments both expression-like and block-like lambdas. It's a behaviour slightly different from the one we have for e.g.: * -source 1.3 (it handles 'assert' as not a keyword) or * -source 1.4 (no 'enums'). Ways to improve it: 1) change Java grammar so that handling lambda functions is optional - only for source >= 1.8; otherwise Clover should throw a parse error 2) or parse lambdas also for source < 1.8 (no parse errors would be thrown, only javac will raise a compilation error), but do not add Clover's instrumentation to it {code:java} private LambdaBlockEntryEmitter instrEnterLambdaBlock(MethodSignature lambdaSignature, CloverToken leftCurly) { if (cfg.getInstrumentLambda() == LambdaInstrumentation.ALL || cfg.getInstrumentLambda() == LambdaInstrumentation.BLOCK /* add source level check*/ ) { ... {code} | 1 |
| 304 | CLOV-1608 | New colour scheme for a tag cloud and a coverage treemap in the HTML report | Customers reported that using a single, red color gradient in a coverage tree map and in tag clouds has two drawbacks: * it's harder to find which code areas require improvement * seeing always a red color is discouraging :-) | 2 |
| 305 | CLOV-1610 | Support Groovy 2.4.0 in Clover | NULL | 2 |
| 306 | CLOV-1611 | Clover doesn't support Spock 1.0 and 1.0-SNAPSHOT | It works with Spock v0.7-groovy-2.0, but it doesn't work with Spock v1.0-groovy-2.0-SNAPSHOT. The root cause is that the IGlobalExtension interface changed and it now has start() and stop() methods, which the v0.7 version did not have, and so an AbstractMethodError: null is thrown: {code} java.lang.AbstractMethodError: null at org.spockframework.runtime.GlobalExtensionRegistry.startGlobalExtensions(GlobalExtensionRegistry.java:105) at org.spockframework.runtime.RunContext.start(RunContext.java:63) at org.spockframework.runtime.RunContext.get(RunContext.java:165) at org.spockframework.runtime.Sputnik.runExtensionsIfNecessary(Sputnik.java:88) at org.spockframework.runtime.Sputnik.run(Sputnik.java:61) at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264) at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153) at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124) {code} Because of this, we cannot use the most recent features in Spock, since v0.7 is more than 2 years old. | 2 |
| 307 | CLOV-1612 | Clover fails to generate HTML report for more than one project in Eclipse | {noformat} Clover Version 4.0.3, built on January 27 2015 (build-dev) Loaded from: D:\Soft\Eclipse\eclipse-4.4-luna\plugins\com.atlassian.clover.eclipse.core_4.0.3.v20150127120908-dev.jar Clover: Developer License registered to Atlassian. [C:/Users/Marek/.workspace-eclipse-4.4/Moneybags/.clover/coverage.db, 0 seconds"C:/Users/Marek/.workspace-eclipse-4.4/javasyntax18/.clover/coverage.db, 0 seconds--report, --testsIncludePattern, C:/Users/Marek/.workspace-eclipse-4.4/Moneybags/**/*Test.java, C:/Users/Marek/.workspace-eclipse-4.4/Moneybags/**/Test*.java, C:/Users/Marek/.workspace-eclipse-4.4/javasyntax18/**/*Test.java, C:/Users/Marek/.workspace-eclipse-4.4/javasyntax18/**/Test*.java--testsExcludePattern, C:/Users/Marek/.workspace-eclipse-4.4/Moneybags/, C:/Users/Marek/.workspace-eclipse-4.4/javasyntax18/, -a, -i, C:\Users\Marek\AppData\Local\Temp\clover3525180172645953949merge, -o, C:\Users\Marek\Desktop, -t, Coverage Report, -tc, 0, -f, , -s, 0 days] Error generating report: java.lang.NumberFormatException java.lang.NumberFormatException java.math.BigDecimal.<init>(BigDecimal.java:459) java.math.BigDecimal.<init>(BigDecimal.java:728) com.atlassian.clover.cfg.Interval.initialise(Interval.java:183) com.atlassian.clover.cfg.Interval.<init>(Interval.java:121) com.atlassian.clover.eclipse.core.reports.MergeReportJob$MergeAndReport.run(MergeReportJob.java:140) com.atlassian.clover.eclipse.core.reports.ForkingReporter.main(ForkingReporter.java:25) {noformat} | 1 |
| 308 | CLOV-1613 | Unable to open generated reports in Eclipse 4.4 | Steps to reproduce: Open "Coverage Exploer", click "Run new report ..." and create any report. Next click "View report" and select it on a list. Nothing happens in the UI and the "Error log" view shows "Unhandled event exception" entry with a stack trace as follows: {noformat} java.lang.NoClassDefFoundError: Could not initialize class com.atlassian.clover.eclipse.core.reports.OpenReportOperation com.atlassian.clover.eclipse.core.views.actions.GenerateReportAction$2.widgetSelected(GenerateReportAction.java:151) org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:248) org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) org.eclipse.swt.widgets.Display.sendEvent(Display.java:4353) org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1061) org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4172) org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3761) org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1151) org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1032) org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:148) org.eclipse.ui.internal.Workbench$5.run(Workbench.java:636) org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:579) org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:135) org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134) org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104) org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:382) org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:236) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) java.lang.reflect.Method.invoke(Unknown Source) org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:648) org.eclipse.equinox.launcher.Main.basicRun(Main.java:603) org.eclipse.equinox.launcher.Main.run(Main.java:1465) {noformat} | 1 |
| 309 | CLOV-1614 | Error when closing Cloud Editor in Eclipse | Closing the "Cloud Editor" in Eclipse causes that sometimes an exception is thrown and reported in the Error Log: {noformat} Error disposing widget for : org.eclipse.e4.ui.model.application.ui.basic.impl.PartImpl Clover Coverage Cloud Report java.lang.NullPointerException org.eclipse.swt.custom.CTabFolderLayout.computeSize(CTabFolderLayout.java:39) org.eclipse.swt.widgets.Composite.computeSize(Composite.java:234) org.eclipse.swt.layout.GridData.computeSize(GridData.java:491) org.eclipse.swt.layout.GridLayout.layout(GridLayout.java:221) org.eclipse.swt.layout.GridLayout.layout(GridLayout.java:197) org.eclipse.swt.widgets.Composite.updateLayout(Composite.java:1290) org.eclipse.swt.widgets.Composite.updateLayout(Composite.java:1297) org.eclipse.swt.widgets.Composite.updateLayout(Composite.java:1297) org.eclipse.swt.widgets.Composite.updateLayout(Composite.java:1297) org.eclipse.swt.widgets.Composite.updateLayout(Composite.java:1276) org.eclipse.swt.widgets.Composite.layout(Composite.java:665) org.eclipse.swt.custom.CTabFolder.runUpdate(CTabFolder.java:3755) org.eclipse.swt.custom.CTabItem.getBounds(CTabItem.java:149) org.eclipse.swt.custom.CTabFolder.onPaint(CTabFolder.java:1993) org.eclipse.swt.custom.CTabFolder$1.handleEvent(CTabFolder.java:289) org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) org.eclipse.swt.widgets.Display.sendEvent(Display.java:4353) org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1061) org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1085) org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1070) org.eclipse.swt.widgets.Composite.WM_PAINT(Composite.java:1491) org.eclipse.swt.widgets.Control.windowProc(Control.java:4667) org.eclipse.swt.widgets.Display.windowProc(Display.java:5036) org.eclipse.swt.internal.win32.OS.VtblCall(Native Method) org.eclipse.swt.internal.ole.win32.IOleInPlaceObject.InPlaceDeactivate(IOleInPlaceObject.java:21) {noformat} and {noformat} Unhandled event loop exception java.lang.NullPointerException org.eclipse.swt.custom.CTabFolderLayout.computeSize(CTabFolderLayout.java:39) org.eclipse.swt.widgets.Composite.computeSize(Composite.java:234) org.eclipse.swt.layout.GridData.computeSize(GridData.java:491) org.eclipse.swt.layout.GridLayout.layout(GridLayout.java:221) org.eclipse.swt.layout.GridLayout.layout(GridLayout.java:197) org.eclipse.swt.widgets.Composite.updateLayout(Composite.java:1290) org.eclipse.swt.widgets.Composite.updateLayout(Composite.java:1297) org.eclipse.swt.widgets.Composite.updateLayout(Composite.java:1297) org.eclipse.swt.widgets.Composite.updateLayout(Composite.java:1297) org.eclipse.swt.widgets.Composite.updateLayout(Composite.java:1297) org.eclipse.swt.widgets.Composite.updateLayout(Composite.java:1297) org.eclipse.swt.widgets.Composite.updateLayout(Composite.java:1297) org.eclipse.swt.widgets.Composite.updateLayout(Composite.java:1297) org.eclipse.swt.widgets.Composite.updateLayout(Composite.java:1297) org.eclipse.swt.widgets.Composite.updateLayout(Composite.java:1297) org.eclipse.swt.widgets.Composite.updateLayout(Composite.java:1297) org.eclipse.swt.widgets.Composite.updateLayout(Composite.java:1276) org.eclipse.swt.widgets.Composite.setLayoutDeferred(Composite.java:1087) org.eclipse.swt.widgets.Display.runDeferredLayouts(Display.java:4196) org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3754) org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1151) org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1032) org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:148) org.eclipse.ui.internal.Workbench$5.run(Workbench.java:636) {noformat} Apparently, it fails in the CTabFolderLayout.computeSize() method: {code:java} protected Point computeSize(Composite composite, int wHint, int hHint, boolean flushCache) { CTabFolder folder = (CTabFolder)composite; CTabFolderRenderer renderer = folder.renderer; ... tabW = Math.max(tabW, renderer.computeSize(width, 2, gc, -1, -1).x); {code} the 'renderer' is null. This renderer is being set in CTabFolder.init() method and set to null in the CTabFolder.onDispose() method. It *may* be related with the: CloudEditor.dispose() which calls removeCoverageChangeListener after the super.dispose() so a refresh event may come in the meantinme or CloudEditor.createPages() which "hacks" the container layout by changing it from FillLayout to GridLayout. | 3 |
| 310 | CLOV-1617 | Automatic Clover integration does not work for <groovyc> task | *Problem:* Automatic Clover integration in Bamboo does now work for Ant Tasks containing the <groovyc> task. *Root cause:* When automatic Clover integration is enabled in Bamboo, it uses Clover's AntIntegrationListener: {noformat} ant ... -lib clover.jar -listener com.atlassian.clover.ci.AntIntegrationListener {noformat} This listener listens to Ant's build events and intercepts Ant tasks such as: <javac>, <java>, <javadoc>, <junit> However, it does not intercept the <groovyc> one. Integration with <groovyc> task is performed by the <clover-setup> task, which calls: {code:java} GroovycSupport.ensureAddedTo(antProject); {code} Note that GroovycSupport implements Ant's BuildListener. However, it cannot be passed via command line, like this: {noformat} ant ... -lib clover.jar -listener com.atlassian.clover.ant.groovy.GroovycSupport {noformat} because the GroovycSupport does not have a default constructor. *Workaround:* Call the <clover-setup> from an Ant script. For example, add the following target: {code:xml} <target name="instrument" if="with.clover"> <!-- we assume that automatic integration is enabled, which adds the '-lib clover.jar' --> <taskdef name="clover-setup" classname="com.atlassian.clover.ant.tasks.CloverSetupTask"/> <!-- from the clover.jar --> <!-- call clover-setup to intercept <groovyc> task --> <clover-setup/> <!-- This fake compilation is to cheat the automatic Clover integration, so that it won't display the "Clover reports not being generated. No Clover instrumentation was done." error message. We instrument java sources, but through the <groovyc> task; and we need to trick Clover so that it generates an HTML report at the end. --> <mkdir dir="${target.classes}"/> <javac failonerror="false" srcdir="${src.java}" excludes="**/*" destdir="${target.classes}"/> </target> <target name="compile" depends="instrument"> <groovyc destdir="${target.classes}" classpathref="build.classpath" fork="yes"> <javac source="1.7" target="1.7" debug="on" encoding="UTF8"> </javac> <src path="${src.java}"/> <src path="${src.groovy}"/> </groovyc> </target> {code} Clover's initialization will occur only if '-Dwith.clover=true' is set. Therefore, modify the Ant Task in Bamboo, for instance: {noformat} clean test -Dwith.clover=true {noformat} *Possible fixes:* 1) Add default constructor for GroovycSupport. Pass it as a second '-listener' to ant command in Bamboo. 2) Change the AntIntegrationListener so that it will intercept all <groovyc> tasks as well. | 5 |
| 311 | CLOV-1632 | Protect against deployment of instrumented code | If user calls "mvn clover2:setup install" or "mvn clover2:setup deploy", code instrumented by Clover will be installed to ~/.m2 or deployed to a repository. This may be not a desired behavior, especially if developer is not aware of it (for instance if someone switches on the automatic Clover integration in Bamboo). Furthermore, installation may occur not only for "install" or "deploy" phases expressed explicitly in the command line, but it can also happen when a plug-in runs such life cycle (mvn release:perform for instance). Implement a protection against it - in the clover2:setup check the reactor which phases are about to run and refuse code instrumentation if 'install' or 'deploy' will be called. This protection shall not be enabled by default, because there may be actually a need to install instrumented code (for instance - multiple build plans using the same local m2 cache or repository to fetch compiled artifacts and we want to measure coverage for all modules). Enable protection by a flag. e.g. {code:xml} <configuration> <repositoryPollutionProtection>true</repositoryPollutionProtection> </configuration> {code} mvn -Dmaven.clover.repositoryPollutionProtection=true Expected behavior: fail a build if repositoryPollutionProtection=true and build lifecycle contains 'install' or 'deploy' phases. *Extra:* Fail also if artifact contains a custom classifier and clover2:instrument is used (as Maven cannot handle an artifact with two classifiers). | 3 |
| 312 | CLOV-1644 | Set up developmment environment for Stash | probably on Linux VM | 2 |
| 313 | CLOV-1654 | as a plugin developer I'd like to have annotations for a package in a Clover database | Currently, annotations are available for classes and methods only: * ClassInfo.getModifiers().getAnnotations() * MethodInfo.getSignature().getAnnotations() There's nothing like PackageInfo.getAnnotations(). The reason to have this is that _package-info.java_ files may contain annotations (but no executable code). While having this adds no value for Clover instrumentation itself, it could be useful for plugin developers, who would like to read Clover database directly. For instance, this information could be used to filter classes based on the information stored on a package level. See: https://answers.atlassian.com/questions/12781852/how-to-read-package-annotations-from-clover-db | 5 |
| 314 | CLOV-1657 | Compiling Groovy code with Clover throws NPE | Clover fails to integrate with Groovyc task and throws NPE: {noformat} Clover failed to integrate with <groovyc/> java.lang.NullPointerException at com.atlassian.clover.ant.groovy.GroovycSupport.buildTestDetector(GroovycSupport.java:242) at com.atlassian.clover.ant.groovy.GroovycSupport.taskStarted(GroovycSupport.java:141) at org.apache.tools.ant.Project.fireTaskStarted(Project.java:2184) at org.apache.tools.ant.Task.perform(Task.java:344) at org.apache.tools.ant.Target.execute(Target.java:392) at org.apache.tools.ant.Target.performTasks(Target.java:413) at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399) ... {noformat} *Cause:* NPE is thrown when Clover cannot find it's AntInstrumentationConfig in project references in an Ant-based build. This can happen when a build calls <ant> or <antcall> tasks without {{inheritrefs=true}} - lack of this property causes that AntInstrumentationConfig is not passed to these calls. *Workaround:* Ensure that {{inheritrefs=true}} is used. | 1 |
| 315 | CLOV-1658 | Publish Clover-for-Scala prototype | Tasks: * request releasing it as open source * publish plugin's source code on BitBucket, * prepare and publish documentation on CAC/Clover-for-Scala. * prepare plug-in developer documentation | 5 |
| 316 | CLOV-1659 | as a user I want to use Clover with maven-scala-plugin | Integration of Clover-for-Scala with the maven-scala-plugin. Tasks: * clover2:setup shall "connect" to the maven-scala-plugin; t.b.d. how - META-INF/services? a plugin point? some properties? * clover2:clover shall include also *.scala sources Checks: * is it possible to have joint Scala-Java compilation (like with joint Groovy-Java)? Out of scope: * clover2:instr is out of scope as integration is performed using AST, not source code * clover2:optimize as test optimization is in another task | 13 |
| 317 | CLOV-1660 | as a user I want to use Clover with scalac | Integration of Clover-for-Scala with scalac command line tool. Tasks: * shall be easy - plugging via META-INF/services Checks: * is it possible to have joint Scala-Java compilation? if yes, then how it works and how to intercept both compilers? | 5 |
| 318 | CLOV-1661 | as a user I want to use Clover with SBT | Integration of Clover-for-Scala with SBT. Tasks: * write build plugin for SBT - equivalent of clover2:setup, shall intercept any scalac calls; shall add clover.jar (clover-scala.jar?) to class paths for compilation and runtime * write build plugin for SBT - equivalent of clover2:clover, shall generate reports; we may call Clover-for-Ant under the hood | 20 |
| 319 | CLOV-1662 | as a user I want to see nested functions in reports | Scala allows to nest functions inside other functions. Enhance existing HTML / XML / JSON reports in such way that we could see such nesting as well. Some of the required functionality has already been done during implementation of lambda functions for Java 8 (Clover 3.2). Review if all possible nesting combinations are implemented in Velocity templates (method-in-method, class-in-method etc). Affects: table with list of methods for a class, calculation of metrics etc. | 5 |
| 320 | CLOV-1663 | as a user I want to see for Scala exact code coverage highlighting in an HTML report | As in Scala we may have a lot of statements in a single source line, it would be very valuable to have coverage highlighting not for a single line, but for a single character in HTML reports. Similarly as we have for Eclipse and IDEA. See this issue: | 8 |
| 321 | CLOV-1664 | as a user I want to use Clover-for-Scala in IntelliJ IDEA | Tasks: * integrate with Scala complier in IDEA (using external build process) * show Scala classes in Cloverage view * show coverage highlighting in Scala editors (!) Challenge: simultaneous update of clover.db by Javac and Scalac (similar problem as for Groovy in IDE) Out of scope: * test optimization for Scala | 40 |
| 322 | CLOV-1665 | as a user I want to use Clover-for-Scala in Eclipse | Integration of Clover-for-Scala with Eclipse. Tasks: * plug into *.scala text editors * show scala classes in the 'Coverage Explorer' * intercept compilation of Scala code (!) Challenge: simultaneous updates of clover.db by Scalac and Javac (similarly as for Groovy in IDE) Out of scope: * test optimization for Scala | 40 |
| 323 | CLOV-1666 | as a user I want to run test optimization for Scala tests | It should be possible to perform test optimization for Scala test classes. Integrations: * Ant (?) * Maven * SBT * IDEA (?) * Eclipse (?) | 40 |
| 324 | CLOV-1667 | as a user I want to see smart names for classes and functions in reports | The point is that Scala code is being translated to a bytecode containing various "cryptic" names. For instance, "overloaded operators" have "$op" in method's name. Think how to reasonably represent methods, functions, inline classes, anonymous functions, case classes, traits etc etc in HTML report at least (XML / JSON are less important). | 20 |
| 325 | CLOV-1668 | Clover installs instrumented-jars in local Maven repo, in place of non-instrument ones | I'm not sure if this has been reintroduced or something else is wrong, since the CLOVKB claims it is not the case: https://confluence.atlassian.com/display/CLOVERKB/Maven+is+deploying+instrumented+jars (I _am_ using the {{instrument}} goal - followed by {{log}} and {{check}}) In the below, you can see that, e.g., {{target/clover/magnolia-module-diff-1.7-SNAPSHOT-clover-tests.jar}} gets copied to {{.../magnolia-module-diff-1.7-SNAPSHOT-tests.jar}} (without {{-clover}} qualifier!) This seems to happen for ~all artifacts except the "main" jar. (test jar, assemblies, etc..). In this case, the situation is saved by the "real" install plugin that gets executed later and overwrites those wrong artifacts. However, if we use the (newish) {{installAtEnd}} feature of the {{maven-install-plugin}}, then this doesn't happen, and we end up with instrumented jars in place of the non-instrumented ones, which has tons of ugly consequences. See for yourself with the snippet:{code:xml} <build> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-install-plugin</artifactId> <configuration> <installAtEnd>false</installAtEnd> </configuration> </plugin> </plugins> </pluginManagement> </build> {code} Why is Clover installing anything, anyway ? Shouldn't it just _attach_ the instrumented jars (and only those) to the build, and let Maven do the rest ? {noformat} [INFO] --- maven-clover2-plugin:4.0.2:check (instrument-and-check) @ magnolia-module-diff --- [INFO] [INFO] --- maven-install-plugin:2.5.2:install (default-install) @ magnolia-module-diff --- [INFO] Installing /Users/gjoseph/Dev/magnolia/git/enterprise/diff/target/clover/magnolia-module-diff-1.7-SNAPSHOT-clover.jar to /Users/gjoseph/.m2/repository/info/magnolia/magnolia-module-diff/1.7-SNAPSHOT/magnolia-module-diff-1.7-SNAPSHOT-clover.jar [INFO] Installing /Users/gjoseph/Dev/magnolia/git/enterprise/diff/pom.xml to /Users/gjoseph/.m2/repository/info/magnolia/magnolia-module-diff/1.7-SNAPSHOT/magnolia-module-diff-1.7-SNAPSHOT.pom [INFO] Installing /Users/gjoseph/Dev/magnolia/git/enterprise/diff/target/magnolia-module-diff-1.7-SNAPSHOT-bundle.zip to /Users/gjoseph/.m2/repository/info/magnolia/magnolia-module-diff/1.7-SNAPSHOT/magnolia-module-diff-1.7-SNAPSHOT-bundle.zip [INFO] Installing /Users/gjoseph/Dev/magnolia/git/enterprise/diff/target/magnolia-module-diff-1.7-SNAPSHOT-bundle.tar.gz to /Users/gjoseph/.m2/repository/info/magnolia/magnolia-module-diff/1.7-SNAPSHOT/magnolia-module-diff-1.7-SNAPSHOT-bundle.tar.gz [INFO] Installing /Users/gjoseph/Dev/magnolia/git/enterprise/diff/target/magnolia-module-diff-1.7-SNAPSHOT-tests.jar to /Users/gjoseph/.m2/repository/info/magnolia/magnolia-module-diff/1.7-SNAPSHOT/magnolia-module-diff-1.7-SNAPSHOT-tests.jar [INFO] Installing /Users/gjoseph/Dev/magnolia/git/enterprise/diff/target/clover/magnolia-module-diff-1.7-SNAPSHOT-clover-bundle.zip to /Users/gjoseph/.m2/repository/info/magnolia/magnolia-module-diff/1.7-SNAPSHOT/magnolia-module-diff-1.7-SNAPSHOT-bundle.zip [INFO] Installing /Users/gjoseph/Dev/magnolia/git/enterprise/diff/target/clover/magnolia-module-diff-1.7-SNAPSHOT-clover-bundle.tar.gz to /Users/gjoseph/.m2/repository/info/magnolia/magnolia-module-diff/1.7-SNAPSHOT/magnolia-module-diff-1.7-SNAPSHOT-bundle.tar.gz [INFO] Installing /Users/gjoseph/Dev/magnolia/git/enterprise/diff/target/clover/magnolia-module-diff-1.7-SNAPSHOT-clover-tests.jar to /Users/gjoseph/.m2/repository/info/magnolia/magnolia-module-diff/1.7-SNAPSHOT/magnolia-module-diff-1.7-SNAPSHOT-tests.jar [INFO] [INFO] <<< maven-clover2-plugin:4.0.2:instrument (instrument-and-check) < [clover]install @ magnolia-module-diff <<< [INFO] [INFO] --- maven-clover2-plugin:4.0.2:instrument (instrument-and-check) @ magnolia-module-diff --- [INFO] [INFO] --- maven-clover2-plugin:4.0.2:log (instrument-and-check) @ magnolia-module-diff --- [INFO] Clover Version 4.0.2, built on October 13 2014 (build-943) [...] [INFO] Coverage check PASSED [INFO] [INFO] --- maven-install-plugin:2.5.2:install (default-install) @ magnolia-module-diff --- [INFO] Installing /Users/gjoseph/Dev/magnolia/git/enterprise/diff/target/magnolia-module-diff-1.7-SNAPSHOT.jar to /Users/gjoseph/.m2/repository/info/magnolia/magnolia-module-diff/1.7-SNAPSHOT/magnolia-module-diff-1.7-SNAPSHOT.jar [INFO] Installing /Users/gjoseph/Dev/magnolia/git/enterprise/diff/pom.xml to /Users/gjoseph/.m2/repository/info/magnolia/magnolia-module-diff/1.7-SNAPSHOT/magnolia-module-diff-1.7-SNAPSHOT.pom [INFO] Installing /Users/gjoseph/Dev/magnolia/git/enterprise/diff/target/magnolia-module-diff-1.7-SNAPSHOT-bundle.zip to /Users/gjoseph/.m2/repository/info/magnolia/magnolia-module-diff/1.7-SNAPSHOT/magnolia-module-diff-1.7-SNAPSHOT-bundle.zip [INFO] Installing /Users/gjoseph/Dev/magnolia/git/enterprise/diff/target/magnolia-module-diff-1.7-SNAPSHOT-bundle.tar.gz to /Users/gjoseph/.m2/repository/info/magnolia/magnolia-module-diff/1.7-SNAPSHOT/magnolia-module-diff-1.7-SNAPSHOT-bundle.tar.gz [INFO] Installing /Users/gjoseph/Dev/magnolia/git/enterprise/diff/target/magnolia-module-diff-1.7-SNAPSHOT-tests.jar to /Users/gjoseph/.m2/repository/info/magnolia/magnolia-module-diff/1.7-SNAPSHOT/magnolia-module-diff-1.7-SNAPSHOT-tests.jar [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ {noformat} | 1 |
| 326 | CLOV-1672 | Ensure that Clover JAR is readable by Ant 1.9.0-1.9.1 | Ant 1.9.0/1.9.1 have a bug related with zip64 file handling: _central directory zip64 extended information extra field's length doesn't match central directory data. Expected length 0 but is 16_ While this bug has been fixed in Ant 1.9.2, it should be still possible to produce such Clover JAR file that it will be readable by buggy Ant versions as well. Ensure that new Clover 4.0.5 (and further versions) will be compatible. | 3 |
| 327 | CLOV-1675 | Grails Clover Plugin compatibility with Grails 2.4.5, 2.5.0 | New Grails versions have been released recently: * 2.4.5 24/Mar/15 * 2.5 24/Mar/15 Make Grails Clover Plugin compatible with them. | 5 |
| 328 | CLOV-1679 | MavenIntegrator shall not add arguments if they are already present in original command | This applies to: * build phases * Clover's properties Current problems: 1) The "clean" phase can be doubled For example if original command has: {noformat} mvn clean test {noformat} it becomes: {noformat} mvn clean clean clover2:setup test clover2:aggregate clover2:clover ... {noformat} 2) User cannot override default values of Clover properties For example if a property is already defined: {noformat} mvn test -Dmaven.clover.licenseLocation=/my/clover.license {noformat} MavenIntegrator adds a second one with it's own value: {noformat} mvn test -Dmaven.clover.licenseLocation=/my/clover.license -Dmaven.clover.licenseLocation=/tmp/clover.license {noformat} | 1 |
| 329 | CLOV-1682 | Repository pollution protection reports a custom classifier under Maven 2.2.x | *Problem:* Probably bug in Maven, needs further investigation. Running "clean clover2:instrument" on a simple project (no additional plugins) with repository pollution protection enabled causes a build failure. {noformat} maven-clover2-plugin-hg\src\it\pollutionProtection>mvn clean clover2:instrument -Dmaven.clover.repositoryPollutionProtection=true [INFO] Scanning for projects... [INFO] snapshot com.atlassian.maven.plugins:maven-clover2-plugin:4.0.4-SNAPSHOT: checking for updates from atlassian-internal [INFO] ------------------------------------------------------------------------ [INFO] Building Unnamed - com.atlassian.maven.plugins.sample:clover-pollution-protection:jar:1.0-SNAPSHOT [INFO] task-segment: [clean, clover2:instrument] [INFO] ------------------------------------------------------------------------ [INFO] [clean:clean {execution: default-clean}] [INFO] Deleting directory f:\Work\maven-clover2-plugin-hg\src\it\pollutionProtection\target [INFO] Preparing clover2:instrument [INFO] snapshot com.atlassian.clover:clover:4.0.4-SNAPSHOT: checking for updates from atlassian-internal [INFO] [clover2:instrumentInternal {execution: default-instrumentInternal}] [INFO] ------------------------------------------------------------------------ [ERROR] BUILD ERROR [INFO] ------------------------------------------------------------------------ [INFO] Clover's repository pollution protection is enabled. Your build produces an artifact (com.atlassian.maven.plugins.sample:clover-pollution-protection:jar:tests:1.0-SNAPSHOT) with a custom classi fier. As Maven does not support multiple classifiers for an artifact, appending second 'clover' classifier may not be handled correctly. You can: - remove a custom classifier or - configure Clover to not append the '-clover' classifier to fix it. You can also disable pollution protection (-Dmaven.clover.repositoryPollutionProtection=false) if you know that it doesn't affect your build. {noformat} Adding extra logging showed that it fails because a custom 'tests' classifier is used during a build - see XXXXXXXXXX below. {noformat} maven-clover2-plugin-hg\src\it\pollutionProtection>mvn clean clover2:instrument [INFO] Scanning for projects... [INFO] snapshot com.atlassian.maven.plugins:maven-clover2-plugin:4.0.4-SNAPSHOT: checking for updates from atlassian-internal [INFO] ------------------------------------------------------------------------ [INFO] Building Unnamed - com.atlassian.maven.plugins.sample:clover-pollution-protection:jar:1.0-SNAPSHOT [INFO] task-segment: [clean, clover2:instrument] [INFO] ------------------------------------------------------------------------ [INFO] [clean:clean {execution: default-clean}] [INFO] Preparing clover2:instrument [INFO] snapshot com.atlassian.clover:clover:4.0.4-SNAPSHOT: checking for updates from atlassian-internal [INFO] [clover2:instrumentInternal {execution: default-instrumentInternal}] [INFO] XXXXXXXXXX CLASSIFIER= com.atlassian.maven.plugins.sample:clover-pollution-protection:jar:tests:1.0-SNAPSHOT [INFO] Clover Version 4.0.4, built on April 15 2015 (build-dev) [INFO] Loaded from: d:\Data\.m2\repository\com\atlassian\clover\clover\4.0.4-SNAPSHOT\clover-4.0.4-SNAPSHOT.jar [INFO] Clover: Developer License registered to Atlassian. [INFO] Creating new database at 'f:\Work\maven-clover2-plugin-hg\src\it\pollutionProtection\target\clover\clover.db'. [INFO] Processing files at 1.8 source level. [INFO] Clover all over. Instrumented 1 file (1 package). [INFO] Elapsed time = 0,077 secs. (12,987 files/sec, 64,935 srclines/sec) [INFO] Clover Version 4.0.4, built on April 15 2015 (build-dev) [INFO] Loaded from: d:\Data\.m2\repository\com\atlassian\clover\clover\4.0.4-SNAPSHOT\clover-4.0.4-SNAPSHOT.jar [INFO] Clover: Developer License registered to Atlassian. [INFO] Updating existing database at 'f:\Work\maven-clover2-plugin-hg\src\it\pollutionProtection\target\clover\clover.db'. [INFO] Processing files at 1.8 source level. [INFO] Clover all over. Instrumented 1 file (1 package). [INFO] 1 test method detected. [INFO] Elapsed time = 0,016 secs. (62,5 files/sec, 562,5 srclines/sec) [INFO] [resources:resources {execution: default-resources}] [WARNING] Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory f:\Work\maven-clover2-plugin-hg\src\it\pollutionProtection\src\main\resources [INFO] Copying 1 resource [INFO] [compiler:compile {execution: default-compile}] [INFO] Compiling 1 source file to f:\Work\maven-clover2-plugin-hg\src\it\pollutionProtection\target\clover\classes [INFO] [resources:testResources {execution: default-testResources}] [WARNING] Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory f:\Work\maven-clover2-plugin-hg\src\it\pollutionProtection\src\test\resources [INFO] [compiler:testCompile {execution: default-testCompile}] [INFO] Compiling 1 source file to f:\Work\maven-clover2-plugin-hg\src\it\pollutionProtection\target\clover\test-classes [INFO] [surefire:test {execution: default-test}] [INFO] Surefire report directory: f:\Work\maven-clover2-plugin-hg\src\it\pollutionProtection\target\clover\surefire-reports ------------------------------------------------------- T E S T S ------------------------------------------------------- Running ATest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.168 sec Results : Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] [jar:jar {execution: default-jar}] [INFO] Building jar: f:\Work\maven-clover2-plugin-hg\src\it\pollutionProtection\target\clover\clover-pollution-protection-1.0-SNAPSHOT-clover.jar [INFO] [install:install {execution: default-install}] [INFO] Installing f:\Work\maven-clover2-plugin-hg\src\it\pollutionProtection\target\clover\clover-pollution-protection-1.0-SNAPSHOT-clover.jar to d:\Data\.m2\repository\com\atlassian\maven\plugins\sam ple\clover-pollution-protection\1.0-SNAPSHOT\clover-pollution-protection-1.0-SNAPSHOT-clover.jar [INFO] [clover2:instrument {execution: default-cli}] [INFO] XXXXXXXXXX CLASSIFIER= com.atlassian.maven.plugins.sample:clover-pollution-protection:jar:1.0-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------------ {noformat} What's interesting, running the same test but with clover2:setup not only does not fails a build (because repository pollution protection does not fail due to custom classifier if no 'clover' is used), but the artifact produced does NOT have the 'tests' classifier: {noformat} maven-clover2-plugin-hg\src\it\pollutionProtection>mvn clean clover2:setup verify [INFO] Scanning for projects... [INFO] snapshot com.atlassian.maven.plugins:maven-clover2-plugin:4.0.4-SNAPSHOT: checking for updates from atlassian-internal [INFO] ------------------------------------------------------------------------ [INFO] Building Unnamed - com.atlassian.maven.plugins.sample:clover-pollution-protection:jar:1.0-SNAPSHOT [INFO] task-segment: [clean, clover2:setup, verify] [INFO] ------------------------------------------------------------------------ [INFO] [clean:clean {execution: default-clean}] [INFO] Deleting directory f:\Work\maven-clover2-plugin-hg\src\it\pollutionProtection\target [INFO] snapshot com.atlassian.clover:clover:4.0.4-SNAPSHOT: checking for updates from atlassian-internal [INFO] [clover2:setup {execution: default-cli}] [INFO] XXXXXXXXXX CLASSIFIER= com.atlassian.maven.plugins.sample:clover-pollution-protection:jar:1.0-SNAPSHOT [INFO] Clover Version 4.0.4, built on April 15 2015 (build-dev) [INFO] Loaded from: d:\Data\.m2\repository\com\atlassian\clover\clover\4.0.4-SNAPSHOT\clover-4.0.4-SNAPSHOT.jar [INFO] Clover: Developer License registered to Atlassian. [INFO] Creating new database at 'f:\Work\maven-clover2-plugin-hg\src\it\pollutionProtection\target\clover\clover.db'. [INFO] Processing files at 1.8 source level. [INFO] Clover all over. Instrumented 1 file (1 package). [INFO] Elapsed time = 0,057 secs. (17,544 files/sec, 87,719 srclines/sec) [INFO] Clover Version 4.0.4, built on April 15 2015 (build-dev) [INFO] Loaded from: d:\Data\.m2\repository\com\atlassian\clover\clover\4.0.4-SNAPSHOT\clover-4.0.4-SNAPSHOT.jar [INFO] Clover: Developer License registered to Atlassian. [INFO] Updating existing database at 'f:\Work\maven-clover2-plugin-hg\src\it\pollutionProtection\target\clover\clover.db'. [INFO] Processing files at 1.8 source level. [INFO] Clover all over. Instrumented 1 file (1 package). [INFO] 1 test method detected. [INFO] Elapsed time = 0,011 secs. (90,909 files/sec, 818,182 srclines/sec) [INFO] [resources:resources {execution: default-resources}] [WARNING] Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory f:\Work\maven-clover2-plugin-hg\src\it\pollutionProtection\src\main\resources [INFO] Copying 1 resource [INFO] [compiler:compile {execution: default-compile}] [INFO] Compiling 1 source file to f:\Work\maven-clover2-plugin-hg\src\it\pollutionProtection\target\classes [INFO] [resources:testResources {execution: default-testResources}] [WARNING] Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory f:\Work\maven-clover2-plugin-hg\src\it\pollutionProtection\src\test\resources [INFO] [compiler:testCompile {execution: default-testCompile}] [INFO] Compiling 1 source file to f:\Work\maven-clover2-plugin-hg\src\it\pollutionProtection\target\test-classes [INFO] [surefire:test {execution: default-test}] [INFO] Surefire report directory: f:\Work\maven-clover2-plugin-hg\src\it\pollutionProtection\target\surefire-reports ------------------------------------------------------- T E S T S ------------------------------------------------------- Running ATest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.155 sec Results : Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] [jar:jar {execution: default-jar}] [INFO] Building jar: f:\Work\maven-clover2-plugin-hg\src\it\pollutionProtection\target\clover-pollution-protection-1.0-SNAPSHOT.jar [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------------ {noformat} It affects Maven 2.2.x. Does not occur in Maven 2.1.x or Maven 3.x. Summarizing, it seems that forking a parallel build life cycle causes that an artefact's classifier changes from empty to 'tests': * with clover2:instrument: {noformat} [INFO] [clover2:instrumentInternal {execution: default-instrumentInternal}] [INFO] XXXXXXXXXX CLASSIFIER= com.atlassian.maven.plugins.sample:clover-pollution-protection:jar:tests:1.0-SNAPSHOT ... [INFO] [clover2:instrument {execution: default-cli}] [INFO] XXXXXXXXXX CLASSIFIER= com.atlassian.maven.plugins.sample:clover-pollution-protection:jar:1.0-SNAPSHOT {noformat} * with clover2:setup: {noformat} [INFO] [clover2:setup {execution: default-cli}] [INFO] XXXXXXXXXX CLASSIFIER= com.atlassian.maven.plugins.sample:clover-pollution-protection:jar:1.0-SNAPSHOT {noformat} *Workaround:* * use clover2:setup instead of clover2:instrument to avoid forking life cycle or * use different Maven version or * disable the protection | 3 |
| 330 | CLOV-1683 | Grails Clover Plugin compatibility with Grails 3.x | Grails 3 has been released (3.0 GA on 31/Mar/15). It uses the Gradle build tool instead of Gant, thus we may need to have Gradle support as well. It has also various changes in API. Implement support for Grails 3 in the Grails Clover Plugin. | 5 |
| 331 | CLOV-1743 | OutOfMemoryError while flushing coverage data | {noformat} 29-May-2015 12:53:08 ERROR: java.lang.OutOfMemoryError flushing coverage for recorder /media/ephemeral0/bamboo-working-dir/BAM-CLOVER344-UT/components/bamboo-core/target/clover/clover.dbbjv36u_ia9lwdsf: Java heap space 29-May-2015 12:53:08 Exception in thread "CloverFlushThread" java.lang.OutOfMemoryError: Java heap space 29-May-2015 12:53:08 at java.util.zip.DeflaterOutputStream.<init>(DeflaterOutputStream.java:56) 29-May-2015 12:53:08 at com.cenqua.clover.util.FileUtils.createDeflateOutputStream(FileUtils.java:468) 29-May-2015 12:53:08 at com.cenqua.clover.FileBasedGlobalCoverageRecording.write(FileBasedGlobalCoverageRecording.java:39) 29-May-2015 12:53:08 at com.cenqua.clover.GlobalRecordingWriteStrategy$1.write(GlobalRecordingWriteStrategy.java:9) 29-May-2015 12:53:08 at com.cenqua.clover.BaseCoverageRecorder.write(BaseCoverageRecorder.java:108) 29-May-2015 12:53:08 at com.cenqua.clover.FixedSizeCoverageRecorder.write(FixedSizeCoverageRecorder.java:56) 29-May-2015 12:53:08 at com.cenqua.clover.BaseCoverageRecorder.flush(BaseCoverageRecorder.java:302) 29-May-2015 12:53:08 at com.cenqua.clover.BaseCoverageRecorder.flush(BaseCoverageRecorder.java:271) 29-May-2015 12:53:08 at com.cenqua.clover.BaseCoverageRecorder$CloverFlushThread.run(BaseCoverageRecorder.java:155) 29-May-2015 12:55:48 ERROR: java.lang.OutOfMemoryError flushing coverage for recorder /media/ephemeral0/bamboo-working-dir/BAM-CLOVER344-UT/components/bamboo-core/target/clover/clover.dbdozy2b_ia9lwcia: Java heap space 29-May-2015 12:55:48 Exception in thread "CloverFlushThread" java.lang.OutOfMemoryError: Java heap space 29-May-2015 12:56:03 ERROR: java.lang.OutOfMemoryError flushing coverage for recorder /media/ephemeral0/bamboo-working-dir/BAM-CLOVER344-UT/components/bamboo-api/target/clover/clover.dbjcsfjm_ia9lwcij: Java heap space 29-May-2015 12:56:03 Exception in thread "CloverFlushThread" java.lang.OutOfMemoryError: Java heap space {noformat} | 2 |
| 332 | CLOV-1752 | Drop support for IDEA versions older than 11.0.0 | NULL | 2 |
| 333 | CLOV-1757 | Make Clover compatible with IntelliJ 15 | NULL | 8 |
| 334 | CLOV-1758 | Support JDK9 by Clover | * As per https://adtmag.com/articles/2015/05/08/oracle-java.aspx we can expect to have the "feature complete" version before December, 2015. Clover should be ready till then. | 20 |
| 335 | CLOV-1761 | Add support for Eclipse Mars 4.5 version | Add support for new Eclipse Mars (June 2015) https://adtmag.com/articles/2015/06/30/eclipse-release-train.aspx | 1 |
| 336 | CLOV-1766 | Eclipse Mars 4.5 does not load platform:/ resources properly | Clover uses "platform:/" URIs to load standard Eclipse icons from eclipse-core such as a package icon, a folder icon etc. Eclipse Mars is buggy and does not always fetch these resources, as a consequence we don't see proper icons on a toolbar. Fix: bundle new icons in Clover-for-Eclipse plugin and replace "platform:/" references by new icons using local URIs. Note: try aligning look of new icons with ADG and Clover's HTML reports. | 2 |
| 337 | CLOV-1771 | AspectJ spike | NULL | 3 |
| 338 | CLOV-1775 | Rename maven-clover2-plugin artifactId to clover-maven-plugin | {panel:title=Decision|titleBGColor=#205081|bgColor=#59afe1} We are currently working on renaming Maven Clover2 Plugin according to the naming convention recommended by the Apache Maven project. Due to a fact that this is a major breaking change, forcing customers to modify their POMs, CI build plans etc, it will be done in the nearest major Clover release (currently planned for end of 2015) and appropriate migration guides will be prepared. New plugin name will be: *clover-maven-plugin* {panel} *Problem reported:* According the Maven's Plugin Naming Convention, Clover's plugin artifactID violates the Apache Maven Trademark. The artifactId should be clover2-maven-plugin. I would even suggest removing the 2 from the artifactId. [Plugin Naming Convention and Apache Maven Trademark|https://maven.apache.org/guides/plugin/guide-java-plugin-development.html] *Scope of the change:* _Before release_ (/) investigate if we can use clover-maven-plugin or must use cloverX-maven-plugin - _will be renamed to clover-maven-plugin_ (/) decide if major Clover release will be numbered 4.1.0 -or 5.0.0- (as per [Semantic Versioning|http://semver.org]) (/) prepare migration message in maven-clover2-plugin pom.xml for versions 4.0.x, similarly as it was done for Clover Core (com.cenqua.clover:clover:3.3.0) - _message added in pom in 4.0.6_ (/) rename maven-clover2-plugin artifactId for 4.1.0 / -5.0.0- , update integration tests (/) prepare migration guide for Clover 4.1 / -5.0- Release Notes (/) update Clover's Tutorial (Moneybags bundled in clover-ant.zip) -> see also CLOV-1827 _After release_ See CLOV-1828. | 3 |
| 339 | CLOV-1776 | Instrumentation error on certain projects since 4.0.5 build of Clover. | Instrumentation error on certain projects since 4.0.5 build of Clover. Making it a blocker as we can't run Clover on certain projects any longer. {code} build 27-Jul-2015 13:46:14 [INFO] Processing files at 1.8 source level. build 27-Jul-2015 13:46:17 [INFO] Instrumentation error build 27-Jul-2015 13:46:17 java.util.NoSuchElementException build 27-Jul-2015 13:46:17 java.util.ArrayDeque.getFirst(ArrayDeque.java:324) build 27-Jul-2015 13:46:17 com.atlassian.clover.instr.java.JavaRecognizer.headIdentifiersStack(JavaRecognizer.java:113) build 27-Jul-2015 13:46:17 com.atlassian.clover.instr.java.JavaRecognizer.pushIdentifierToHeadStack(JavaRecognizer.java:109) build 27-Jul-2015 13:46:17 com.atlassian.clover.instr.java.JavaRecognizer.primaryExpressionPart(JavaRecognizer.java:3368) build 27-Jul-2015 13:46:17 com.atlassian.clover.instr.java.JavaRecognizer.postfixExpression(JavaRecognizer.java:5047) build 27-Jul-2015 13:46:17 com.atlassian.clover.instr.java.JavaRecognizer.unaryExpressionNotPlusMinus(JavaRecognizer.java:5007) build 27-Jul-2015 13:46:17 com.atlassian.clover.instr.java.JavaRecognizer.unaryExpression(JavaRecognizer.java:4867) build 27-Jul-2015 13:46:17 com.atlassian.clover.instr.java.JavaRecognizer.multiplicativeExpression(JavaRecognizer.java:4817) build 27-Jul-2015 13:46:17 com.atlassian.clover.instr.java.JavaRecognizer.additiveExpression(JavaRecognizer.java:4787) build 27-Jul-2015 13:46:17 com.atlassian.clover.instr.java.JavaRecognizer.shiftExpression(JavaRecognizer.java:4754) build 27-Jul-2015 13:46:17 com.atlassian.clover.instr.java.JavaRecognizer.relationalExpression(JavaRecognizer.java:4706) build 27-Jul-2015 13:46:17 com.atlassian.clover.instr.java.JavaRecognizer.equalityExpression(JavaRecognizer.java:4673) build 27-Jul-2015 13:46:17 com.atlassian.clover.instr.java.JavaRecognizer.andExpression(JavaRecognizer.java:4654) build 27-Jul-2015 13:46:17 com.atlassian.clover.instr.java.JavaRecognizer.exclusiveOrExpression(JavaRecognizer.java:4635) build 27-Jul-2015 13:46:17 com.atlassian.clover.instr.java.JavaRecognizer.inclusiveOrExpression(JavaRecognizer.java:4616) build 27-Jul-2015 13:46:17 com.atlassian.clover.instr.java.JavaRecognizer.logicalAndExpression(JavaRecognizer.java:4597) build 27-Jul-2015 13:46:17 com.atlassian.clover.instr.java.JavaRecognizer.logicalOrExpression(JavaRecognizer.java:4578) build 27-Jul-2015 13:46:17 com.atlassian.clover.instr.java.JavaRecognizer.conditionalExpression(JavaRecognizer.java:4549) build 27-Jul-2015 13:46:17 com.atlassian.clover.instr.java.JavaRecognizer.conditionalExpression2(JavaRecognizer.java:5558) build 27-Jul-2015 13:46:17 com.atlassian.clover.instr.java.JavaRecognizer.annMemberValue2(JavaRecognizer.java:5528) build 27-Jul-2015 13:46:17 com.atlassian.clover.instr.java.JavaRecognizer.annMemberValuePair(JavaRecognizer.java:5465) build 27-Jul-2015 13:46:17 com.atlassian.clover.instr.java.JavaRecognizer.annotation2(JavaRecognizer.java:1509) build 27-Jul-2015 13:46:17 com.atlassian.clover.instr.java.JavaRecognizer.annotation(JavaRecognizer.java:667) build 27-Jul-2015 13:46:17 com.atlassian.clover.instr.java.JavaRecognizer.packageDefinition(JavaRecognizer.java:593) build 27-Jul-2015 13:46:17 com.atlassian.clover.instr.java.JavaRecognizer.compilationUnit(JavaRecognizer.java:540) build 27-Jul-2015 13:46:17 com.atlassian.clover.instr.java.Instrumenter.instrument(Instrumenter.java:212) build 27-Jul-2015 13:46:17 com.atlassian.clover.instr.java.Instrumenter.instrument(Instrumenter.java:125) build 27-Jul-2015 13:46:17 com.atlassian.clover.CloverInstr.execute(CloverInstr.java:76) build 27-Jul-2015 13:46:17 com.atlassian.clover.CloverInstr.mainImpl(CloverInstr.java:54) build 27-Jul-2015 13:46:17 com.atlassian.maven.plugin.clover.internal.instrumentation.AbstractInstrumenter.instrumentSources(AbstractInstrumenter.java:197) build 27-Jul-2015 13:46:17 com.atlassian.maven.plugin.clover.internal.instrumentation.AbstractInstrumenter.instrument(AbstractInstrumenter.java:72) build 27-Jul-2015 13:46:17 com.atlassian.maven.plugin.clover.CloverInstrumentInternalMojo.execute(CloverInstrumentInternalMojo.java:289) build 27-Jul-2015 13:46:17 com.atlassian.maven.plugin.clover.CloverSetupMojo.execute(CloverSetupMojo.java:31) build 27-Jul-2015 13:46:17 org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:132) build 27-Jul-2015 13:46:17 org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208) build 27-Jul-2015 13:46:17 org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) build 27-Jul-2015 13:46:17 org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) build 27-Jul-2015 13:46:17 org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116) build 27-Jul-2015 13:46:17 org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80) build 27-Jul-2015 13:46:17 org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51) build 27-Jul-2015 13:46:17 org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:120) build 27-Jul-2015 13:46:17 org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:347) build 27-Jul-2015 13:46:17 org.apache.maven.DefaultMaven.execute(DefaultMaven.java:154) build 27-Jul-2015 13:46:17 org.apache.maven.cli.MavenCli.execute(MavenCli.java:584) build 27-Jul-2015 13:46:17 org.apache.maven.cli.MavenCli.doMain(MavenCli.java:213) build 27-Jul-2015 13:46:17 org.apache.maven.cli.MavenCli.main(MavenCli.java:157) build 27-Jul-2015 13:46:17 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) build 27-Jul-2015 13:46:17 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) build 27-Jul-2015 13:46:17 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) build 27-Jul-2015 13:46:17 java.lang.reflect.Method.invoke(Method.java:483) build 27-Jul-2015 13:46:17 org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289) build 27-Jul-2015 13:46:17 org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229) build 27-Jul-2015 13:46:17 org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415) build 27-Jul-2015 13:46:17 org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356) build 27-Jul-2015 13:46:17 [INFO] {code} | 2 |
| 340 | CLOV-1779 | Groovy code with Generics throw NPEs | Starting with Clover version 4.0.1 when running JUnit tests against clover instrumented code I am getting a null pointer exception when attempting to call this method: {code:java} // in DateUtil.groovy static <T extends Date> T copy(T date) { (T) date?.clone() } {code} It seems like something has changed with the instrumentation. Either of these two other variations of this same code *doesn't* have this problem: {code:java} static Date copy(Date date) { date?.clone() } static def copy(def date) { date?.clone() } {code} Here's the top of the stacktrace: {noformat} java.lang.NullPointerException com.sun.beans.TypeResolver.resolve(TypeResolver.java:203) com.sun.beans.TypeResolver.resolve(TypeResolver.java:218) com.sun.beans.TypeResolver.resolveInClass(TypeResolver.java:96) java.beans.FeatureDescriptor.getParameterTypes(FeatureDescriptor.java:387) java.beans.MethodDescriptor.setMethod(MethodDescriptor.java:116) java.beans.MethodDescriptor.<init>(MethodDescriptor.java:72) java.beans.MethodDescriptor.<init>(MethodDescriptor.java:56) java.beans.Introspector.getTargetMethodInfo(Introspector.java:1205) java.beans.Introspector.getBeanInfo(Introspector.java:426) java.beans.Introspector.getBeanInfo(Introspector.java:173) groovy.lang.MetaClassImpl$15.run(MetaClassImpl.java:3244) java.security.AccessController.doPrivileged(Native Method) groovy.lang.MetaClassImpl.addProperties(MetaClassImpl.java:3242) groovy.lang.MetaClassImpl.initialize(MetaClassImpl.java:3225) org.codehaus.groovy.reflection.ClassInfo.getMetaClassUnderLock(ClassInfo.java:222) org.codehaus.groovy.reflection.ClassInfo.getMetaClass(ClassInfo.java:253) org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.getMetaClass(MetaClassRegistryImpl.java:255) org.codehaus.groovy.runtime.InvokerHelper.getMetaClass(InvokerHelper.java:859) org.codehaus.groovy.runtime.callsite.CallSiteArray.createCallStaticSite(CallSiteArray.java:72) org.codehaus.groovy.runtime.callsite.CallSiteArray.createCallSite(CallSiteArray.java:159) org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45) org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108) org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116) com.surescripts.common.DateUtilTest.clone_NonNullValue(DateUtilTest.groovy:16) {noformat} | 3 |
| 341 | CLOV-1780 | Add migration message in maven-clover2-plugin POM | (/) investigate if we can use clover-maven-plugin or must use cloverX-maven-plugin -> it would be great to have just clover- instead of cloverX- to avoid changing a number in future (?) decide if major Clover release will be numbered 4.1.0 or 5.0.0 (as per Semantic Versioning) -> it may affect whether it will be named clover4- or clover-5 (/) prepare migration message in maven-clover2-plugin pom.xml for versions 4.0.x, similarly as it was done for Clover Core (com.cenqua.clover:clover:3.3.0) -> deliver in Clover 4.0.6, 4.0.7, ... to be considered: (x) prepare a fork of the plugin and release under two names since 4.0.6? (x) add an extra migration warning printed by the clover2:setup / clover2:instr goal? | 2 |
| 342 | CLOV-1784 | Extend interfaces to manipulate test optimization | Interface to manipulate test optimization: * to reorganize optimized test sets * to manipulate content the test optimization snapshot file | 2 |
| 343 | CLOV-1785 | Extend database format to handle statements and methods in a file | Allow better modelling of file-level statements and methods so that we can better support languages like Ruby which support top-level scripting constructs. Example: {code:java} session.enterFile(..); session.enterMethod(...); // top-level-method, not inside a class ... // some statements ... session.exitMethod(); ... session.addStatement(...); // top-level-statement, not inside a class or a method ... session.exitFile(); {code} Some preparation have been already done for Java 8 (Clover 3.2). Things to be checked: * how our code calculates the start/end line/col range for a statement/method outside a class * how it calculates code metrics for a file having top-level statements/methods * how it handles exclusion filters (statement/method regexp) * how it handles nested entities (method-in-method etc) Things to be implemented: * take into account these top-level statements/methods in reporting ** show in XML / HTML / PDF / JSON ** render lines ** show in tables etc Out of scope: * test optimization Note: Looking at how Clojure is written, for any Clojure file there would only ever be one FileInfo containing lots of StatementInfos and MethodInfos but no ClassInfos. | 3 |
| 344 | CLOV-1787 | Rename ClassInfo to TypeInfo | ClassInfo is just OK for Java and Groovy (we have classes). But we also have enums, interfaces and annotations! And in other languages we also have closures (Groovy), traits (Groovy, Scala) etc. Thus the name ClassInfo does not suit well for other languages. Rename ClassInfo to something better. TypeInfo might be better. | 1 |
| 345 | CLOV-1788 | Make session.enterClass() more language-independent | Clean up InstrumentationSession.enterClass(..., boolean isInterface, boolean isEnum, boolean isAnnotation) so that it instead takes a LanguageConstruct to indicated what it is which is then embedded in ClassInfo. This divorces this part of the API from Java allowing us to model languages like Scala who have things like traits, singleton objects, etc. This may require a separate LanguageConstruct-like type (TypeConstruct ?) as it will likely need to be smarter than LanguageConstruct and be able to answer some basic questions Clover may need to ask e.g. {code:java} if (!typeInfo.getConstruct().isAbstract(typeInfo)) { //Java interfaces and annotations are always abstract, Scala trait is sometimes abstract, ... //include in the report } {code} The example above is a bit fake because surely we could determine if a TypeInfo is abstract by traversing it but there may be situations where we need to ask similar questions. | 3 |
| 346 | CLOV-1789 | Add possibility to add custom properties for code elements | Introduce a base interface to ClassInfo, MethodInfo, PackageInfo, FileInfo, StatementInfo, BranchInfo which allows API clients to add arbitrary properties to the model. They values should be raw types, possible Serializable objects too. This should allow instrumentation providers better answer questions Clover may have about the model they've produced. Something like: interface CustomInfo - getProperties(): Map<String, Object> - setProperty(String, Object) - getProperty(String) interface FileInfo extends ..., CustomInfo interface TypeInfo extends ..., CustomInfo interface MethodInfo extends ..., CustomInfo interface BranchInfo extends ..., CustomInfo interface StatementInfo extends ..., CustomInfo | 2 |
| 347 | CLOV-1790 | Rename StatementInfo to ExpressionInfo | Rename StatementInfo to ExpressionInfo in the API. Java is the odd one out here. Scala, Clojure etc all have expressions as there basic unit of execution. A statement is an expression with no result. | 1 |
| 348 | CLOV-1792 | Drop classic HTML report | remove classic reports in Clover * report type='classic' print error? or warning and ignore... * remove old velocity templates * drop libraries ** Overlibvms not until we drop Classic reports (Clover 4.1) ** Utils.js (rewrite query parsing into clover.js) ** sorttable.js | 2 |
| 349 | CLOV-1793 | Drop Grails 1.3 | * remove legacy code (if any) | 2 |
| 350 | CLOV-1794 | Drop Eclipse 3.6 and 3.7 | * compile against eclipse 4.2 * fix deprecation warnings etc * remove legacy code (if any) * bump version numbers in feature name | 1 |
| 351 | CLOV-1795 | Remove --style from Command line processors | {{--style}} argument has been deprecated in 4.1.0 it should be removed in next major version 4.2.0. Scope: * remove HtmlReporter#Style * update docs i necessary * cleanup all TODO CLOV-1795 | 1 |
| 352 | CLOV-1797 | Support for IDEA 14.1.5 | It should work but let's be sure. http://blog.jetbrains.com/idea/2015/09/intellij-idea-14-1-5-update-is-out/ | 1 |
| 353 | CLOV-1800 | Walk AST and store file and type info in database | Walk the AST tree and handle FileInfo and ClassInfo (TypeInfo) elements - register them in Clover database. Print them in reports. We shall handle Scala's class / object / trait types. (including anonymous?) | 8 |
| 354 | CLOV-1801 | Walk AST and store method info in a database | Walk AST and register methods and functions (including inline / anonymous ones?) in a database. Print them in reports. To be considered: naming convention. | 8 |
| 355 | CLOV-1802 | Walk AST and store statement info in a database | NULL | 8 |
| 356 | CLOV-1804 | Add support for Eclipse Mars.1 | Eclipse Mars.1 was released on 01.10. Make sure Clover is compatible by: * smoke testing * adding new version to Eclipse versions matrix. | 1 |
| 357 | CLOV-1808 | StringIndexOutOfBoundsException in CloverStartup.evaluateDaysLeft | Clover fails to decode the license key. Stacktrace: {noformat} Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: 47 at java.lang.String.charAt(String.java:646) at com.atlassian.clover.CloverStartup.evaluateDaysLeft(CloverStartup.java:334) at com.atlassian.clover.CloverStartup.loadLicense(CloverStartup.java:122) at com.atlassian.clover.CloverStartup.loadLicense(CloverStartup.java:26) at com.atlassian.clover.CloverInstr.mainImpl(CloverInstr.java:45) at com.atlassian.maven.plugin.clover.internal.instrumentation.AbstractInstrumenter.instrumentSources(AbstractInstrumenter.java:196) at com.atlassian.maven.plugin.clover.internal.instrumentation.AbstractInstrumenter.instrument(AbstractInstrumenter.java:71) at com.atlassian.maven.plugin.clover.CloverInstrumentInternalMojo.execute(CloverInstrumentInternalMojo.java:290) at com.atlassian.maven.plugin.clover.CloverSetupMojo.execute(CloverSetupMojo.java:30) at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager. java:134): .. 11 more {noformat} | 1 |
| 358 | CLOV-1817 | Fix colors of test passed / failed / error icons in Eclipse | Currently we use dark blue color for a failed test. It's not contrast enough compared to the green one. Furthermore, we use a red background for a "FAIL" status label, which is not consistent. Also, a green background used for a "PASS" label is different from the green dot in the icon. Current colors used: green-pass, blue-fail, red-error are the same as in Eclipse's JUnit view. Consider also changing a dot to three different figures to make it accessible for color-blinded people. For instance: * light green circle - pass * dark blue triangle - fail * red square - error | 1 |
| 359 | CLOV-1823 | Test optimization in Eclipse Mars 4.5.1 keeps running one test | Steps to reproduce: * rebuild a project, clean database and optimization snapshot * two times on 'run optimized' button, for the first time it runs all test, for the second time it runs one test (and should none) | 1 |
| 360 | CLOV-1824 | Add IDEA 14.0.4 to a test matrix | There are differences in app behaviour between IDEA 14.0.x and 14.1.x. As we're testing Clover against 12.1.7 and 13.0.0, it'd be good to add also 12.0.4, 13.1.6, 14.0.4 to our test matrix. This way we will cover IDEA 12.0, 12.1, 13.0, 13.1, 14.0 and 14.1. | 1 |
| 361 | CLOV-1825 | Add more debug logging for clover2:aggregate | Currently, it's not known why a project has no child databases and what user can do with it. | 1 |
| 362 | CLOV-1827 | Update Clover Tutorial | * use source=1.6 instead of 1.4 * download required JARs (build*.xml) * do not require env.GROOVY_HOME set to 1.7 * rename 'test' to 'test.run' * remove cloverjunitlib.xml * convert unit tests to JUnit4 * simplify goals * use clover-maven-plugin | 1 |
| 363 | CLOV-1828 | Rename maven-clover2-plugin to clover-maven-plugin (post-release tasks) | *Scope of the change:* _Before release_ See CLOV-1775. _After release_ (/) update documentation: * (/) on confluence.atlassian.com, * (/) docs.atlassian.com, * (/) answers.atlassian.com (rename all references of maven-clover2-plugin), * (?) add comments on stackoverflow -> not doing * (!) update Bamboo Clover Plugin (automatic integration shall use new maven plugin) -> BAM-16590 tracked in CLOV-1859 * (/) check Hudson / Jenkins Clover Plugin if they have any references -> _no references_ * (/) update Clover Examples repository optional (not doing): * move repository to bitbucket.org/atlassian/clover-maven-plugin ** note that bitbucket does not support redirects from old to new url - https://bitbucket.org/site/master/issues/6325/need-a-forwarder-option-for-renamed-repos ** thus we'd have to a) clone the repo to new location, b) set old repo as read-only and add a notice in README, c) update URLs in pom.xml | 2 |
| 364 | CLOV-1834 | Instrumentation failure of an annotation inside the catch clause | Clover is failing to instrument below section of java 7 code {code} try { innerStream.close(); } catch (@SuppressWarnings("unused") final IOException e) { // ignore } {code} This is a perfectly valid java 7 syntax but clover instrumentation fails at @SuppressWarnings("unused") annotation. | 1 |
| 365 | CLOV-1835 | Unicode 0x200B (zero-width whitespace) causes instrumentation failure | JDK 6 implements Unicode 4.0. In this version of Unicode, the zero-width whitespace character (0x200B) is being treated as a whitespace. JDK 7 implements Unicode 6.0. In this version of Unicode, the zero-width whitespace has been reclassified to the 'format character' group (other characters in this group are, for example, left-/right- text direction markers). Thus, Java compiler in JDK 6 allows to use 0x200B as a normal whitespace character, e.g. separating symbols. The Java compiler since JDK 7 silently ignores the 0x200B, which means that it cannot be used to separate symbols anymore. However you can put this character virtually in any place, e.g.: {code:java} void this<200B>Is<200B>MyMethod(); {code} Clover fails on parsing the 200B character: {noformat} Xyz.java:287:90:unexpected char: 0x200B at com.atlassian.clover.instr.java.Instrumenter.instrument(Instrumenter.java:166) at com.atlassian.clover.CloverInstr.execute(CloverInstr.java:76) at com.atlassian.clover.CloverInstr.mainImpl(CloverInstr.java:54) at ... {noformat} *Planned fix:* * Ignore 200B characters in Java 7+. Treat 200B character as space in Java 6. * Question: Shall it be based on source level setting or the JDK detected? * Question: which other control characters needs to be ignored by Clover? * Question: which other whitespace characters (other than space, \t, \n, \r) shall be recognized by Clover parser? *Workaround:* Remove all 200B character occurrences from the source code. | 2 |
| 366 | CLOV-1841 | Prepare feature analysis of JCov tool | Analyse https://wiki.openjdk.java.net/display/CodeTools/jcov and publish on https://confluence.atlassian.com/display/CLOVER/Comparison+of+code+coverage+tools | 2 |
| 367 | CLOV-1846 | IntelliJ Plugin should ask for rebuilding project after changing exclusions | Currently it doesn't always ask which sometime may lead to {{ClassNotFoudException}} h2. Preconditions IntelliJ IDEA with Clover installed h2. Repro steps # Clean project and coverage db # Exclude some class with context menu # Run tests # Wait for exception h2. Expected result # Clean project and coverage db # Exclude some class with context menu # Clover asks user for rebuilding the project. | 1 |
| 368 | CLOV-1847 | IntelliJ Plugin should not use UI thread to generate Cloud report | Currently Clover generates Cloud report in UI thread, it can take couple of seconds with bigger projects causing whole UI to freeze. Let's try to move it back to background somehow. | 2 |
| 369 | CLOV-1848 | Add IntelliJ 15.0.2 to test matrix | Add IntelliJ 15.0.2 to test matrix after it being released. Currently there was RC released. | 1 |
| 370 | CLOV-1852 | Gradle Spec | Simple spec showing what do we want to achieve and what's the MVP for 4.2.0 | 1 |
| 371 | CLOV-1855 | Drop support for IntelliJ IDEA 11.x | Scope: * drop support for IntelliJ IDEA 11.x * refactor deprecated code * remove IntelliJ 11.x from test matrix * update plugin.xml to tell correct minimal version of IntelliJ IDEA which is supported. | 1 |
| 372 | CLOV-1856 | IntelliJ IDEA plugin with version 4.1.1 shows wrong supported version | Site for Clover on IntelliJ plugin page indicates Clover 4.1.1 supports Idea 9x however it's not true. Update plugin.xml to show correct version. https://plugins.jetbrains.com/plugin/?id=132 | 1 |
| 373 | CLOV-1859 | Update Bamboo Clover Plugin (automatic integration shall use new clover-maven-plugin) | Place holder for BAM-16590 | 1 |
| 374 | CLOV-1861 | Create simple Gradle repository and run Bamboo plan to test it | Scope: * Create simple Gradle plugin as a holder for Clover for Gradle * Create Bamboo plan, which will: ** fetch source code ** run tests | 1 |
| 375 | CLOV-1884 | CloverCompilerAdapter should look for Javac.compileList also in super classes | It may happen that user will wrap or subclass the Apache's Javac field. In such case, Clover won't be able to find and set this field and break the build. The CloverCompilerAdapter should look it up in a class hierarchy. We can use Apache's FieldUtils for this purpose. | 1 |
| 376 | CLOV-1887 | Provide high level instrumentation task which will instrument sources to given directory | Consider only single module java projects for now | 4 |
| 377 | CLOV-1888 | Provide high level task which will execute tests in simple module java project | NULL | 4 |
| 378 | CLOV-1890 | Provide simple reporting task which generate Clover report | Let's stick to html report only for now. Don't bother about multi project build for now | 2 |
| 379 | CLOV-1892 | Make Clover instrumentation work in multi java project builds | NULL | 3 |
| 380 | CLOV-1896 | Clover shall be able to instrument Test sources | NULL | 2 |
| 381 | CLOV-1907 | TestWithClover task must be aware of instrumented test sources and modify test classpath accordingly | NULL | 2 |
| 382 | CLOV-1951 | Support Eclipse 4.6 Neon | Make Clover-for-Eclipse compatible with Eclipse Neon. Problems found so far: 1. Running optimised tests throws an exception {code:java} eclipse.buildId=4.6.0.I20160525-2000 java.version=1.8.0_51 java.vendor=Oracle Corporation BootLoader constants: OS=macosx, ARCH=x86_64, WS=cocoa, NL=en_US Framework arguments: -product org.eclipse.epp.package.java.product -product org.eclipse.epp.package.java.product -product org.eclipse.epp.package.java.product Command-line arguments: -os macosx -ws cocoa -arch x86_64 -product org.eclipse.epp.package.java.product -product org.eclipse.epp.package.java.product -data file:/Users/mparfianowicz/.eclipse-4.6-workspace/ -product org.eclipse.epp.package.java.product org.eclipse.ui Error Tue Jun 14 15:51:17 CEST 2016 Unhandled event loop exception org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.NullPointerException) at org.eclipse.swt.SWT.error(SWT.java:4533) at org.eclipse.swt.SWT.error(SWT.java:4448) at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185) at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4024) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3700) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$4.run(PartRenderingEngine.java:1121) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1022) at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:150) at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:687) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:604) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:148) at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:138) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:388) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:243) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:673) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:610) at org.eclipse.equinox.launcher.Main.run(Main.java:1519) Caused by: java.lang.NullPointerException at com.atlassian.clover.eclipse.testopt.views.actions.SavingsNotificationContributionItem$1$1.run(SavingsNotificationContributionItem.java:33) at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:182) ... 23 more {code} 2. Deprecated API (/) SubProgressMonitor in org.eclipse.core.runtime has been deprecated ViewerSorter in org.eclipse.jface.viewers has been deprecated setSorter(ViewerSorter) in StructuredViewer has been deprecated Main(PrintWriter,PrintWriter,boolean) in Main has been deprecated 3. Code incompatibility (/) CoverageAnnotationModel is not abstract and does not override abstract method getAnnotationIterator() in IAnnotationModel | 3 |
| 383 | CLOV-1953 | Clover does not instrument all nodes in Groovy AST | Problem was reproduced in Groovy 2.4.3 and 2.4.4: https://answers.atlassian.com/questions/39141626/why-is-clover-showing-green-on-gray https://answers.atlassian.com/questions/39141622/incomplete-clover-coverage-in-grails-2.5-integration-testing | 5 |
| 384 | CLOV-1955 | Support InteliiJ IDEA 2016.2 | * add 2016.2.0 to test matrix and verify all tests are green * switch clover-idea to compile against 2016.2 API, check deprecation warnings, compilation problems | 1 |
| 385 | CLOV-1960 | Instrument Groovy traits and show code coverage for them | *Current status* Groovy 2.3 introduced traits - a code construct for composition of behaviours: * http://docs.groovy-lang.org/latest/html/documentation/core-traits.html Currently Clover handles them like an interface - it records the class name in a database but it does not instrument the class, so it shows no code coverage in reports for them. Side note: Clover's reports by default do not show classes containing no executable code (empty classes, plain enums, interfaces with no default methods, traits) - you can show them by setting [showEmpty=true|https://confluence.atlassian.com/display/CLOVER/clover-report] parameter. *Proposed improvement* Instrument Groovy traits like normal classes or enums. Side note: Groovy 2.5 will probably not introduce interfaces with default methods (like in Java 8). * http://docs.groovy-lang.org/next/html/documentation/#_interface *Technical obstacles* * method '$CLV_R$' is private but should be public in a trait * method 'com_atlassian_clover.CoverageRecorder $CLV_R$()' must not be static; only fields may be static in a trait * field '$CLV_R$' is not 'public static final' in a trait | 8 |