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