2005-02-10 Sebastien Pouliot <sebastien@ximian.com>
[mono.git] / mcs / nunit20 / core / ExpectedExceptionTestCase.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.Core
31 {
32         using System;
33         using System.Diagnostics;
34         using System.Reflection;
35
36         /// <summary>
37         /// Summary description for ExpectedExceptionTestCase.
38         /// </summary>
39         public class ExpectedExceptionTestCase : TemplateTestCase
40         {
41                 private Type expectedException;
42                 private string expectedMessage;
43
44                 public ExpectedExceptionTestCase(Type fixtureType, MethodInfo method) : base(fixtureType, method)
45                 {
46                         Initialize( method );
47                 }
48
49                 public ExpectedExceptionTestCase(object fixture, MethodInfo method) : base(fixture, method)
50                 {
51                         Initialize( method );
52                 }
53
54                 private void Initialize( MethodInfo method )
55                 {
56                         NUnit.Framework.ExpectedExceptionAttribute attribute = 
57                                 Reflect.GetExpectedExceptionAttribute( method );
58
59                         if ( attribute == null )
60                                 throw new InvalidTestFixtureException( "ExpectedExceptionAttribute not found" );
61
62                         this.expectedException = attribute.ExceptionType;
63                         this.expectedMessage = attribute.ExpectedMessage;
64                 }
65
66                 protected override internal void ProcessException(Exception exception, TestCaseResult testResult)
67                 {
68                         if (expectedException.Equals(exception.GetType()))
69                         {
70                                 if (expectedMessage != null && !expectedMessage.Equals(exception.Message))
71                                 {
72                                         string message = string.Format("Expected exception to have message: \"{0}\" but received message \"{1}\"", 
73                                                 expectedMessage, exception.Message);
74                                         testResult.Failure(message, exception.StackTrace);
75                                 } 
76                                 else 
77                                 {
78                                         testResult.Success();
79                                 }
80                         }
81                         else if (exception is Framework.AssertionException)
82                         {
83                                 RecordException(exception,testResult);
84                         }
85                         else
86                         {
87                                 string message = "Expected: " + expectedException.Name + " but was " + exception.GetType().Name;
88                                 testResult.Failure(message, exception.StackTrace);
89                         }
90
91                         return;
92                 }
93
94                 protected override internal void ProcessNoException(TestCaseResult testResult)
95                 {
96                         testResult.Failure(expectedException.Name + " was expected", null);
97                 }
98         }
99 }