Skip to content

Commit d0c9d07

Browse files
committed
#88 Improved coverage of match clauses
1 parent ffd8c05 commit d0c9d07

File tree

3 files changed

+37
-3
lines changed

3 files changed

+37
-3
lines changed

project/Scoverage.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import sbt._
44
object Scoverage extends Build {
55

66
val Org = "org.scoverage"
7-
val Version = "1.0.1"
7+
val Version = "1.0.3-SNAPSHOT"
88
val Scala = "2.11.4"
99
val MockitoVersion = "1.9.5"
1010
val ScalatestVersion = "2.2.2"
@@ -73,6 +73,7 @@ object Scoverage extends Build {
7373
.settings(appSettings: _*)
7474

7575
lazy val plugin = Project("scalac-scoverage-plugin", file("scalac-scoverage-plugin"))
76+
.dependsOn(runtime % "test")
7677
.settings(name := "scalac-scoverage-plugin")
7778
.settings(appSettings: _*)
7879
.settings(libraryDependencies ++= Seq(

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ class ScoverageInstrumentationComponent(val global: Global)
146146
def transformCases(cases: List[CaseDef]): List[CaseDef] = {
147147
cases.map(c => {
148148
treeCopy.CaseDef(
149-
c, c.pat, process(c.guard), instrument(process(c.body), c)
149+
c, c.pat, process(c.guard), process(c.body)
150150
)
151151
})
152152
}
@@ -431,7 +431,7 @@ class ScoverageInstrumentationComponent(val global: Global)
431431
treeCopy
432432
.Match(tree, instrument(selector, selector), transformCases(cases.dropRight(1)) ++ cases.takeRight(1))
433433
} else {
434-
instrument(treeCopy.Match(tree, process(selector), transformCases(cases)), m)
434+
treeCopy.Match(tree, process(selector), transformCases(cases))
435435
}
436436

437437
// a synthetic object is a generated object, such as case class companion

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

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,39 @@ class PluginCoverageTest
5656
compiler.assertNMeasuredStatements(8)
5757
}
5858

59+
test("scoverage should not instrument the match as a statement") {
60+
val compiler = ScoverageCompiler.default
61+
compiler.compileCodeSnippet( """ object A {
62+
| System.currentTimeMillis() match {
63+
| case x => println(x)
64+
| }
65+
|} """.stripMargin)
66+
assert(!compiler.reporter.hasErrors)
67+
assert(!compiler.reporter.hasWarnings)
68+
69+
/** should have the following statements instrumented:
70+
* the selector, clause 1
71+
*/
72+
compiler.assertNMeasuredStatements(2)
73+
}
74+
test("scoverage should instrument match guards") {
75+
val compiler = ScoverageCompiler.default
76+
compiler.compileCodeSnippet( """ object A {
77+
| System.currentTimeMillis() match {
78+
| case l if l < 1000 => println("a")
79+
| case l if l > 1000 => println("b")
80+
| case _ => println("c")
81+
| }
82+
|} """.stripMargin)
83+
assert(!compiler.reporter.hasErrors)
84+
assert(!compiler.reporter.hasWarnings)
85+
86+
/** should have the following statements instrumented:
87+
* the selector, guard 1, clause 1, guard 2, clause 2, clause 3
88+
*/
89+
compiler.assertNMeasuredStatements(6)
90+
}
91+
5992
test("scoverage should instrument selectors in match") {
6093
val compiler = ScoverageCompiler.default
6194
compiler.compileCodeSnippet( """ trait A {

0 commit comments

Comments
 (0)