1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.plugins.surefire.report;
20
21 import java.io.File;
22 import java.util.Collections;
23 import java.util.List;
24
25 import org.apache.maven.model.Plugin;
26 import org.apache.maven.plugin.LegacySupport;
27 import org.apache.maven.plugin.MojoExecution;
28 import org.apache.maven.plugin.descriptor.MojoDescriptor;
29 import org.apache.maven.plugin.descriptor.PluginDescriptor;
30 import org.apache.maven.plugin.testing.AbstractMojoTestCase;
31 import org.apache.maven.plugin.testing.ArtifactStubFactory;
32 import org.apache.maven.plugin.testing.stubs.MavenProjectStub;
33 import org.apache.maven.plugins.surefire.report.stubs.DependencyArtifactStubFactory;
34 import org.apache.maven.project.MavenProject;
35 import org.apache.maven.shared.utils.io.FileUtils;
36 import org.eclipse.aether.DefaultRepositorySystemSession;
37 import org.eclipse.aether.internal.impl.SimpleLocalRepositoryManagerFactory;
38 import org.eclipse.aether.repository.LocalRepository;
39
40 import static org.apache.maven.plugins.surefire.report.Utils.toSystemNewLine;
41 import static org.hamcrest.CoreMatchers.containsString;
42 import static org.hamcrest.MatcherAssert.assertThat;
43
44
45
46
47 @SuppressWarnings("checkstyle:linelength")
48 public class SurefireReportTest extends AbstractMojoTestCase {
49 private ArtifactStubFactory artifactStubFactory;
50
51 @Override
52 protected void setUp() throws Exception {
53 super.setUp();
54 artifactStubFactory = new DependencyArtifactStubFactory(getTestFile("target"), true, false);
55 artifactStubFactory.getWorkingDir().mkdirs();
56 }
57
58 protected File getPluginXmlFile(String projectDirName) {
59 return new File(getBasedir(), "src/test/resources/unit/" + projectDirName + "/plugin-config.xml");
60 }
61
62 protected SurefireReport createReportMojo(File pluginXmlFile) throws Exception {
63 SurefireReport mojo = (SurefireReport) lookupMojo("report", pluginXmlFile);
64 assertNotNull("Mojo not found.", mojo);
65
66 LegacySupport legacySupport = lookup(LegacySupport.class);
67 legacySupport.setSession(newMavenSession(new MavenProjectStub()));
68 DefaultRepositorySystemSession repoSession =
69 (DefaultRepositorySystemSession) legacySupport.getRepositorySession();
70 repoSession.setLocalRepositoryManager(new SimpleLocalRepositoryManagerFactory()
71 .newInstance(repoSession, new LocalRepository(artifactStubFactory.getWorkingDir())));
72
73 List<MavenProject> reactorProjects =
74 mojo.getReactorProjects() != null ? mojo.getReactorProjects() : Collections.emptyList();
75
76 setVariableValueToObject(mojo, "mojoExecution", getMockMojoExecution());
77
78 setVariableValueToObject(mojo, "repoSession", legacySupport.getRepositorySession());
79 setVariableValueToObject(mojo, "reactorProjects", reactorProjects);
80 setVariableValueToObject(
81 mojo, "remoteProjectRepositories", mojo.getProject().getRemoteProjectRepositories());
82 setVariableValueToObject(
83 mojo, "siteDirectory", new File(mojo.getProject().getBasedir(), "src/site"));
84 return mojo;
85 }
86
87 public void testBasicSurefireReport() throws Exception {
88 File testPom = getPluginXmlFile("basic-surefire-report-test");
89 SurefireReport mojo = createReportMojo(testPom);
90 File outputDir = (File) getVariableValueFromObject(mojo, "outputDirectory");
91 boolean showSuccess = (Boolean) getVariableValueFromObject(mojo, "showSuccess");
92 File reportsDir = (File) getVariableValueFromObject(mojo, "reportsDirectory");
93 String outputName = (String) getVariableValueFromObject(mojo, "outputName");
94 File xrefTestLocation = (File) getVariableValueFromObject(mojo, "xrefTestLocation");
95 boolean linkXRef = (Boolean) getVariableValueFromObject(mojo, "linkXRef");
96
97 assertEquals(new File(getBasedir() + "/target/site/unit/basic-surefire-report-test"), outputDir);
98 assertTrue(showSuccess);
99 assertEquals(
100 new File(getBasedir() + "/src/test/resources/unit/basic-surefire-report-test/surefire-reports")
101 .getAbsolutePath(),
102 reportsDir.getAbsolutePath());
103 assertEquals("surefire", outputName);
104 assertEquals(
105 new File(getBasedir() + "/target/site/unit/basic-surefire-report-test/xref-test").getAbsolutePath(),
106 xrefTestLocation.getAbsolutePath());
107 assertTrue(linkXRef);
108
109 mojo.execute();
110 File report = new File(getBasedir(), "target/site/unit/basic-surefire-report-test/surefire.html");
111 assertTrue(report.exists());
112 String htmlContent = FileUtils.fileRead(report);
113
114 int idx = htmlContent.indexOf("images/icon_success_sml.gif");
115 assertTrue(idx >= 0);
116 }
117
118 private MojoExecution getMockMojoExecution() {
119 MojoDescriptor md = new MojoDescriptor();
120 md.setGoal("report");
121
122 MojoExecution me = new MojoExecution(md);
123
124 PluginDescriptor pd = new PluginDescriptor();
125 Plugin p = new Plugin();
126 p.setGroupId("org.apache.maven.plugins");
127 p.setArtifactId("maven-surefire-report-plugin");
128 pd.setPlugin(p);
129 md.setPluginDescriptor(pd);
130
131 return me;
132 }
133
134 public void testBasicSurefireReportIfShowSuccessIsFalse() throws Exception {
135 File testPom = getPluginXmlFile("basic-surefire-report-success-false");
136 SurefireReport mojo = createReportMojo(testPom);
137 boolean showSuccess = (Boolean) getVariableValueFromObject(mojo, "showSuccess");
138 assertFalse(showSuccess);
139 mojo.execute();
140 File report = new File(getBasedir(), "target/site/unit/basic-surefire-report-success-false/surefire.html");
141 assertTrue(report.exists());
142 String htmlContent = FileUtils.fileRead(report);
143
144 int idx = htmlContent.indexOf("images/icon_success_sml.gif");
145 assertTrue(idx < 0);
146 }
147
148 public void testBasicSurefireReportIfLinkXrefIsFalse() throws Exception {
149 File testPom = getPluginXmlFile("basic-surefire-report-linkxref-false");
150 SurefireReport mojo = createReportMojo(testPom);
151 boolean linkXRef = (Boolean) getVariableValueFromObject(mojo, "linkXRef");
152 assertFalse(linkXRef);
153 mojo.execute();
154 File report = new File(getBasedir(), "target/site/unit/basic-surefire-report-linkxref-false/surefire.html");
155 assertTrue(report.exists());
156 String htmlContent = FileUtils.fileRead(report);
157
158 int idx = htmlContent.indexOf("./xref-test/com/shape/CircleTest.html#L44");
159 assertTrue(idx == -1);
160 }
161
162 public void testBasicSurefireReportIfReportingIsNull() throws Exception {
163 File testPom = getPluginXmlFile("basic-surefire-report-reporting-null");
164 SurefireReport mojo = createReportMojo(testPom);
165 mojo.execute();
166 File report = new File(getBasedir(), "target/site/unit/basic-surefire-report-reporting-null/surefire.html");
167 assertTrue(report.exists());
168 String htmlContent = FileUtils.fileRead(report);
169
170 int idx = htmlContent.indexOf("./xref-test/com/shape/CircleTest.html#L44");
171 assertTrue(idx < 0);
172 }
173
174 @SuppressWarnings("checkstyle:methodname")
175 public void testBasicSurefireReport_AnchorTestCases() throws Exception {
176 File testPom = getPluginXmlFile("basic-surefire-report-anchor-test-cases");
177 SurefireReport mojo = createReportMojo(testPom);
178 mojo.execute();
179 File report = new File(getBasedir(), "target/site/unit/basic-surefire-report-anchor-test-cases/surefire.html");
180 assertTrue(report.exists());
181 String htmlContent = FileUtils.fileRead(report);
182
183 int idx = htmlContent.indexOf("<td><a id=\"TC_com.shape.CircleTest.testX\"></a>testX</td>");
184 assertTrue(idx > 0);
185
186 idx = htmlContent.indexOf("<td><a id=\"TC_com.shape.CircleTest.testRadius\"></a>"
187 + "<a href=\"#com.shape.CircleTest.testRadius\">testRadius</a>");
188 assertTrue(idx > 0);
189 }
190
191 public void testSurefireReportSingleError() throws Exception {
192 File testPom = getPluginXmlFile("surefire-report-single-error");
193 SurefireReport mojo = createReportMojo(testPom);
194 mojo.execute();
195 File report = new File(getBasedir(), "target/site/unit/surefire-report-single-error/surefire.html");
196 assertTrue(report.exists());
197 String htmlContent = FileUtils.fileRead(report);
198
199 assertThat(
200 htmlContent,
201 containsString(toSystemNewLine("<tr class=\"b\">\n"
202 + "<td>1</td>\n"
203 + "<td>1</td>\n"
204 + "<td>0</td>\n"
205 + "<td>0</td>\n"
206 + "<td>0%</td>\n"
207 + "<td>0 s</td>")));
208
209 assertThat(
210 htmlContent,
211 containsString(toSystemNewLine("<tr class=\"b\">\n"
212 + "<td><a href=\"#surefire\">surefire</a></td>\n"
213 + "<td>1</td>\n"
214 + "<td>1</td>\n"
215 + "<td>0</td>\n"
216 + "<td>0</td>\n"
217 + "<td>0%</td>\n"
218 + "<td>0 s</td></tr>")));
219 assertThat(
220 htmlContent,
221 containsString(toSystemNewLine("<tr class=\"b\">\n"
222 + "<td>"
223 + "<a href=\"#surefire.MyTest\">"
224 + "<img src=\"images/icon_error_sml.gif\" />"
225 + "</a>"
226 + "</td>\n"
227 + "<td><a href=\"#surefire.MyTest\">MyTest</a></td>\n"
228 + "<td>1</td>\n"
229 + "<td>1</td>\n"
230 + "<td>0</td>\n"
231 + "<td>0</td>\n"
232 + "<td>0%</td>\n"
233 + "<td>0 s</td></tr>")));
234
235 assertThat(htmlContent, containsString(">surefire.MyTest:13</a>"));
236
237 assertThat(htmlContent, containsString("./xref-test/surefire/MyTest.html#L13"));
238
239 assertThat(
240 htmlContent,
241 containsString(toSystemNewLine("<pre>"
242 + "java.lang.RuntimeException: java.lang.IndexOutOfBoundsException\n"
243 + "\tat surefire.MyTest.rethrownDelegate(MyTest.java:24)\n"
244 + "\tat surefire.MyTest.newRethrownDelegate(MyTest.java:17)\n"
245 + "\tat surefire.MyTest.test(MyTest.java:13)\n"
246 + "\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n"
247 + "\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)\n"
248 + "\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n"
249 + "\tat java.lang.reflect.Method.invoke(Method.java:606)\n"
250 + "\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)\n"
251 + "\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)\n"
252 + "\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)\n"
253 + "\tat org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)\n"
254 + "\tat org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)\n"
255 + "\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)\n"
256 + "\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)\n"
257 + "\tat org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)\n"
258 + "\tat org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)\n"
259 + "\tat org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)\n"
260 + "\tat org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)\n"
261 + "\tat org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)\n"
262 + "\tat org.junit.runners.ParentRunner.run(ParentRunner.java:363)\n"
263 + "\tat org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:272)\n"
264 + "\tat org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:167)\n"
265 + "\tat org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:147)\n"
266 + "\tat org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:130)\n"
267 + "\tat org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:211)\n"
268 + "\tat org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:163)\n"
269 + "\tat org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:105)\n"
270 + "\tCaused by: java.lang.IndexOutOfBoundsException\n"
271 + "\tat surefire.MyTest.failure(MyTest.java:33)\n"
272 + "\tat surefire.MyTest.access$100(MyTest.java:9)\n"
273 + "\tat surefire.MyTest$Nested.run(MyTest.java:38)\n"
274 + "\tat surefire.MyTest.delegate(MyTest.java:29)\n"
275 + "\tat surefire.MyTest.rethrownDelegate(MyTest.java:22)" + "</pre>")));
276 }
277
278 public void testSurefireReportNestedClassTrimStackTrace() throws Exception {
279 File testPom = getPluginXmlFile("surefire-report-nestedClass-trimStackTrace");
280 SurefireReport mojo = createReportMojo(testPom);
281 mojo.execute();
282 File report =
283 new File(getBasedir(), "target/site/unit/surefire-report-nestedClass-trimStackTrace/surefire.html");
284 assertTrue(report.exists());
285 String htmlContent = FileUtils.fileRead(report);
286
287 assertThat(
288 htmlContent,
289 containsString(toSystemNewLine("<tr class=\"b\">\n"
290 + "<td>1</td>\n"
291 + "<td>1</td>\n"
292 + "<td>0</td>\n"
293 + "<td>0</td>\n"
294 + "<td>0%</td>\n"
295 + "<td>0 s</td>")));
296
297 assertThat(
298 htmlContent,
299 containsString(toSystemNewLine("<tr class=\"b\">\n"
300 + "<td><a href=\"#surefire\">surefire</a></td>\n"
301 + "<td>1</td>\n"
302 + "<td>1</td>\n"
303 + "<td>0</td>\n"
304 + "<td>0</td>\n"
305 + "<td>0%</td>\n"
306 + "<td>0 s</td></tr>")));
307 assertThat(
308 htmlContent,
309 containsString(toSystemNewLine("<tr class=\"b\">\n"
310 + "<td>"
311 + "<a href=\"#surefire.MyTest\">"
312 + "<img src=\"images/icon_error_sml.gif\" />"
313 + "</a>"
314 + "</td>\n"
315 + "<td><a href=\"#surefire.MyTest\">MyTest</a></td>\n"
316 + "<td>1</td>\n"
317 + "<td>1</td>\n"
318 + "<td>0</td>\n"
319 + "<td>0</td>\n"
320 + "<td>0%</td>\n"
321 + "<td>0 s</td></tr>")));
322 assertThat(htmlContent, containsString(">surefire.MyTest:13</a>"));
323
324 assertThat(htmlContent, containsString("./xref-test/surefire/MyTest.html#L13"));
325
326 assertThat(
327 htmlContent,
328 containsString(toSystemNewLine("<pre>"
329 + "java.lang.RuntimeException: java.lang.IndexOutOfBoundsException\n"
330 + "\tat surefire.MyTest.rethrownDelegate(MyTest.java:24)\n"
331 + "\tat surefire.MyTest.newRethrownDelegate(MyTest.java:17)\n"
332 + "\tat surefire.MyTest.test(MyTest.java:13)\n"
333 + "\tCaused by: java.lang.IndexOutOfBoundsException\n"
334 + "\tat surefire.MyTest.failure(MyTest.java:33)\n"
335 + "\tat surefire.MyTest.access$100(MyTest.java:9)\n"
336 + "\tat surefire.MyTest$Nested.run(MyTest.java:38)\n"
337 + "\tat surefire.MyTest.delegate(MyTest.java:29)\n"
338 + "\tat surefire.MyTest.rethrownDelegate(MyTest.java:22)"
339 + "</pre>")));
340 }
341
342 public void testSurefireReportNestedClass() throws Exception {
343 File testPom = getPluginXmlFile("surefire-report-nestedClass");
344 SurefireReport mojo = createReportMojo(testPom);
345 mojo.execute();
346 File report = new File(getBasedir(), "target/site/unit/surefire-report-nestedClass/surefire.html");
347 assertTrue(report.exists());
348 String htmlContent = FileUtils.fileRead(report);
349
350 assertThat(
351 htmlContent,
352 containsString(toSystemNewLine("<tr class=\"b\">\n"
353 + "<td>1</td>\n"
354 + "<td>1</td>\n"
355 + "<td>0</td>\n"
356 + "<td>0</td>\n"
357 + "<td>0%</td>\n"
358 + "<td>0 s</td>")));
359
360 assertThat(
361 htmlContent,
362 containsString(toSystemNewLine("<tr class=\"b\">\n"
363 + "<td><a href=\"#surefire\">surefire</a></td>\n"
364 + "<td>1</td>\n"
365 + "<td>1</td>\n"
366 + "<td>0</td>\n"
367 + "<td>0</td>\n"
368 + "<td>0%</td>\n"
369 + "<td>0 s</td></tr>")));
370 assertThat(
371 htmlContent,
372 containsString(toSystemNewLine("<tr class=\"b\">\n"
373 + "<td>"
374 + "<a href=\"#surefire.MyTest\">"
375 + "<img src=\"images/icon_error_sml.gif\" />"
376 + "</a>"
377 + "</td>\n"
378 + "<td><a href=\"#surefire.MyTest\">MyTest</a></td>\n"
379 + "<td>1</td>\n"
380 + "<td>1</td>\n"
381 + "<td>0</td>\n"
382 + "<td>0</td>\n"
383 + "<td>0%</td>\n"
384 + "<td>0 s</td></tr>")));
385 assertThat(htmlContent, containsString(">surefire.MyTest:13</a>"));
386
387 assertThat(htmlContent, containsString("./xref-test/surefire/MyTest.html#L13"));
388
389 assertThat(
390 htmlContent,
391 containsString(toSystemNewLine("<pre>"
392 + "java.lang.RuntimeException: java.lang.IndexOutOfBoundsException\n"
393 + "\tat surefire.MyTest.rethrownDelegate(MyTest.java:24)\n"
394 + "\tat surefire.MyTest.newRethrownDelegate(MyTest.java:17)\n"
395 + "\tat surefire.MyTest.test(MyTest.java:13)\n"
396 + "\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n"
397 + "\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)\n"
398 + "\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n"
399 + "\tat java.lang.reflect.Method.invoke(Method.java:606)\n"
400 + "\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)\n"
401 + "\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)\n"
402 + "\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)\n"
403 + "\tat org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)\n"
404 + "\tat org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)\n"
405 + "\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)\n"
406 + "\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)\n"
407 + "\tat org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)\n"
408 + "\tat org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)\n"
409 + "\tat org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)\n"
410 + "\tat org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)\n"
411 + "\tat org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)\n"
412 + "\tat org.junit.runners.ParentRunner.run(ParentRunner.java:363)\n"
413 + "\tat org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:272)\n"
414 + "\tat org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:167)\n"
415 + "\tat org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:147)\n"
416 + "\tat org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:130)\n"
417 + "\tat org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:211)\n"
418 + "\tat org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:163)\n"
419 + "\tat org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:105)\n"
420 + "\tCaused by: java.lang.IndexOutOfBoundsException\n"
421 + "\tat surefire.MyTest.failure(MyTest.java:33)\n"
422 + "\tat surefire.MyTest.access$100(MyTest.java:9)\n"
423 + "\tat surefire.MyTest$Nested.run(MyTest.java:38)\n"
424 + "\tat surefire.MyTest.delegate(MyTest.java:29)\n"
425 + "\tat surefire.MyTest.rethrownDelegate(MyTest.java:22)"
426 + "</pre>")));
427 }
428
429 public void testSurefireReportEnclosedTrimStackTrace() throws Exception {
430 File testPom = getPluginXmlFile("surefire-report-enclosed-trimStackTrace");
431 SurefireReport mojo = createReportMojo(testPom);
432 mojo.execute();
433 File report = new File(getBasedir(), "target/site/unit/surefire-report-enclosed-trimStackTrace/surefire.html");
434 assertTrue(report.exists());
435 String htmlContent = FileUtils.fileRead(report);
436
437 assertThat(
438 htmlContent,
439 containsString(toSystemNewLine("<tr class=\"b\">\n"
440 + "<td>1</td>\n"
441 + "<td>1</td>\n"
442 + "<td>0</td>\n"
443 + "<td>0</td>\n"
444 + "<td>0%</td>\n"
445 + "<td>0 s</td>")));
446
447 assertThat(
448 htmlContent,
449 containsString(toSystemNewLine("<tr class=\"b\">\n"
450 + "<td><a href=\"#surefire\">surefire</a></td>\n"
451 + "<td>1</td>\n"
452 + "<td>1</td>\n"
453 + "<td>0</td>\n"
454 + "<td>0</td>\n"
455 + "<td>0%</td>\n"
456 + "<td>0 s</td></tr>")));
457 assertThat(
458 htmlContent,
459 containsString(toSystemNewLine("<tr class=\"b\">\n"
460 + "<td>"
461 + "<a href=\"#surefire.MyTest$A\">"
462 + "<img src=\"images/icon_error_sml.gif\" />"
463 + "</a>"
464 + "</td>\n"
465 + "<td><a href=\"#surefire.MyTest$A\">MyTest$A</a></td>\n"
466 + "<td>1</td>\n"
467 + "<td>1</td>\n"
468 + "<td>0</td>\n"
469 + "<td>0</td>\n"
470 + "<td>0%</td>\n"
471 + "<td>0 s</td></tr>")));
472
473 assertThat(htmlContent, containsString(">surefire.MyTest$A:45</a>"));
474
475 assertThat(htmlContent, containsString("./xref-test/surefire/MyTest$A.html#L45"));
476
477 assertThat(
478 htmlContent,
479 containsString(toSystemNewLine("<pre>"
480 + "java.lang.RuntimeException: java.lang.IndexOutOfBoundsException\n"
481 + "\tat surefire.MyTest.failure(MyTest.java:33)\n"
482 + "\tat surefire.MyTest.access$100(MyTest.java:9)\n"
483 + "\tat surefire.MyTest$Nested.run(MyTest.java:38)\n"
484 + "\tat surefire.MyTest.delegate(MyTest.java:29)\n"
485 + "\tat surefire.MyTest.rethrownDelegate(MyTest.java:22)\n"
486 + "\tat surefire.MyTest.newRethrownDelegate(MyTest.java:17)\n"
487 + "\tat surefire.MyTest.access$200(MyTest.java:9)\n"
488 + "\tat surefire.MyTest$A.t(MyTest.java:45)\n"
489 + "</pre>")));
490 }
491
492 public void testSurefireReportEnclosed() throws Exception {
493 File testPom = getPluginXmlFile("surefire-report-enclosed");
494 SurefireReport mojo = createReportMojo(testPom);
495 mojo.execute();
496 File report = new File(getBasedir(), "target/site/unit/surefire-report-enclosed/surefire.html");
497 assertTrue(report.exists());
498 String htmlContent = FileUtils.fileRead(report);
499
500 assertThat(
501 htmlContent,
502 containsString(toSystemNewLine("<tr class=\"b\">\n"
503 + "<td>1</td>\n"
504 + "<td>1</td>\n"
505 + "<td>0</td>\n"
506 + "<td>0</td>\n"
507 + "<td>0%</td>\n"
508 + "<td>0 s</td>")));
509
510 assertThat(
511 htmlContent,
512 containsString(toSystemNewLine("<tr class=\"b\">\n"
513 + "<td><a href=\"#surefire\">surefire</a></td>\n"
514 + "<td>1</td>\n"
515 + "<td>1</td>\n"
516 + "<td>0</td>\n"
517 + "<td>0</td>\n"
518 + "<td>0%</td>\n"
519 + "<td>0 s</td></tr>")));
520 assertThat(
521 htmlContent,
522 containsString(toSystemNewLine("<tr class=\"b\">\n"
523 + "<td>"
524 + "<a href=\"#surefire.MyTest$A\">"
525 + "<img src=\"images/icon_error_sml.gif\" />"
526 + "</a>"
527 + "</td>\n"
528 + "<td><a href=\"#surefire.MyTest$A\">MyTest$A</a></td>\n"
529 + "<td>1</td>\n"
530 + "<td>1</td>\n"
531 + "<td>0</td>\n"
532 + "<td>0</td>\n"
533 + "<td>0%</td>\n"
534 + "<td>0 s</td></tr>")));
535
536 assertThat(htmlContent, containsString(">surefire.MyTest$A:45</a>"));
537
538 assertThat(htmlContent, containsString("./xref-test/surefire/MyTest$A.html#L45"));
539
540 assertThat(
541 htmlContent,
542 containsString(
543 toSystemNewLine("<pre>" + "java.lang.RuntimeException: java.lang.IndexOutOfBoundsException\n"
544 + "\tat surefire.MyTest.rethrownDelegate(MyTest.java:24)\n"
545 + "\tat surefire.MyTest.newRethrownDelegate(MyTest.java:17)\n"
546 + "\tat surefire.MyTest.access$200(MyTest.java:9)\n"
547 + "\tat surefire.MyTest$A.t(MyTest.java:45)\n"
548 + "\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n"
549 + "\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)\n"
550 + "\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n"
551 + "\tat java.lang.reflect.Method.invoke(Method.java:606)\n"
552 + "\tat org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)\n"
553 + "\tat org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)\n"
554 + "\tat org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)\n"
555 + "\tat org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)\n"
556 + "\tat org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)\n"
557 + "\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)\n"
558 + "\tat org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)\n"
559 + "\tat org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)\n"
560 + "\tat org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)\n"
561 + "\tat org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)\n"
562 + "\tat org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)\n"
563 + "\tat org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)\n"
564 + "\tat org.junit.runners.ParentRunner.run(ParentRunner.java:363)\n"
565 + "\tat org.junit.runners.Suite.runChild(Suite.java:128)\n"
566 + "\tat org.junit.runners.Suite.runChild(Suite.java:27)\n"
567 + "\tat org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)\n"
568 + "\tat org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)\n"
569 + "\tat org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)\n"
570 + "\tat org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)\n"
571 + "\tat org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)\n"
572 + "\tat org.junit.runners.ParentRunner.run(ParentRunner.java:363)\n"
573 + "\tat org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:272)\n"
574 + "\tat org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:167)\n"
575 + "\tat org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:147)\n"
576 + "\tat org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:130)\n"
577 + "\tat org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:211)\n"
578 + "\tat org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:163)\n"
579 + "\tat org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:105)\n"
580 + "\tCaused by: java.lang.IndexOutOfBoundsException\n"
581 + "\tat surefire.MyTest.failure(MyTest.java:33)\n"
582 + "\tat surefire.MyTest.access$100(MyTest.java:9)\n"
583 + "\tat surefire.MyTest$Nested.run(MyTest.java:38)\n"
584 + "\tat surefire.MyTest.delegate(MyTest.java:29)\n"
585 + "\tat surefire.MyTest.rethrownDelegate(MyTest.java:22)\n"
586 + "</pre>")));
587 }
588
589 public void testCustomTitleAndDescriptionReport() throws Exception {
590 File testPom = getPluginXmlFile("surefire-1183");
591 SurefireReport mojo = createReportMojo(testPom);
592
593 File outputDir = (File) getVariableValueFromObject(mojo, "outputDirectory");
594 String outputName = (String) getVariableValueFromObject(mojo, "outputName");
595 File reportsDir = (File) getVariableValueFromObject(mojo, "reportsDirectory");
596
597 assertEquals(new File(getBasedir() + "/target/site/unit/surefire-1183"), outputDir);
598 assertEquals(
599 new File(getBasedir() + "/src/test/resources/unit/surefire-1183/acceptancetest-reports")
600 .getAbsolutePath(),
601 reportsDir.getAbsolutePath());
602 assertEquals("acceptance-test", outputName);
603
604 mojo.execute();
605
606 File report = new File(getBasedir(), "target/site/unit/surefire-1183/acceptance-test.html");
607
608 assertTrue(report.exists());
609
610 String htmlContent = FileUtils.fileRead(report);
611 assertThat(
612 htmlContent,
613 containsString(toSystemNewLine("<section><a id=\"Acceptance_Test\"></a>\n<h1>Acceptance Test</h1>")));
614 }
615 }