1 package test.net.sourceforge.pmd.renderers;
2
3 import junit.framework.TestCase;
4 import net.sourceforge.pmd.Report;
5 import net.sourceforge.pmd.RuleContext;
6 import net.sourceforge.pmd.RuleViolation;
7 import net.sourceforge.pmd.renderers.XMLRenderer;
8 import test.net.sourceforge.pmd.MockRule;
9
10 import java.util.ArrayList;
11 import java.util.Iterator;
12 import java.util.List;
13
14 public class XMLRendererTest extends TestCase {
15 private XMLRenderer IUT = null;
16 private MockRule RULE1 = new MockRule("RULE1", "RULE1", "msg");
17 private MockRule RULE2 = new MockRule("RULE2", "RULE2", "msg");
18 private RuleContext ctx = new RuleContext();
19
20 public XMLRendererTest(String name) {
21 super(name);
22 }
23
24 public void setUp() {
25 IUT = new XMLRenderer();
26 }
27
28 public void testEmptyReport() throws Throwable {
29 String rendered = IUT.render(new Report());
30 assertTrue("Expected empty PMD tag.", rendered.indexOf("violation") < 0);
31 }
32
33 public void testSingleReport() throws Throwable {
34 Report report = new Report();
35 ctx.setSourceCodeFilename("testSingleReport");
36 report.addRuleViolation(new RuleViolation(RULE1, 1, "Rule1", ctx));
37
38 String rendered = IUT.render(report);
39
40 // <?xml version="1.0"?>
41 // <pmd>
42 // <file name="testSingleReport">
43 // <violation line="1" rule="RULE1">
44 // Rule1
45 // </violation>
46 // </file>
47 // </pmd>
48
49 List expectedStrings = new ArrayList();
50 expectedStrings.add("<pmd>");
51 expectedStrings.add("<file name=\"testSingleReport\">");
52 expectedStrings.add("<violation line=\"1\" rule=\"RULE1\">");
53 expectedStrings.add("Rule1");
54 expectedStrings.add("</violation>");
55 expectedStrings.add("</file>");
56 expectedStrings.add("</pmd>");
57
58 verifyPositions(rendered, expectedStrings);
59 }
60
61 public void testDoubleReport() throws Throwable {
62 Report report = new Report();
63 ctx.setSourceCodeFilename("testDoubleReport");
64 report.addRuleViolation(new RuleViolation(RULE1, 1, "Rule1", ctx));
65
66 report.addRuleViolation(new RuleViolation(RULE2, 2, "Rule2", ctx));
67
68 String rendered = IUT.render(report);
69
70 // <?xml version="1.0"?>
71 // <pmd>
72 // <file name="testSingleReport">
73 // <violation line="1" rule="RULE1">
74 // Rule1
75 // </violation>
76 // <violation line="2" rule="RULE2">
77 // Rule2
78 // </violation>
79 // </file>
80 // </pmd>
81
82 List expectedStrings = new ArrayList();
83 expectedStrings.add("<pmd>");
84 expectedStrings.add("<file name=\"testDoubleReport\">");
85 expectedStrings.add("<violation line=\"1\" rule=\"RULE1\">");
86 expectedStrings.add("Rule1");
87 expectedStrings.add("</violation>");
88 expectedStrings.add("<violation line=\"2\" rule=\"RULE2\">");
89 expectedStrings.add("Rule2");
90 expectedStrings.add("</violation>");
91 expectedStrings.add("</file>");
92 expectedStrings.add("</pmd>");
93
94 verifyPositions(rendered, expectedStrings);
95 }
96
97 public void testTwoFiles() throws Throwable {
98 Report report = new Report();
99 ctx.setSourceCodeFilename("testTwoFiles_0");
100 report.addRuleViolation(new RuleViolation(RULE1, 1, "Rule1", ctx));
101
102 ctx.setSourceCodeFilename("testTwoFiles_1");
103 report.addRuleViolation(new RuleViolation(RULE1, 1, "Rule1", ctx));
104
105 String rendered = IUT.render(report);
106
107 // <?xml version="1.0"?>
108 // <pmd>
109 // <file name="testTwoFiles_0">
110 // <violation line="1" rule="RULE1">
111 // Rule1
112 // </violation>
113 // </file>
114 // <file name="testTwoFiles_1">
115 // <violation line="1" rule="RULE1">
116 // Rule1
117 // </violation>
118 // </file>
119 // </pmd>
120
121 List expectedStrings = new ArrayList();
122 expectedStrings.add("<pmd>");
123 expectedStrings.add("<file name=\"testTwoFiles_0\">");
124 expectedStrings.add("<violation line=\"1\" rule=\"RULE1\">");
125 expectedStrings.add("Rule1");
126 expectedStrings.add("</violation>");
127 expectedStrings.add("</file>");
128 expectedStrings.add("<file name=\"testTwoFiles_1\">");
129 expectedStrings.add("<violation line=\"1\" rule=\"RULE1\">");
130 expectedStrings.add("Rule1");
131 expectedStrings.add("</violation>");
132 expectedStrings.add("</file>");
133 expectedStrings.add("</pmd>");
134
135 verifyPositions(rendered, expectedStrings);
136 }
137
138 public void testUnorderedFiles() throws Throwable {
139 Report report = new Report();
140 ctx.setSourceCodeFilename("testTwoFiles_0");
141 report.addRuleViolation(new RuleViolation(RULE1, 1, "Rule1", ctx));
142
143 ctx.setSourceCodeFilename("testTwoFiles_1");
144 report.addRuleViolation(new RuleViolation(RULE1, 1, "Rule1", ctx));
145
146 ctx.setSourceCodeFilename("testTwoFiles_0");
147 report.addRuleViolation(new RuleViolation(RULE2, 2, "Rule2", ctx));
148
149 String rendered = IUT.render(report);
150
151 // <?xml version="1.0"?>
152 // <pmd>
153 // <file name="testTwoFiles_0">
154 // <violation line="1" rule="RULE1">
155 // Rule1
156 // </violation>
157 // </file>
158 // <file name="testTwoFiles_1">
159 // <violation line="1" rule="RULE1">
160 // Rule1
161 // </violation>
162 // </file>
163 // </pmd>
164
165 List expectedStrings = new ArrayList();
166 expectedStrings.add("<pmd>");
167 expectedStrings.add("<file name=\"testTwoFiles_0\">");
168 expectedStrings.add("<violation line=\"1\" rule=\"RULE1\">");
169 expectedStrings.add("Rule1");
170 expectedStrings.add("</violation>");
171 expectedStrings.add("<violation line=\"2\" rule=\"RULE2\">");
172 expectedStrings.add("Rule2");
173 expectedStrings.add("</violation>");
174 expectedStrings.add("</file>");
175 expectedStrings.add("<file name=\"testTwoFiles_1\">");
176 expectedStrings.add("<violation line=\"1\" rule=\"RULE1\">");
177 expectedStrings.add("Rule1");
178 expectedStrings.add("</violation>");
179 expectedStrings.add("</file>");
180 expectedStrings.add("</pmd>");
181
182 verifyPositions(rendered, expectedStrings);
183 }
184
185 public void verifyPositions(String rendered, List strings) {
186 Iterator i = strings.iterator();
187 int currPos = 0;
188 String lastString = "<?xml version=\"1.0\"?>";
189
190 while (i.hasNext()) {
191 String str = (String) i.next();
192
193 int strPos = rendered.indexOf(str, currPos);
194 assertTrue("Expecting: " + str + " after " + lastString, strPos > currPos);
195 currPos = strPos;
196 lastString = str;
197 }
198 }
199 }
This page was automatically generated by Maven