Skip to content

Commit d5e4c9b

Browse files
authored
Merge pull request #117 from eyalroth/bug/68/bad-encoding
Fix incorrect reading of source files when generating an HTML report
2 parents cce88d7 + d507880 commit d5e4c9b

File tree

4 files changed

+26
-1
lines changed

4 files changed

+26
-1
lines changed

src/main/groovy/org/scoverage/ScoverageAggregate.groovy

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ class ScoverageAggregate extends DefaultTask {
2424
@Input
2525
final Property<Boolean> deleteReportsOnAggregation = project.objects.property(Boolean)
2626

27+
@Input
28+
final Property<String> sourceEncoding = project.objects.property(String)
29+
2730
// TODO - consider separate options for `report` and `aggregate` tasks
2831
@Input
2932
final Property<Boolean> coverageOutputCobertura = project.objects.property(Boolean)
@@ -60,6 +63,7 @@ class ScoverageAggregate extends DefaultTask {
6063
rootDir,
6164
reportDir.get(),
6265
coverage.get(),
66+
sourceEncoding.get(),
6367
coverageOutputCobertura.get(),
6468
coverageOutputXML.get(),
6569
coverageOutputHTML.get(),

src/main/groovy/org/scoverage/ScoveragePlugin.groovy

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,13 @@ class ScoveragePlugin implements Plugin<PluginAware> {
104104
def globalReportTask = project.tasks.register(REPORT_NAME, ScoverageAggregate)
105105
def globalCheckTask = project.tasks.register(CHECK_NAME, OverallCheckTask)
106106

107+
107108
project.afterEvaluate {
109+
def detectedSourceEncoding = compileTask.scalaCompileOptions.encoding
110+
if (detectedSourceEncoding == null) {
111+
detectedSourceEncoding = "UTF-8"
112+
}
113+
108114
// calling toList() on TaskCollection is required
109115
// to avoid potential ConcurrentModificationException in multi-project builds
110116
def testTasks = project.tasks.withType(Test).toList()
@@ -123,6 +129,7 @@ class ScoveragePlugin implements Plugin<PluginAware> {
123129
reportDir = taskReportDir
124130
sources = extension.sources
125131
dataDir = extension.dataDir
132+
sourceEncoding.set(detectedSourceEncoding)
126133
coverageOutputCobertura = extension.coverageOutputCobertura
127134
coverageOutputXML = extension.coverageOutputXML
128135
coverageOutputHTML = extension.coverageOutputHTML
@@ -139,6 +146,7 @@ class ScoveragePlugin implements Plugin<PluginAware> {
139146
group = 'verification'
140147
runner = scoverageRunner
141148
reportDir = extension.reportDir
149+
sourceEncoding.set(detectedSourceEncoding)
142150
dirsToAggregateFrom = reportDirs
143151
deleteReportsOnAggregation = false
144152
coverageOutputCobertura = extension.coverageOutputCobertura
@@ -171,6 +179,7 @@ class ScoveragePlugin implements Plugin<PluginAware> {
171179
group = 'verification'
172180
runner = scoverageRunner
173181
reportDir = extension.reportDir
182+
sourceEncoding.set(detectedSourceEncoding)
174183
deleteReportsOnAggregation = extension.deleteReportsOnAggregation
175184
coverageOutputCobertura = extension.coverageOutputCobertura
176185
coverageOutputXML = extension.coverageOutputXML

src/main/groovy/org/scoverage/ScoverageReport.groovy

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ class ScoverageReport extends DefaultTask {
2828
@OutputDirectory
2929
final Property<File> reportDir = project.objects.property(File)
3030

31+
@Input
32+
final Property<String> sourceEncoding = project.objects.property(String)
33+
3134
@Input
3235
final Property<Boolean> coverageOutputCobertura = project.objects.property(Boolean)
3336
@Input
@@ -59,6 +62,7 @@ class ScoverageReport extends DefaultTask {
5962
sources.get(),
6063
reportDir.get(),
6164
coverage,
65+
sourceEncoding.get(),
6266
coverageOutputCobertura.get(),
6367
coverageOutputXML.get(),
6468
coverageOutputHTML.get(),

src/main/groovy/org/scoverage/ScoverageWriter.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
package org.scoverage;
22

33
import org.gradle.api.logging.Logger;
4+
import scala.Some;
5+
import scala.collection.JavaConverters;
6+
import scala.collection.mutable.Buffer;
47
import scoverage.Constants;
58
import scoverage.Coverage;
69
import scoverage.report.CoberturaXmlWriter;
710
import scoverage.report.ScoverageHtmlWriter;
811
import scoverage.report.ScoverageXmlWriter;
912

1013
import java.io.File;
14+
import java.nio.charset.Charset;
15+
import java.util.Arrays;
1116

1217
/**
1318
* Util for generating and saving coverage files.
@@ -29,6 +34,7 @@ public ScoverageWriter(Logger logger) {
2934
* @param sourceDir directory with project sources
3035
* @param reportDir directory for generate reports
3136
* @param coverage coverage data
37+
* @param sourceEncoding the encoding of the source files
3238
* @param coverageOutputCobertura switch for Cobertura output
3339
* @param coverageOutputXML switch for Scoverage XML output
3440
* @param coverageOutputHTML switch for Scoverage HTML output
@@ -37,6 +43,7 @@ public ScoverageWriter(Logger logger) {
3743
public void write(File sourceDir,
3844
File reportDir,
3945
Coverage coverage,
46+
String sourceEncoding,
4047
Boolean coverageOutputCobertura,
4148
Boolean coverageOutputXML,
4249
Boolean coverageOutputHTML,
@@ -70,7 +77,8 @@ public void write(File sourceDir,
7077
}
7178

7279
if (coverageOutputHTML) {
73-
new ScoverageHtmlWriter(sourceDir, reportDir).write(coverage);
80+
Buffer<File> sources = JavaConverters.asScalaBuffer(Arrays.asList(sourceDir));
81+
new ScoverageHtmlWriter(sources, reportDir, new Some<>(sourceEncoding)).write(coverage);
7482
logger.info("[scoverage] Written HTML report to " +
7583
reportDir.getAbsolutePath() +
7684
File.separator +

0 commit comments

Comments
 (0)