1 // ****************************************************************
2 // Copyright 2007, Charlie Poole
3 // This is free software licensed under the NUnit license. You may
4 // obtain a copy of the license at http://nunit.org/?p=license&r=2.4
5 // ****************************************************************
6 
7 using System;
8 
9 namespace NUnit.Framework
10 {
11 	/// <summary>
12 	/// NOTE: The use of asserters for extending NUnit has
13 	/// now been replaced by the use of constraints. This
14 	/// class is marked obsolete.
15 	///
16 	/// AbstractAsserter is the base class for all asserters.
17 	/// Asserters encapsulate a condition test and generation
18 	/// of an AssertionException with a tailored message. They
19 	/// are used by the Assert class as helper objects.
20 	///
21 	/// User-defined asserters may be passed to the
22 	/// Assert.DoAssert method in order to implement
23 	/// extended asserts.
24 	/// </summary>
25 	[Obsolete("Use Constraints rather than Asserters for new work")]
26 	public abstract class AbstractAsserter : IAsserter
27 	{
28 		/// <summary>
29 		/// The user-defined message for this asserter.
30 		/// </summary>
31 		protected readonly string userMessage;
32 
33 		/// <summary>
34 		/// Arguments to use in formatting the user-defined message.
35 		/// </summary>
36 		protected readonly object[] args;
37 
38 		/// <summary>
39 		/// Our failure message object, initialized as needed
40 		/// </summary>
41 		private AssertionFailureMessage failureMessage;
42 
43 		/// <summary>
44 		/// Constructs an AbstractAsserter
45 		/// </summary>
46 		/// <param name="message">The message issued upon failure</param>
47 		/// <param name="args">Arguments to be used in formatting the message</param>
AbstractAsserter( string message, params object[] args )48 		public AbstractAsserter( string message, params object[] args )
49 		{
50 			this.userMessage = message;
51 			this.args = args;
52 		}
53 
54 		/// <summary>
55 		/// AssertionFailureMessage object used internally
56 		/// </summary>
57 		protected AssertionFailureMessage FailureMessage
58 		{
59 			get
60 			{
61 				if ( failureMessage == null )
62 					failureMessage = new AssertionFailureMessage( userMessage, args );
63 				return failureMessage;
64 			}
65 		}
66 
67 		#region IAsserter Interface
68 		/// <summary>
69 		/// Test method to be implemented by derived types.
70 		/// Default always succeeds.
71 		/// </summary>
72 		/// <returns>True if the test succeeds</returns>
Test()73 		public abstract bool Test();
74 
75 		/// <summary>
76 		/// Message related to a failure. If no failure has
77 		/// occured, the result is unspecified.
78 		/// </summary>
79 		public virtual string Message
80 		{
81 			get
82 			{
83 				return FailureMessage.ToString();
84 			}
85 		}
86 		#endregion
87 	}
88 }
89