Skip to content

Commit 26ddea5

Browse files
authored
Ensure utf8 encoding is defaulted everywhere. (#390)
* Ensure utf8 encoding is defaulted everywhere. Closes #122 Closes #326 Relates to #368 * Bump timeout in test for concurrency tests on windows
1 parent 272f34e commit 26ddea5

File tree

12 files changed

+54
-21
lines changed

12 files changed

+54
-21
lines changed

scalac-scoverage-plugin/src/main/scala/scoverage/IOUtils.scala

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ object IOUtils {
1717

1818
private val UnixSeperator: Char = '/'
1919
private val WindowsSeperator: Char = '\\'
20-
private val UTF8Encoding: String = "UTF-8"
2120

2221
def getName(path: String): Any = {
2322
val index = {
@@ -37,9 +36,12 @@ object IOUtils {
3736
findMeasurementFiles(dataDir).foreach(_.delete)
3837
def clean(dataDir: String): Unit = clean(new File(dataDir))
3938

40-
def writeToFile(file: File, str: String) = {
39+
def writeToFile(file: File, str: String)(implicit encoding: String) = {
4140
val writer = new BufferedWriter(
42-
new OutputStreamWriter(new FileOutputStream(file), UTF8Encoding)
41+
new OutputStreamWriter(
42+
new FileOutputStream(file),
43+
encoding
44+
)
4345
)
4446
try {
4547
writer.write(str)
@@ -86,10 +88,13 @@ object IOUtils {
8688
file.getName == Constants.XMLReportFilenameWithDebug
8789

8890
// loads all the invoked statement ids from the given files
89-
def invoked(files: Seq[File]): Set[(Int, String)] = {
91+
def invoked(
92+
files: Seq[File]
93+
)(implicit encoding: String): Set[(Int, String)] = {
9094
val acc = mutable.Set[(Int, String)]()
9195
files.foreach { file =>
92-
val reader = Source.fromFile(file)
96+
val reader =
97+
Source.fromFile(file, encoding)
9398
for (line <- reader.getLines()) {
9499
if (!line.isEmpty) {
95100
acc += (line.split(" ").toList match {

scalac-scoverage-plugin/src/main/scala/scoverage/report/BaseReportWriter.scala

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,15 @@ package scoverage.report
22

33
import java.io.File
44

5-
class BaseReportWriter(sourceDirectories: Seq[File], outputDir: File) {
5+
import scala.io.Codec
6+
7+
class BaseReportWriter(
8+
sourceDirectories: Seq[File],
9+
outputDir: File,
10+
sourceEncoding: Option[String]
11+
) {
12+
13+
implicit val encoding = sourceEncoding.fold(Codec.UTF8.name)(identity)
614

715
// Source paths in canonical form WITH trailing file separator
816
private val formattedSourcePaths: Seq[String] =

scalac-scoverage-plugin/src/main/scala/scoverage/report/CoberturaXmlWriter.scala

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,14 @@ import scoverage.DoubleFormat.twoFractionDigits
99
import scoverage._
1010

1111
/** @author Stephen Samuel */
12-
class CoberturaXmlWriter(sourceDirectories: Seq[File], outputDir: File)
13-
extends BaseReportWriter(sourceDirectories, outputDir) {
12+
class CoberturaXmlWriter(
13+
sourceDirectories: Seq[File],
14+
outputDir: File,
15+
sourceEncoding: Option[String]
16+
) extends BaseReportWriter(sourceDirectories, outputDir, sourceEncoding) {
1417

15-
def this(baseDir: File, outputDir: File) = {
16-
this(Seq(baseDir), outputDir)
18+
def this(baseDir: File, outputDir: File, sourceEncoding: Option[String]) = {
19+
this(Seq(baseDir), outputDir, sourceEncoding)
1720
}
1821

1922
def write(coverage: Coverage): Unit = {

scalac-scoverage-plugin/src/main/scala/scoverage/report/CodeGrid.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package scoverage.report
22

3+
import scala.io.Codec
34
import scala.io.Source
45

56
import _root_.scoverage.MeasuredFile
@@ -77,7 +78,7 @@ class CodeGrid(mFile: MeasuredFile, sourceEncoding: Option[String]) {
7778
private def source(mfile: MeasuredFile): String = {
7879
val src = sourceEncoding match {
7980
case Some(enc) => Source.fromFile(mfile.source, enc)
80-
case None => Source.fromFile(mfile.source)
81+
case None => Source.fromFile(mfile.source, Codec.UTF8.name)
8182
}
8283
try src.mkString
8384
finally src.close()

scalac-scoverage-plugin/src/main/scala/scoverage/report/CoverageAggregator.scala

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,16 @@ package scoverage.report
22

33
import java.io.File
44

5+
import scala.io.Codec
6+
57
import scoverage.Coverage
68
import scoverage.IOUtils
79
import scoverage.Serializer
810

911
object CoverageAggregator {
1012

13+
implicit val encoding: String = Codec.UTF8.name
14+
1115
// to be used by gradle-scoverage plugin
1216
def aggregate(dataDirs: Array[File], sourceRoot: File): Option[Coverage] =
1317
aggregate(

scalac-scoverage-plugin/src/main/scala/scoverage/report/ScoverageHtmlWriter.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ class ScoverageHtmlWriter(
1212
sourceDirectories: Seq[File],
1313
outputDir: File,
1414
sourceEncoding: Option[String]
15-
) extends BaseReportWriter(sourceDirectories, outputDir) {
15+
) extends BaseReportWriter(sourceDirectories, outputDir, sourceEncoding) {
1616

1717
// to be used by gradle-scoverage plugin
1818
def this(

scalac-scoverage-plugin/src/main/scala/scoverage/report/ScoverageXmlWriter.scala

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,17 @@ import scoverage._
1111
class ScoverageXmlWriter(
1212
sourceDirectories: Seq[File],
1313
outputDir: File,
14-
debug: Boolean
15-
) extends BaseReportWriter(sourceDirectories, outputDir) {
14+
debug: Boolean,
15+
sourceEncoding: Option[String]
16+
) extends BaseReportWriter(sourceDirectories, outputDir, sourceEncoding) {
1617

17-
def this(sourceDir: File, outputDir: File, debug: Boolean) = {
18-
this(Seq(sourceDir), outputDir, debug)
18+
def this(
19+
sourceDir: File,
20+
outputDir: File,
21+
debug: Boolean,
22+
sourceEncoding: Option[String]
23+
) = {
24+
this(Seq(sourceDir), outputDir, debug, sourceEncoding)
1925
}
2026

2127
def write(coverage: Coverage): Unit = {

scalac-scoverage-plugin/src/test/scala/scoverage/CoberturaXmlWriterTest.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ class CoberturaXmlWriterTest extends FunSuite {
213213
)
214214
)
215215

216-
val writer = new CoberturaXmlWriter(sourceRoot, dir)
216+
val writer = new CoberturaXmlWriter(sourceRoot, dir, None)
217217
writer.write(coverage)
218218

219219
val domFactory = DocumentBuilderFactory.newInstance()
@@ -309,7 +309,7 @@ class CoberturaXmlWriterTest extends FunSuite {
309309
)
310310
)
311311

312-
val writer = new CoberturaXmlWriter(sourceRoot, dir)
312+
val writer = new CoberturaXmlWriter(sourceRoot, dir, None)
313313
writer.write(coverage)
314314

315315
// Needed to acount for https://github.com/scala/scala-xml/pull/177

scalac-scoverage-plugin/src/test/scala/scoverage/IOUtilsTest.scala

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,15 @@ import java.io.File
44
import java.io.FileWriter
55
import java.util.UUID
66

7+
import scala.io.Codec
8+
79
import munit.FunSuite
810

911
/** @author Stephen Samuel */
1012
class IOUtilsTest extends FunSuite {
1113

14+
implicit val encoding: String = Codec.UTF8.name
15+
1216
test("should parse measurement files") {
1317
val file = File.createTempFile("scoveragemeasurementtest", "txt")
1418
val writer = new FileWriter(file)

scalac-scoverage-plugin/src/test/scala/scoverage/LocationCompiler.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package scoverage
22

33
import java.io.File
44

5+
import scala.io.Codec
56
import scala.tools.nsc.Global
67
import scala.tools.nsc.plugins.PluginComponent
78
import scala.tools.nsc.transform.Transform
@@ -24,7 +25,7 @@ class LocationCompiler(
2425

2526
def writeCodeSnippetToTempFile(code: String): File = {
2627
val file = File.createTempFile("code_snippet", ".scala")
27-
IOUtils.writeToFile(file, code)
28+
IOUtils.writeToFile(file, code)(Codec.UTF8.name)
2829
file.deleteOnExit()
2930
file
3031
}

scalac-scoverage-plugin/src/test/scala/scoverage/ScoverageCompiler.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import java.io.FileNotFoundException
55
import java.net.URL
66

77
import scala.collection.mutable.ListBuffer
8+
import scala.io.Codec
89
import scala.tools.nsc.Global
910
import scala.tools.nsc.Settings
1011
import scala.tools.nsc.plugins.PluginComponent
@@ -135,7 +136,7 @@ class ScoverageCompiler(
135136

136137
def writeCodeSnippetToTempFile(code: String): File = {
137138
val file = File.createTempFile("scoverage_snippet", ".scala")
138-
IOUtils.writeToFile(file, code)
139+
IOUtils.writeToFile(file, code)(Codec.UTF8.name)
139140
file.deleteOnExit()
140141
file
141142
}

scalac-scoverage-runtime/jvm/src/test/scala/scoverage/InvokerConcurrencyTest.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class InvokerConcurrencyTest extends FunSuite {
3636
}
3737
}
3838

39-
futures.foreach(Await.result(_, 1.second))
39+
futures.foreach(Await.result(_, 3.second))
4040

4141
// Now verify that the measurement file is not corrupted by loading it
4242
val measurementFiles = Invoker.findMeasurementFiles(measurementDir)

0 commit comments

Comments
 (0)