View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.apache.maven.surefire.api.report;
20  
21  import java.io.PrintWriter;
22  
23  import junit.framework.TestCase;
24  
25  /**
26   * @author Kristian Rosenvold
27   */
28  public class LegacyPojoStackTraceWriterTest extends TestCase {
29  
30      @SuppressWarnings("checkstyle:linelength")
31      public void testWriteTrimmedTraceToString() {
32          String stackTrace = "junit.framework.AssertionFailedError: blah\n"
33                  + "    at junit.framework.Assert.fail(Assert.java:47)\n"
34                  + "    at TestSurefire3.testQuote(TestSurefire3.java:23)\n"
35                  + "    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n"
36                  + "    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)\n"
37                  + "    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)\n"
38                  + "    at java.lang.reflect.Method.invoke(Method.java:585)\n"
39                  + "    at junit.framework.TestCase.runTest(TestCase.java:154)\n"
40                  + "    at junit.framework.TestCase.runBare(TestCase.java:127)\n"
41                  + "    at junit.framework.TestResult$1.protect(TestResult.java:106)\n"
42                  + "    at junit.framework.TestResult.runProtected(TestResult.java:124)\n"
43                  + "    at junit.framework.TestResult.run(TestResult.java:109)\n"
44                  + "    at junit.framework.TestCase.run(TestCase.java:118)\n"
45                  + "    at junit.framework.TestSuite.runTest(TestSuite.java:208)\n"
46                  + "    at junit.framework.TestSuite.run(TestSuite.java:203)\n"
47                  + "    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n"
48                  + "    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)\n"
49                  + "    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)\n"
50                  + "    at java.lang.reflect.Method.invoke(Method.java:585)\n"
51                  + "    at org.apache.maven.surefire.junit.JUnitTestSet.execute(JUnitTestSet.java:213)\n"
52                  + "    at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:140)\n"
53                  + "    at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:127)\n"
54                  + "    at org.apache.maven.surefire.Surefire.run(Surefire.java:132)\n"
55                  + "    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n"
56                  + "    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)\n"
57                  + "    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)\n"
58                  + "    at java.lang.reflect.Method.invoke(Method.java:585)\n"
59                  + "    at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:318)\n"
60                  + "    at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:956)\n";
61          MockThrowable t = new MockThrowable(stackTrace);
62          LegacyPojoStackTraceWriter w = new LegacyPojoStackTraceWriter("TestSurefire3", "testQuote", t);
63          String out = w.writeTrimmedTraceToString();
64          String expected =
65                  "junit.framework.AssertionFailedError: blah\n" + "    at junit.framework.Assert.fail(Assert.java:47)\n"
66                          + "    at TestSurefire3.testQuote(TestSurefire3.java:23)\n";
67          assertEquals(expected, out);
68      }
69  
70      @SuppressWarnings("checkstyle:linelength")
71      public void testCausedBy() {
72          String stackTrace = "java.lang.RuntimeException: blah\n"
73                  + "    at TestSurefire3.testBlah(TestSurefire3.java:45)\n"
74                  + "    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n"
75                  + "    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)\n"
76                  + "    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)\n"
77                  + "    at java.lang.reflect.Method.invoke(Method.java:585)\n"
78                  + "    at junit.framework.TestCase.runTest(TestCase.java:154)\n"
79                  + "    at junit.framework.TestCase.runBare(TestCase.java:127)\n"
80                  + "    at junit.framework.TestResult$1.protect(TestResult.java:106)\n"
81                  + "    at junit.framework.TestResult.runProtected(TestResult.java:124)\n"
82                  + "    at junit.framework.TestResult.run(TestResult.java:109)\n"
83                  + "    at junit.framework.TestCase.run(TestCase.java:118)\n"
84                  + "    at junit.framework.TestSuite.runTest(TestSuite.java:208)\n"
85                  + "    at junit.framework.TestSuite.run(TestSuite.java:203)\n"
86                  + "    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n"
87                  + "    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)\n"
88                  + "    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)\n"
89                  + "    at java.lang.reflect.Method.invoke(Method.java:585)\n"
90                  + "    at org.apache.maven.surefire.junit.JUnitTestSet.execute(JUnitTestSet.java:213)\n"
91                  + "    at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:140)\n"
92                  + "    at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:127)\n"
93                  + "    at org.apache.maven.surefire.Surefire.run(Surefire.java:132)\n"
94                  + "    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n"
95                  + "    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)\n"
96                  + "    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)\n"
97                  + "    at java.lang.reflect.Method.invoke(Method.java:585)\n"
98                  + "    at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:318)\n"
99                  + "    at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:956)\n"
100                 + "Caused by: junit.framework.AssertionFailedError: \"\n"
101                 + "    at junit.framework.Assert.fail(Assert.java:47)\n"
102                 + "    at TestSurefire3.testQuote(TestSurefire3.java:23)\n"
103                 + "    at TestSurefire3.testBlah(TestSurefire3.java:43)\n"
104                 + "    at TestSurefire3.testBlah(TestSurefire3.java:43)\n"
105                 + "    ... 26 more\n";
106         MockThrowable t = new MockThrowable(stackTrace);
107         LegacyPojoStackTraceWriter w = new LegacyPojoStackTraceWriter("TestSurefire3", "testBlah", t);
108         String out = w.writeTrimmedTraceToString();
109         String expected = "java.lang.RuntimeException: blah\n"
110                 + "    at TestSurefire3.testBlah(TestSurefire3.java:45)\n"
111                 + "Caused by: junit.framework.AssertionFailedError: \"\n"
112                 + "    at junit.framework.Assert.fail(Assert.java:47)\n"
113                 + "    at TestSurefire3.testQuote(TestSurefire3.java:23)\n"
114                 + "    at TestSurefire3.testBlah(TestSurefire3.java:43)\n"
115                 + "    at TestSurefire3.testBlah(TestSurefire3.java:43)\n"
116                 + "    ... 26 more\n";
117         assertEquals(expected, out);
118     }
119 
120     static class MockThrowable extends Throwable {
121         private static final long serialVersionUID = 1L;
122 
123         private final String stackTrace;
124 
125         MockThrowable(String stackTrace) {
126             this.stackTrace = stackTrace;
127         }
128 
129         @Override
130         public void printStackTrace(PrintWriter s) {
131             s.write(stackTrace);
132         }
133     }
134 
135     public void testMultiLineMessage() {
136         String msg = "assert \"foo\" == \"bar\"\n" + "             |\n" + "             false";
137         try {
138             throw new RuntimeException(msg);
139         } catch (Throwable t) {
140             LegacyPojoStackTraceWriter writer = new LegacyPojoStackTraceWriter(null, null, t);
141             String stackTrace = writer.writeTraceToString();
142             assertTrue(stackTrace.startsWith("java.lang.RuntimeException: \n" + msg));
143         }
144     }
145 }