1   package org.apache.maven.plugins.junitreport;
2   
3   /* ====================================================================
4    *   Copyright 2006 The Apache Software Foundation.
5    *
6    *   Licensed under the Apache License, Version 2.0 (the "License");
7    *   you may not use this file except in compliance with the License.
8    *   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, software
13   *   distributed under the License is distributed on an "AS IS" BASIS,
14   *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15   *   See the License for the specific language governing permissions and
16   *   limitations under the License.
17   * ====================================================================
18   */
19  
20  /*
21   * Created on Jun 5, 2005
22   */
23  
24  import junit.framework.TestCase;
25  
26  /**
27   * @author <a href="mailto:cleclerc@pobox.com">Cyrille Le Clerc </a>
28   * @version $Id: ExceptionToolTest.java 393632 2006-04-12 22:28:03Z ltheussl $
29   */
30  public class ExceptionToolTest extends TestCase
31  {
32      private String[] m_nestedStackTraces =
33          new String[]
34          {
35              "java.lang.Exception: The nested Exception\r\n"
36              + "   at com.mycompany.test.MyTest.testNestedException(MyTest.java:16)\r\n"
37              + "   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n"
38              + "   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)\r\n"
39              + "   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)\r\n"
40              + "   at org.apache.commons.jelly.tags.ant.AntTag.doTag(AntTag.java:195)\r\n"
41              + "   at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:279)\r\n"
42              + "   at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:135)\r\n"
43              + "   at org.apache.commons.jelly.TagSupport.invokeBody(TagSupport.java:233)\r\n"
44              + "   at org.apache.commons.jelly.tags.core.IfTag.doTag(IfTag.java:88)\r\n"
45              + "   at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:279)\r\n"
46              + "   at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:135)\r\n"
47              + "   at org.apache.maven.jelly.tags.werkz.MavenGoalTag.runBodyTag(MavenGoalTag.java:79)\r\n"
48              + "   at org.apache.maven.jelly.tags.werkz.MavenGoalTag$MavenGoalAction.performAction(MavenGoalTag.java:110)\r\n"
49              + "   at com.werken.werkz.Goal.fire(Goal.java:639)\r\n"
50              + "   at com.werken.werkz.Goal.attain(Goal.java:575)\r\n"
51              + "   at com.werken.werkz.WerkzProject.attainGoal(WerkzProject.java:193)\r\n"
52              + "   at org.apache.maven.jelly.tags.werkz.MavenAttainGoalTag.doTag(MavenAttainGoalTag.java:127)\r\n"
53              + "   at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:279)\r\n"
54              + "   at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:135)\r\n"
55              + "   at org.apache.commons.jelly.TagSupport.invokeBody(TagSupport.java:233)\r\n"
56              + "   at org.apache.commons.jelly.tags.core.IfTag.doTag(IfTag.java:88)\r\n"
57              + "   at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:279)\r\n"
58              + "   at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:135)\r\n"
59              + "   at org.apache.maven.jelly.tags.werkz.MavenGoalTag.runBodyTag(MavenGoalTag.java:79)\r\n"
60              + "   at org.apache.maven.jelly.tags.werkz.MavenGoalTag$MavenGoalAction.performAction(MavenGoalTag.java:110)\r\n"
61              + "   at com.werken.werkz.Goal.fire(Goal.java:639)\r\n"
62              + "   at com.werken.werkz.Goal.attain(Goal.java:575)\r\n"
63              + "   at com.werken.werkz.Goal.attainPrecursors(Goal.java:488)\r\n"
64              + "   at com.werken.werkz.Goal.attain(Goal.java:573)\r\n"
65              + "   at com.werken.werkz.WerkzProject.attainGoal(WerkzProject.java:193)\r\n"
66              + "   at org.apache.maven.jelly.tags.werkz.MavenAttainGoalTag.doTag(MavenAttainGoalTag.java:127)\r\n"
67              + "   at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:279)\r\n"
68              + "   at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:135)\r\n"
69              + "   at org.apache.commons.jelly.TagSupport.invokeBody(TagSupport.java:233)\r\n"
70              + "   at org.apache.commons.jelly.tags.core.IfTag.doTag(IfTag.java:88)\r\n"
71              + "   at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:279)\r\n"
72              + "   at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:135)\r\n"
73              + "   at org.apache.commons.jelly.TagSupport.invokeBody(TagSupport.java:233)\r\n"
74              + "   at org.apache.commons.jelly.tags.core.ForEachTag.doTag(ForEachTag.java:145)\r\n"
75              + "   at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:279)\r\n"
76              + "   at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:135)\r\n"
77              + "   at org.apache.maven.jelly.tags.werkz.MavenGoalTag.runBodyTag(MavenGoalTag.java:79)\r\n"
78              + "   at org.apache.maven.jelly.tags.werkz.MavenGoalTag$MavenGoalAction.performAction(MavenGoalTag.java:110)\r\n"
79              + "   at com.werken.werkz.Goal.fire(Goal.java:639)\r\n"
80              + "   at com.werken.werkz.Goal.attain(Goal.java:575)\r\n"
81              + "   at com.werken.werkz.WerkzProject.attainGoal(WerkzProject.java:193)\r\n"
82              + "   at org.apache.maven.jelly.tags.werkz.MavenAttainGoalTag.doTag(MavenAttainGoalTag.java:127)\r\n"
83              + "   at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:279)\r\n"
84              + "   at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:135)\r\n"
85              + "   at org.apache.maven.jelly.tags.werkz.MavenGoalTag.runBodyTag(MavenGoalTag.java:79)\r\n"
86              + "   at org.apache.maven.jelly.tags.werkz.MavenGoalTag$MavenGoalAction.performAction(MavenGoalTag.java:110)\r\n"
87              + "   at com.werken.werkz.Goal.fire(Goal.java:639)\r\n"
88              + "   at com.werken.werkz.Goal.attain(Goal.java:575)\r\n"
89              + "   at org.apache.maven.plugin.PluginManager.attainGoals(PluginManager.java:671)\r\n"
90              + "   at org.apache.maven.MavenSession.attainGoals(MavenSession.java:263)\r\n"
91              + "   at org.apache.maven.cli.App.doMain(App.java:488)\r\n"
92              + "   at org.apache.maven.cli.App.main(App.java:1239)\r\n"
93              + "   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n"
94              + "   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)\r\n"
95              + "   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)\r\n"
96              + "   at com.werken.forehead.Forehead.run(Forehead.java:551)\r\n"
97              + "   at com.werken.forehead.Forehead.main(Forehead.java:581)\r\n",
98              "Caused by: java.lang.Exception: The cause Exception\r\n"
99              + "   at com.mycompany.test.MyTest.testNestedException(MyTest.java:15)\r\n"
100             + "   ... 76 more\r\n"
101         };
102     private String m_nestedStackTrace =
103         m_nestedStackTraces[0] + m_nestedStackTraces[1];
104     private String[] m_truncatedNestedStackTraces =
105         new String[]
106         {
107             "java.lang.Exception: The nested Exception\r\n"
108             + "   at com.mycompany.test.MyTest.testNestedException(MyTest.java:16)\r\n"
109             + "   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n"
110             + "   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)\r\n"
111             + "   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)\r\n",
112             "Caused by: java.lang.Exception: The cause Exception\r\n"
113             + "   at com.mycompany.test.MyTest.testNestedException(MyTest.java:15)\r\n"
114             + "   ... 76 more\r\n"
115         };
116     private String m_truncatedNestedStackTrace =
117         m_truncatedNestedStackTraces[0] + "   ... more\r\n"
118         + m_truncatedNestedStackTraces[1] + "\r\n";
119     private String m_stackTrace =
120         "java.lang.Exception: The Exception\r\n"
121         + "   at com.mycompany.test.MyTest.testNestedException(MyTest.java:16)\r\n"
122         + "   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n"
123         + "   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)\r\n"
124         + "   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)\r\n"
125         + "   at org.apache.commons.jelly.tags.ant.AntTag.doTag(AntTag.java:195)\r\n"
126         + "   at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:279)\r\n"
127         + "   at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:135)\r\n"
128         + "   at org.apache.commons.jelly.TagSupport.invokeBody(TagSupport.java:233)\r\n"
129         + "   at org.apache.commons.jelly.tags.core.IfTag.doTag(IfTag.java:88)\r\n"
130         + "   at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:279)\r\n"
131         + "   at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:135)\r\n"
132         + "   at org.apache.maven.jelly.tags.werkz.MavenGoalTag.runBodyTag(MavenGoalTag.java:79)\r\n"
133         + "   at org.apache.maven.jelly.tags.werkz.MavenGoalTag$MavenGoalAction.performAction(MavenGoalTag.java:110)\r\n"
134         + "   at com.werken.werkz.Goal.fire(Goal.java:639)\r\n"
135         + "   at com.werken.werkz.Goal.attain(Goal.java:575)\r\n"
136         + "   at com.werken.werkz.WerkzProject.attainGoal(WerkzProject.java:193)\r\n"
137         + "   at org.apache.maven.jelly.tags.werkz.MavenAttainGoalTag.doTag(MavenAttainGoalTag.java:127)\r\n"
138         + "   at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:279)\r\n"
139         + "   at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:135)\r\n"
140         + "   at org.apache.commons.jelly.TagSupport.invokeBody(TagSupport.java:233)\r\n"
141         + "   at org.apache.commons.jelly.tags.core.IfTag.doTag(IfTag.java:88)\r\n"
142         + "   at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:279)\r\n"
143         + "   at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:135)\r\n"
144         + "   at org.apache.maven.jelly.tags.werkz.MavenGoalTag.runBodyTag(MavenGoalTag.java:79)\r\n"
145         + "   at org.apache.maven.jelly.tags.werkz.MavenGoalTag$MavenGoalAction.performAction(MavenGoalTag.java:110)\r\n"
146         + "   at com.werken.werkz.Goal.fire(Goal.java:639)\r\n"
147         + "   at com.werken.werkz.Goal.attain(Goal.java:575)\r\n"
148         + "   at com.werken.werkz.Goal.attainPrecursors(Goal.java:488)\r\n"
149         + "   at com.werken.werkz.Goal.attain(Goal.java:573)\r\n"
150         + "   at com.werken.werkz.WerkzProject.attainGoal(WerkzProject.java:193)\r\n"
151         + "   at org.apache.maven.jelly.tags.werkz.MavenAttainGoalTag.doTag(MavenAttainGoalTag.java:127)\r\n"
152         + "   at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:279)\r\n"
153         + "   at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:135)\r\n"
154         + "   at org.apache.commons.jelly.TagSupport.invokeBody(TagSupport.java:233)\r\n"
155         + "   at org.apache.commons.jelly.tags.core.IfTag.doTag(IfTag.java:88)\r\n"
156         + "   at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:279)\r\n"
157         + "   at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:135)\r\n"
158         + "   at org.apache.commons.jelly.TagSupport.invokeBody(TagSupport.java:233)\r\n"
159         + "   at org.apache.commons.jelly.tags.core.ForEachTag.doTag(ForEachTag.java:145)\r\n"
160         + "   at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:279)\r\n"
161         + "   at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:135)\r\n"
162         + "   at org.apache.maven.jelly.tags.werkz.MavenGoalTag.runBodyTag(MavenGoalTag.java:79)\r\n"
163         + "   at org.apache.maven.jelly.tags.werkz.MavenGoalTag$MavenGoalAction.performAction(MavenGoalTag.java:110)\r\n"
164         + "   at com.werken.werkz.Goal.fire(Goal.java:639)\r\n"
165         + "   at com.werken.werkz.Goal.attain(Goal.java:575)\r\n"
166         + "   at com.werken.werkz.WerkzProject.attainGoal(WerkzProject.java:193)\r\n"
167         + "   at org.apache.maven.jelly.tags.werkz.MavenAttainGoalTag.doTag(MavenAttainGoalTag.java:127)\r\n"
168         + "   at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:279)\r\n"
169         + "   at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:135)\r\n"
170         + "   at org.apache.maven.jelly.tags.werkz.MavenGoalTag.runBodyTag(MavenGoalTag.java:79)\r\n"
171         + "   at org.apache.maven.jelly.tags.werkz.MavenGoalTag$MavenGoalAction.performAction(MavenGoalTag.java:110)\r\n"
172         + "   at com.werken.werkz.Goal.fire(Goal.java:639)\r\n"
173         + "   at com.werken.werkz.Goal.attain(Goal.java:575)\r\n"
174         + "   at org.apache.maven.plugin.PluginManager.attainGoals(PluginManager.java:671)\r\n"
175         + "   at org.apache.maven.MavenSession.attainGoals(MavenSession.java:263)\r\n"
176         + "   at org.apache.maven.cli.App.doMain(App.java:488)\r\n"
177         + "   at org.apache.maven.cli.App.main(App.java:1239)\r\n"
178         + "   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n"
179         + "   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)\r\n"
180         + "   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)\r\n"
181         + "   at com.werken.forehead.Forehead.run(Forehead.java:551)\r\n"
182         + "   at com.werken.forehead.Forehead.main(Forehead.java:581)\r\n";
183     private String m_truncatedStackTrace =
184         "java.lang.Exception: The Exception\r\n"
185         + "   at com.mycompany.test.MyTest.testNestedException(MyTest.java:16)\r\n"
186         + "   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n"
187         + "   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)\r\n"
188         + "   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)\r\n"
189         + "   ... more";
190 
191     public static void main( String[] args )
192     {
193         junit.textui.TestRunner.run( ExceptionToolTest.class );
194     }
195 
196     public void testSplitNestedStackTraces()
197     {
198         ExceptionTool exceptionTool = new ExceptionTool();
199         String[] stackTraces =
200             exceptionTool.splitNestedStackTraces( m_nestedStackTrace );
201 
202         for ( int i = 0; i < stackTraces.length; i++ )
203         {
204             String actual = stackTraces[i];
205             String expected = m_nestedStackTraces[i];
206 
207             assertEquals( "nestedStack " + i, expected, actual );
208         }
209     }
210 
211     public void testTruncateStackTrace()
212     {
213         String searchedString =
214             "at org.apache.commons.jelly.tags.ant.AntTag.doTag";
215         ExceptionTool exceptionTool = new ExceptionTool();
216         String expected = m_truncatedStackTrace;
217         String actual =
218             exceptionTool.truncateStackTrace( m_stackTrace, searchedString );
219 
220         assertEquals( expected, actual );
221     }
222 
223     public void testTruncateNestedStackTrace()
224     {
225         String searchedString =
226             "at org.apache.commons.jelly.tags.ant.AntTag.doTag";
227         ExceptionTool exceptionTool = new ExceptionTool();
228         String expected = m_truncatedNestedStackTrace;
229         String actual =
230             exceptionTool.truncateNestedStackTrace( m_nestedStackTrace,
231                 searchedString );
232 
233         assertEquals( expected, actual );
234     }
235 
236     public void testSplit()
237     {
238         String str =
239             "value 1 separator value 2 separator value 3 separator value 4 separator value 5";
240         String[] expected =
241             new String[]
242             {
243                 "value 1 ", " value 2 ", " value 3 ", " value 4 ", " value 5"
244             };
245         ExceptionTool exceptionTool = new ExceptionTool();
246         String[] actual = exceptionTool.split( str, "separator" );
247 
248         assertEquals( "result size", expected.length, actual.length );
249 
250         for ( int i = 0; i < actual.length; i++ )
251         {
252             assertEquals( "value " + i, expected[i], actual[i] );
253         }
254     }
255 
256     public void testSplitWithNoTrailingValue()
257     {
258         String str =
259             "value 1 separator value 2 separator value 3 separator value 4 separator value 5separator";
260         String[] expected =
261             new String[]
262             {
263                 "value 1 ", " value 2 ", " value 3 ", " value 4 ", " value 5"
264             };
265         ExceptionTool exceptionTool = new ExceptionTool();
266         String[] actual = exceptionTool.split( str, "separator" );
267 
268         assertEquals( "result size", expected.length, actual.length );
269 
270         for ( int i = 0; i < actual.length; i++ )
271         {
272             assertEquals( "value " + i, expected[i], actual[i] );
273         }
274     }
275 
276     public void testSplitWithNoSeparator()
277     {
278         String str = "value 1 ";
279         String[] expected = new String[] { "value 1 " };
280         ExceptionTool exceptionTool = new ExceptionTool();
281         String[] actual = exceptionTool.split( str, "separator" );
282 
283         assertEquals( "result size", expected.length, actual.length );
284 
285         for ( int i = 0; i < actual.length; i++ )
286         {
287             assertEquals( "value " + i, expected[i], actual[i] );
288         }
289     }
290 }