Skip to content

Commit b835f3c

Browse files
committed
Moved coverage classes to sep file
1 parent 50f35ed commit b835f3c

File tree

5 files changed

+92
-72
lines changed

5 files changed

+92
-72
lines changed

src/main/scala/scales/Instrumenter.scala

-70
Original file line numberDiff line numberDiff line change
@@ -29,73 +29,3 @@ case object Covered extends LineStatus
2929
case object MissingCoverage extends LineStatus
3030
case object NotInstrumented extends LineStatus
3131

32-
class Coverage extends StatementCoverage {
33-
34-
val statements = new ListBuffer[MeasuredStatement]
35-
val sources = new ListBuffer[SourceFile]
36-
val packageNames = mutable.Set[String]()
37-
val classNames = new ListBuffer[String]()
38-
val methodNames = new ListBuffer[String]()
39-
40-
def loc = sources.map(src => new String(src.content).replaceAll("^\\s.*$", "").split("\n").size).sum
41-
def ncloc = sources.map(src => new String(src.content).replaceAll("/\\*.*?\\*/", "").replace("//.*$", "").count(_ == '\n')).sum
42-
def packageCount = packageNames.size
43-
def classCount = classNames.size
44-
def methodCount = methodNames.size
45-
def classesPerPackage = classCount / packageCount.toDouble
46-
def methodsPerClass = methodCount / classCount.toDouble
47-
48-
def add(stmt: MeasuredStatement): Unit = statements.append(stmt)
49-
def invoked(id: Int): Unit = statements.find(_.id == id).foreach(_.invoked)
50-
51-
def files = statements.groupBy(_.source.path).map(arg => MeasuredFile(arg._2.head.source, arg._2))
52-
def packages: Iterable[MeasuredPackage] = statements.groupBy(_._package).map(arg => MeasuredPackage(arg._1, arg._2))
53-
def classes = statements.groupBy(_.fqn).map(arg => MeasuredClass(arg._1, arg._2))
54-
55-
def risks(limit: Int) = classes.toSeq.sortBy(_.statementCoverage).take(limit)
56-
}
57-
58-
case class MeasuredPackage(name: String, statements: Iterable[MeasuredStatement]) extends StatementCoverage with ClassCoverage {
59-
def files = statements.groupBy(_.source).map(arg => MeasuredFile(arg._1, arg._2))
60-
}
61-
62-
case class MeasuredFile(source: SourceFile, statements: Iterable[MeasuredStatement]) extends StatementCoverage with ClassCoverage {
63-
def lineStatus(lineNumber: Int): LineStatus = {
64-
statements.filter(_.line == lineNumber) match {
65-
case i if i.isEmpty => NotInstrumented
66-
case i if i.size > 0 && i.exists(_.count == 0) => MissingCoverage
67-
case _ => Covered
68-
}
69-
}
70-
def packages: Iterable[MeasuredPackage] = statements.groupBy(_._package).map(arg => MeasuredPackage(arg._1, arg._2))
71-
}
72-
73-
case class MeasuredClass(name: String, statements: Iterable[MeasuredStatement]) extends StatementCoverage
74-
75-
case class MeasuredStatement(source: SourceFile,
76-
_package: String,
77-
_class: String,
78-
_method: String,
79-
id: Int,
80-
start: Int,
81-
line: Int,
82-
var end: Int = -1) {
83-
val fqn = (_package + ".").replace("<empty>.", "") + _class
84-
var count = 0
85-
def invoked: Unit = count = count + 1
86-
}
87-
88-
trait StatementCoverage {
89-
val statements: Iterable[MeasuredStatement]
90-
def statementCoverage: Double = invokedStatements / statements.size.toDouble
91-
def statementCount: Int = statements.size
92-
def invokedStatements: Int = statements.count(_.count > 0)
93-
}
94-
95-
trait ClassCoverage {
96-
val statements: Iterable[MeasuredStatement]
97-
def classes = statements.groupBy(_._class).map(arg => MeasuredClass(arg._1, arg._2))
98-
def classCount: Int = classes.size
99-
def invokedClasses: Int = classes.count(_.statements.count(_.count > 0) > 0)
100-
def classCoverage: Double = invokedClasses / classes.size.toDouble
101-
}

src/main/scala/scales/coverage.scala

+79
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
package scales
2+
3+
import scala.collection.mutable.ListBuffer
4+
import scala.reflect.internal.util.SourceFile
5+
import scala.collection.mutable
6+
import java.lang.String
7+
import scala.Predef.String
8+
9+
/** @author Stephen Samuel */
10+
class Coverage extends StatementCoverage {
11+
12+
val statements = new ListBuffer[MeasuredStatement]
13+
val sources = new ListBuffer[SourceFile]
14+
val packageNames = mutable.Set[String]()
15+
val classNames = new ListBuffer[String]()
16+
val methodNames = new ListBuffer[String]()
17+
18+
def loc = sources.map(src => new String(src.content).replaceAll("^\\s.*$", "").split("\n").size).sum
19+
def ncloc = sources.map(src => new String(src.content).replaceAll("/\\*.*?\\*/", "").replace("//.*$", "").count(_ == '\n')).sum
20+
def packageCount = packageNames.size
21+
def classCount = classNames.size
22+
def methodCount = methodNames.size
23+
def classesPerPackage = classCount / packageCount.toDouble
24+
def methodsPerClass = methodCount / classCount.toDouble
25+
26+
def add(stmt: MeasuredStatement): Unit = statements.append(stmt)
27+
def invoked(id: Int): Unit = statements.find(_.id == id).foreach(_.invoked)
28+
29+
def files = statements.groupBy(_.source.path).map(arg => MeasuredFile(arg._2.head.source, arg._2))
30+
def packages: Iterable[MeasuredPackage] = statements.groupBy(_._package).map(arg => MeasuredPackage(arg._1, arg._2))
31+
def classes = statements.groupBy(_.fqn).map(arg => MeasuredClass(arg._1, arg._2))
32+
33+
def risks(limit: Int) = classes.toSeq.sortBy(_.statementCoverage).take(limit)
34+
}
35+
36+
case class MeasuredPackage(name: String, statements: Iterable[MeasuredStatement]) extends StatementCoverage with ClassCoverage {
37+
def files = statements.groupBy(_.source).map(arg => MeasuredFile(arg._1, arg._2))
38+
}
39+
40+
case class MeasuredFile(source: SourceFile, statements: Iterable[MeasuredStatement]) extends StatementCoverage with ClassCoverage {
41+
def lineStatus(lineNumber: Int): LineStatus = {
42+
statements.filter(_.line == lineNumber) match {
43+
case i if i.isEmpty => NotInstrumented
44+
case i if i.size > 0 && i.exists(_.count == 0) => MissingCoverage
45+
case _ => Covered
46+
}
47+
}
48+
def packages: Iterable[MeasuredPackage] = statements.groupBy(_._package).map(arg => MeasuredPackage(arg._1, arg._2))
49+
}
50+
51+
case class MeasuredClass(name: String, statements: Iterable[MeasuredStatement]) extends StatementCoverage
52+
53+
case class MeasuredStatement(source: SourceFile,
54+
_package: String,
55+
_class: String,
56+
_method: String,
57+
id: Int,
58+
start: Int,
59+
line: Int,
60+
var end: Int = -1) {
61+
val fqn = (_package + ".").replace("<empty>.", "") + _class
62+
var count = 0
63+
def invoked: Unit = count = count + 1
64+
}
65+
66+
trait StatementCoverage {
67+
val statements: Iterable[MeasuredStatement]
68+
def statementCoverage: Double = invokedStatements / statements.size.toDouble
69+
def statementCount: Int = statements.size
70+
def invokedStatements: Int = statements.count(_.count > 0)
71+
}
72+
73+
trait ClassCoverage {
74+
val statements: Iterable[MeasuredStatement]
75+
def classes = statements.groupBy(_._class).map(arg => MeasuredClass(arg._1, arg._2))
76+
def classCount: Int = classes.size
77+
def invokedClasses: Int = classes.count(_.statements.count(_.count > 0) > 0)
78+
def classCoverage: Double = invokedClasses / classes.size.toDouble
79+
}

src/main/scala/scales/report/CoverageWriter.scala renamed to src/main/scala/scales/report/ScalesWriter.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package scales.report
33
import scales.Coverage
44

55
/** @author Stephen Samuel */
6-
trait CoverageWriter {
6+
trait ScalesWriter {
77

88
def write(coverage: Coverage)
99
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package scales.report
2+
3+
import scales.Coverage
4+
5+
/** @author Stephen Samuel */
6+
class ScalesXmlWriter extends ScalesWriter {
7+
8+
def write(coverage: Coverage) = {
9+
10+
}
11+
}

src/main/scala/scales/report/html.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import scales.MeasuredFile
88
import java.util.Date
99

1010
/** @author Stephen Samuel */
11-
object ScalesHtmlWriter extends CoverageWriter {
11+
object ScalesHtmlWriter extends ScalesWriter {
1212
def write(coverage: Coverage) {
1313

1414
writeIndex(coverage)

0 commit comments

Comments
 (0)