1
2
3
4
5 package mockit.coverage.reporting.lineCoverage;
6
7 import edu.umd.cs.findbugs.annotations.NonNull;
8
9 import java.io.PrintWriter;
10
11 import mockit.coverage.lines.PerFileLineCoverage;
12 import mockit.coverage.reporting.parsing.LineParser;
13
14 import org.checkerframework.checker.index.qual.NonNegative;
15
16 public final class LineCoverageOutput {
17 @NonNull
18 private final PrintWriter output;
19 @NonNull
20 private final PerFileLineCoverage lineCoverageData;
21 @NonNull
22 private final LineCoverageFormatter lineCoverageFormatter;
23
24 public LineCoverageOutput(@NonNull PrintWriter output, @NonNull PerFileLineCoverage lineCoverageData,
25 boolean withCallPoints) {
26 this.output = output;
27 this.lineCoverageData = lineCoverageData;
28 lineCoverageFormatter = new LineCoverageFormatter(withCallPoints);
29 }
30
31 public boolean writeLineWithCoverageInfo(@NonNull LineParser lineParser) {
32 int line = lineParser.getNumber();
33
34 if (!lineCoverageData.hasLineData(line)) {
35 return false;
36 }
37
38 int lineExecutionCount = lineCoverageData.getExecutionCount(line);
39
40 if (lineExecutionCount < 0) {
41 return false;
42 }
43
44 writeLineExecutionCount(lineExecutionCount);
45 writeExecutableCode(lineParser);
46 return true;
47 }
48
49 private void writeLineExecutionCount(@NonNegative int lineExecutionCount) {
50 output.write("<td class='ct'>");
51 output.print(lineExecutionCount);
52 output.println("</td>");
53 }
54
55 private void writeExecutableCode(@NonNull LineParser lineParser) {
56 String formattedLine = lineCoverageFormatter.format(lineParser, lineCoverageData);
57 output.write(" <td>");
58 output.write(formattedLine);
59 output.println("</td>");
60 }
61 }