View Javadoc
1   /*
2    * Copyright (c) 2006 JMockit developers
3    * This file is subject to the terms of the MIT license (see LICENSE.txt).
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  }