View Javadoc
1   /**
2    * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
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 }