using System; using System.Text; namespace NUnit.Framework { /// /// Class to assert that two objects are equal /// public class EqualAsserter : EqualityAsserter { /// /// Constructs an EqualAsserter for two objects /// /// The expected value /// The actual value /// The message to issue on failure /// Arguments to apply in formatting the message public EqualAsserter( object expected, object actual, string message, params object[] args ) : base( expected, actual, message, args ) { } /// /// Constructs an EqualAsserter for two doubles and a tolerance /// /// The expected value /// The actual value /// The tolerance used in making the comparison /// The message to issue on failure /// Arguments to apply in formatting the message public EqualAsserter( double expected, double actual, double tolerance, string message, params object[] args ) : base( expected, actual, tolerance, message, args ) { } /// /// Test whether the objects are equal, building up /// the failure message for later use if they are not. /// /// True if the objects are equal public override bool Test() { if ( expected == null && actual == null ) return true; if ( expected == null || actual == null ) { DisplayDifferences(); return false; } // For now, dynamically call array assertion if necessary. Try to move // this into the ObjectsEqual method later on. if ( expected.GetType().IsArray && actual.GetType().IsArray ) { Array expectedArray = expected as Array; Array actualArray = actual as Array; if ( expectedArray.Rank != actualArray.Rank ) { DisplayDifferences(); return false; } if ( expectedArray.Rank != 1 ) throw new ArgumentException( "Multi-dimension array comparison is not supported" ); int iLength = Math.Min( expectedArray.Length, actualArray.Length ); for( int i = 0; i < iLength; i++ ) if ( !ObjectsEqual( expectedArray.GetValue( i ), actualArray.GetValue( i ) ) ) { DisplayArrayDifferences( i ); return false; } if ( expectedArray.Length != actualArray.Length ) { DisplayArrayDifferences( iLength ); return false; } } else { if ( !ObjectsEqual( expected, actual ) ) { DisplayDifferences(); return false; } } return true; } private void DisplayDifferences() { FailureMessage.DisplayDifferences( expected, actual, false ); } private void DisplayArrayDifferences( int index ) { FailureMessage.DisplayArrayDifferences( (Array)expected, (Array)actual, index ); } } }