1
2
3
4
5 package mockit.coverage.reporting.lineCoverage;
6
7 import edu.umd.cs.findbugs.annotations.NonNull;
8 import edu.umd.cs.findbugs.annotations.Nullable;
9
10 import java.util.List;
11
12 import mockit.coverage.CallPoint;
13 import mockit.coverage.lines.LineCoverageData;
14 import mockit.coverage.lines.PerFileLineCoverage;
15 import mockit.coverage.reporting.ListOfCallPoints;
16 import mockit.coverage.reporting.parsing.LineParser;
17
18 final class LineCoverageFormatter {
19 @NonNull
20 private final StringBuilder formattedLine;
21 @NonNull
22 private final LineSegmentsFormatter segmentsFormatter;
23 @Nullable
24 private final ListOfCallPoints listOfCallPoints;
25
26 LineCoverageFormatter(boolean withCallPoints) {
27 formattedLine = new StringBuilder(200);
28 segmentsFormatter = new LineSegmentsFormatter(withCallPoints, formattedLine);
29 listOfCallPoints = withCallPoints ? new ListOfCallPoints() : null;
30 }
31
32 String format(@NonNull LineParser lineParser, @NonNull PerFileLineCoverage lineCoverageData) {
33 formattedLine.setLength(0);
34 formattedLine.append("<pre class='pp");
35
36 int line = lineParser.getNumber();
37 LineCoverageData lineData = lineCoverageData.getLineData(line);
38
39 if (lineData.containsBranches()) {
40 formatLineWithMultipleSegments(lineParser, lineData);
41 } else {
42 formatLineWithSingleSegment(lineParser, lineData);
43 }
44
45 return formattedLine.toString();
46 }
47
48 private void formatLineWithMultipleSegments(@NonNull LineParser lineParser, @NonNull LineCoverageData lineData) {
49 formattedLine.append(" jmp'>");
50 segmentsFormatter.formatSegments(lineParser, lineData);
51 }
52
53 private void formatLineWithSingleSegment(@NonNull LineParser lineParser, @NonNull LineCoverageData lineData) {
54 formattedLine.append(lineData.isCovered() ? " cvd" : " uncvd");
55
56 List<CallPoint> callPoints = lineData.getCallPoints();
57
58 if (listOfCallPoints != null && callPoints != null) {
59 formattedLine.append(" cp' onclick='sh(this)");
60 }
61
62 formattedLine.append("' id='l").append(lineParser.getNumber()).append("s0'>");
63 String content = lineParser.getInitialElement().toString();
64 formattedLine.append(content).append("</pre>");
65
66 if (listOfCallPoints != null) {
67 listOfCallPoints.insertListOfCallPoints(callPoints);
68 formattedLine.append(listOfCallPoints.getContents());
69 }
70 }
71 }