Skip to content

Commit db12b1f

Browse files
committed
Implement rcov sensor to capture overall coverage from rcov report. (Report must be located in coverage/rcov)
1 parent 70f7bde commit db12b1f

3 files changed

Lines changed: 60 additions & 5 deletions

File tree

pom.xml

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,11 @@
2121
<artifactId>sonar-plugin-api</artifactId>
2222
<version>2.10</version>
2323
</dependency>
24-
25-
<!-- add your dependencies here -->
26-
27-
<!-- unit tests -->
24+
<dependency>
25+
<groupId>org.jenkins-ci.plugins</groupId>
26+
<artifactId>rubyMetrics</artifactId>
27+
<version>1.5.1-SNAPSHOT</version>
28+
</dependency>
2829
<dependency>
2930
<groupId>org.codehaus.sonar</groupId>
3031
<artifactId>sonar-testing-harness</artifactId>

src/main/java/com/pica/sonarplugins/ruby/RubyPlugin.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.pica.sonarplugins.ruby.core.Ruby;
44
import com.pica.sonarplugins.ruby.core.RubySourceCodeColorizer;
55
import com.pica.sonarplugins.ruby.core.RubySourceImporter;
6+
import com.pica.sonarplugins.ruby.rcov.RcovSensor;
67
import org.sonar.api.Plugin;
78
import org.sonar.api.Properties;
89

@@ -30,7 +31,8 @@ public List getExtensions() {
3031
Ruby.class,
3132
RubySensor.class,
3233
RubySourceImporter.class,
33-
RubySourceCodeColorizer.class
34+
RubySourceCodeColorizer.class,
35+
RcovSensor.class
3436
);
3537
}
3638

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package com.pica.sonarplugins.ruby.rcov;
2+
3+
import com.pica.sonarplugins.ruby.core.RubyFile;
4+
import hudson.plugins.rubyMetrics.rcov.RcovParser;
5+
import hudson.plugins.rubyMetrics.rcov.model.RcovResult;
6+
import org.slf4j.Logger;
7+
import org.slf4j.LoggerFactory;
8+
import org.sonar.api.batch.Sensor;
9+
import org.sonar.api.batch.SensorContext;
10+
import org.sonar.api.measures.CoreMetrics;
11+
import org.sonar.api.resources.Project;
12+
import org.sonar.api.resources.ProjectFileSystem;
13+
14+
import java.io.File;
15+
import java.io.IOException;
16+
17+
public class RcovSensor implements Sensor {
18+
19+
private static final Logger LOG = LoggerFactory.getLogger(RcovSensor.class);
20+
21+
public boolean shouldExecuteOnProject(Project project) {
22+
return true;
23+
}
24+
25+
public void analyse(Project project, SensorContext context) {
26+
//TODO: Configure rcov location
27+
File reportFile = new File("coverage/rcov/");
28+
try {
29+
parseReport(project.getFileSystem(), reportFile, context);
30+
} catch (IOException e) {
31+
LOG.error("Error analysing project.", e);
32+
}
33+
34+
}
35+
36+
protected void parseReport(ProjectFileSystem fileSystem, File rootFile, final SensorContext context) throws IOException {;
37+
//Coverage will be assigned to the "root" ruby file
38+
RubyFile rootRubyFile = RubyFile.fromIOFile(fileSystem.getBasedir(), fileSystem.getSourceDirs());
39+
40+
RcovParser parser = new RcovParser(rootFile);
41+
//TODO: Dynamic coverage file locations
42+
File coverageFile = new File("coverage/rcov/index.html");
43+
RcovResult result = parser.parse(coverageFile);
44+
45+
context.saveMeasure(rootRubyFile, CoreMetrics.COVERAGE, result.getCodeCoverageFloat().doubleValue());
46+
}
47+
48+
@Override
49+
public String toString() {
50+
return "Ruby RcovSensor";
51+
}
52+
}

0 commit comments

Comments
 (0)