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