merge -r 53370:58178
[mono.git] / mcs / nunit20 / util / StackTraceFilter.cs
1 #region Copyright (c) 2002-2003, James W. Newkirk, Michael C. Two, Alexei A. Vorontsov, Charlie Poole, Philip A. Craig
2 /************************************************************************************
3 '
4 ' Copyright © 2002-2003 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov, Charlie Poole
5 ' Copyright © 2000-2003 Philip A. Craig
6 '
7 ' This software is provided 'as-is', without any express or implied warranty. In no 
8 ' event will the authors be held liable for any damages arising from the use of this 
9 ' software.
10
11 ' Permission is granted to anyone to use this software for any purpose, including 
12 ' commercial applications, and to alter it and redistribute it freely, subject to the 
13 ' following restrictions:
14 '
15 ' 1. The origin of this software must not be misrepresented; you must not claim that 
16 ' you wrote the original software. If you use this software in a product, an 
17 ' acknowledgment (see the following) in the product documentation is required.
18 '
19 ' Portions Copyright © 2003 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov, Charlie Poole
20 ' or Copyright © 2000-2003 Philip A. Craig
21 '
22 ' 2. Altered source versions must be plainly marked as such, and must not be 
23 ' misrepresented as being the original software.
24 '
25 ' 3. This notice may not be removed or altered from any source distribution.
26 '
27 '***********************************************************************************/
28 #endregion
29
30 namespace NUnit.Util
31 {
32         using System;
33         using System.IO;
34
35         /// <summary>
36         /// Summary description for StackTraceFilter.
37         /// </summary>
38         public class StackTraceFilter
39         {
40                 public static string Filter(string stack) 
41                 {
42                         if(stack == null) return null;
43                         StringWriter sw = new StringWriter();
44                         StringReader sr = new StringReader(stack);
45
46                         try 
47                         {
48                                 string line;
49                                 while ((line = sr.ReadLine()) != null) 
50                                 {
51                                         if (!FilterLine(line))
52                                                 sw.WriteLine(line);
53                                 }
54                         } 
55                         catch (Exception) 
56                         {
57                                 return stack;
58                         }
59                         return sw.ToString();
60                 }
61
62                 static bool FilterLine(string line) 
63                 {
64                         string[] patterns = new string[]
65                         {
66                                 "NUnit.Core.TestCase",
67                                 "NUnit.Core.ExpectedExceptionTestCase",
68                                 "NUnit.Core.TemplateTestCase",
69                                 "NUnit.Core.TestResult",
70                                 "NUnit.Core.TestSuite",
71                                 "NUnit.Framework.Assertion", 
72                                 "NUnit.Framework.Assert" 
73                         };
74
75                         for (int i = 0; i < patterns.Length; i++) 
76                         {
77                                 if (line.IndexOf(patterns[i]) > 0)
78                                         return true;
79                         }
80
81                         return false;
82                 }
83
84         }
85 }