1
2
3
4 package net.sourceforge.pmd.renderers;
5
6 import static org.junit.Assert.assertEquals;
7
8 import java.util.HashMap;
9 import java.util.Map;
10
11 import net.sourceforge.pmd.FooRule;
12 import net.sourceforge.pmd.PMD;
13 import net.sourceforge.pmd.Report;
14 import net.sourceforge.pmd.Report.ProcessingError;
15 import net.sourceforge.pmd.ReportTest;
16 import net.sourceforge.pmd.RuleContext;
17 import net.sourceforge.pmd.lang.ast.Node;
18 import net.sourceforge.pmd.lang.rule.ParametricRuleViolation;
19
20 import org.junit.Test;
21
22 public class SummaryHTMLRendererTest extends AbstractRendererTst {
23
24 @Override
25 public Renderer getRenderer() {
26 Renderer result = new SummaryHTMLRenderer();
27 result.setProperty(HTMLRenderer.LINK_PREFIX, "link_prefix");
28 result.setProperty(HTMLRenderer.LINE_PREFIX, "line_prefix");
29 return result;
30 }
31
32 @Override
33 public String getExpected() {
34 return "<html><head><title>PMD</title></head><body>"
35 + PMD.EOL
36 + "<center><h2>Summary</h2></center>"
37 + PMD.EOL
38 + "<table align=\"center\" cellspacing=\"0\" cellpadding=\"3\">"
39 + PMD.EOL
40 + "<tr><th>Rule name</th><th>Number of violations</th></tr>"
41 + PMD.EOL
42 + "<tr><td>Foo</td><td align=center>1</td></tr>"
43 + PMD.EOL
44 + "</table>"
45 + PMD.EOL
46 + "<center><h2>Detail</h2></center><table align=\"center\" cellspacing=\"0\" cellpadding=\"3\"><tr>"
47 + PMD.EOL
48 + "<center><h3>PMD report</h3></center><center><h3>Problems found</h3></center><table align=\"center\" cellspacing=\"0\" cellpadding=\"3\"><tr>"
49 + PMD.EOL + "<th>#</th><th>File</th><th>Line</th><th>Problem</th></tr>" + PMD.EOL
50 + "<tr bgcolor=\"lightgrey\"> " + PMD.EOL + "<td align=\"center\">1</td>" + PMD.EOL
51 + "<td width=\"*%\"><a href=\"link_prefixn/a.html#line_prefix1\">n/a</a></td>" + PMD.EOL
52 + "<td align=\"center\" width=\"5%\">1</td>" + PMD.EOL + "<td width=\"*\">blah</td>" + PMD.EOL
53 + "</tr>" + PMD.EOL + "</table></tr></table></body></html>" + PMD.EOL;
54
55 }
56
57 @Override
58 public String getExpectedEmpty() {
59 return "<html><head><title>PMD</title></head><body>"
60 + PMD.EOL
61 + "<center><h2>Summary</h2></center>"
62 + PMD.EOL
63 + "<table align=\"center\" cellspacing=\"0\" cellpadding=\"3\">"
64 + PMD.EOL
65 + "<tr><th>Rule name</th><th>Number of violations</th></tr>"
66 + PMD.EOL
67 + "</table>"
68 + PMD.EOL
69 + "<center><h2>Detail</h2></center><table align=\"center\" cellspacing=\"0\" cellpadding=\"3\"><tr>"
70 + PMD.EOL
71 + "<center><h3>PMD report</h3></center><center><h3>Problems found</h3></center><table align=\"center\" cellspacing=\"0\" cellpadding=\"3\"><tr>"
72 + PMD.EOL + "<th>#</th><th>File</th><th>Line</th><th>Problem</th></tr>" + PMD.EOL
73 + "</table></tr></table></body></html>" + PMD.EOL;
74 }
75
76 @Override
77 public String getExpectedMultiple() {
78 return "<html><head><title>PMD</title></head><body>"
79 + PMD.EOL
80 + "<center><h2>Summary</h2></center>"
81 + PMD.EOL
82 + "<table align=\"center\" cellspacing=\"0\" cellpadding=\"3\">"
83 + PMD.EOL
84 + "<tr><th>Rule name</th><th>Number of violations</th></tr>"
85 + PMD.EOL
86 + "<tr><td>Foo</td><td align=center>2</td></tr>"
87 + PMD.EOL
88 + "</table>"
89 + PMD.EOL
90 + "<center><h2>Detail</h2></center><table align=\"center\" cellspacing=\"0\" cellpadding=\"3\"><tr>"
91 + PMD.EOL
92 + "<center><h3>PMD report</h3></center><center><h3>Problems found</h3></center><table align=\"center\" cellspacing=\"0\" cellpadding=\"3\"><tr>"
93 + PMD.EOL + "<th>#</th><th>File</th><th>Line</th><th>Problem</th></tr>" + PMD.EOL
94 + "<tr bgcolor=\"lightgrey\"> " + PMD.EOL + "<td align=\"center\">1</td>" + PMD.EOL
95 + "<td width=\"*%\"><a href=\"link_prefixn/a.html#line_prefix1\">n/a</a></td>" + PMD.EOL
96 + "<td align=\"center\" width=\"5%\">1</td>" + PMD.EOL + "<td width=\"*\">blah</td>" + PMD.EOL
97 + "</tr>" + PMD.EOL + "<tr> " + PMD.EOL + "<td align=\"center\">2</td>" + PMD.EOL
98 + "<td width=\"*%\"><a href=\"link_prefixn/a.html#line_prefix1\">n/a</a></td>" + PMD.EOL
99 + "<td align=\"center\" width=\"5%\">1</td>" + PMD.EOL + "<td width=\"*\">blah</td>" + PMD.EOL
100 + "</tr>" + PMD.EOL + "</table></tr></table></body></html>" + PMD.EOL;
101 }
102
103 @Override
104 public String getExpectedError(ProcessingError error) {
105 return "<html><head><title>PMD</title></head><body>"
106 + PMD.EOL
107 + "<center><h2>Summary</h2></center>"
108 + PMD.EOL
109 + "<table align=\"center\" cellspacing=\"0\" cellpadding=\"3\">"
110 + PMD.EOL
111 + "<tr><th>Rule name</th><th>Number of violations</th></tr>"
112 + PMD.EOL
113 + "</table>"
114 + PMD.EOL
115 + "<center><h2>Detail</h2></center><table align=\"center\" cellspacing=\"0\" cellpadding=\"3\"><tr>"
116 + PMD.EOL
117 + "<center><h3>PMD report</h3></center><center><h3>Problems found</h3></center><table align=\"center\" cellspacing=\"0\" cellpadding=\"3\"><tr>"
118 + PMD.EOL
119 + "<th>#</th><th>File</th><th>Line</th><th>Problem</th></tr>"
120 + PMD.EOL
121 + "</table><hr/><center><h3>Processing errors</h3></center><table align=\"center\" cellspacing=\"0\" cellpadding=\"3\"><tr>"
122 + PMD.EOL + "<th>File</th><th>Problem</th></tr>" + PMD.EOL + "<tr bgcolor=\"lightgrey\"> " + PMD.EOL
123 + "<td>file</td>" + PMD.EOL + "<td>Error</td>" + PMD.EOL + "</tr>" + PMD.EOL
124 + "</table></tr></table></body></html>" + PMD.EOL;
125 }
126
127 @Test
128 public void testShowSuppressions() throws Exception {
129 Report rep = createEmptyReportWithSuppression();
130 Renderer renderer = getRenderer();
131 renderer.setShowSuppressedViolations(true);
132 String actual = ReportTest.render(renderer, rep);
133 assertEquals(
134 "<html><head><title>PMD</title></head><body>"
135 + PMD.EOL
136 + "<center><h2>Summary</h2></center>"
137 + PMD.EOL
138 + "<table align=\"center\" cellspacing=\"0\" cellpadding=\"3\">"
139 + PMD.EOL
140 + "<tr><th>Rule name</th><th>Number of violations</th></tr>"
141 + PMD.EOL
142 + "</table>"
143 + PMD.EOL
144 + "<center><h2>Detail</h2></center><table align=\"center\" cellspacing=\"0\" cellpadding=\"3\"><tr>"
145 + PMD.EOL
146 + "<center><h3>PMD report</h3></center><center><h3>Problems found</h3></center><table align=\"center\" cellspacing=\"0\" cellpadding=\"3\"><tr>"
147 + PMD.EOL
148 + "<th>#</th><th>File</th><th>Line</th><th>Problem</th></tr>"
149 + PMD.EOL
150 + "</table><hr/><center><h3>Suppressed warnings</h3></center><table align=\"center\" cellspacing=\"0\" cellpadding=\"3\"><tr>"
151 + PMD.EOL
152 + "<th>File</th><th>Line</th><th>Rule</th><th>NOPMD or Annotation</th><th>Reason</th></tr>"
153 + PMD.EOL + "<tr bgcolor=\"lightgrey\"> " + PMD.EOL + "<td align=\"left\"></td>" + PMD.EOL
154 + "<td align=\"center\">1</td>" + PMD.EOL + "<td align=\"center\">Foo</td>" + PMD.EOL
155 + "<td align=\"center\">NOPMD</td>" + PMD.EOL + "<td align=\"center\">test</td>" + PMD.EOL
156 + "</tr>" + PMD.EOL + "</table></tr></table></body></html>" + PMD.EOL, actual);
157 }
158
159 @Test
160 public void testHideSuppressions() throws Exception {
161 Report rep = createEmptyReportWithSuppression();
162 Renderer renderer = getRenderer();
163 renderer.setShowSuppressedViolations(false);
164 String actual = ReportTest.render(renderer, rep);
165 assertEquals(getExpectedEmpty(), actual);
166 }
167
168 private Report createEmptyReportWithSuppression() {
169 Report rep = new Report();
170 Map<Integer, String> suppressions = new HashMap<Integer, String>();
171 suppressions.put(1, "test");
172 rep.suppress(suppressions);
173 RuleContext ctx = new RuleContext();
174 ParametricRuleViolation<Node> violation = new ParametricRuleViolation<Node>(new FooRule(), ctx, null,
175 "suppress test");
176 violation.setLines(1, 1);
177 rep.addRuleViolation(violation);
178 return rep;
179 }
180 }