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