mirror of
https://github.com/inthehand/32feet.git
synced 2026-10-19 23:29:51 +08:00
100 lines
2.9 KiB
C#
100 lines
2.9 KiB
C#
using System;
|
|
using System.Text;
|
|
|
|
namespace NUnit.Framework
|
|
{
|
|
/// <summary>
|
|
/// Class to assert that two objects are equal
|
|
/// </summary>
|
|
public class EqualAsserter : EqualityAsserter
|
|
{
|
|
/// <summary>
|
|
/// Constructs an EqualAsserter for two objects
|
|
/// </summary>
|
|
/// <param name="expected">The expected value</param>
|
|
/// <param name="actual">The actual value</param>
|
|
/// <param name="message">The message to issue on failure</param>
|
|
/// <param name="args">Arguments to apply in formatting the message</param>
|
|
public EqualAsserter( object expected, object actual, string message, params object[] args )
|
|
: base( expected, actual, message, args ) { }
|
|
|
|
/// <summary>
|
|
/// Constructs an EqualAsserter for two doubles and a tolerance
|
|
/// </summary>
|
|
/// <param name="expected">The expected value</param>
|
|
/// <param name="actual">The actual value</param>
|
|
/// <param name="tolerance">The tolerance used in making the comparison</param>
|
|
/// <param name="message">The message to issue on failure</param>
|
|
/// <param name="args">Arguments to apply in formatting the message</param>
|
|
public EqualAsserter( double expected, double actual, double tolerance, string message, params object[] args )
|
|
: base( expected, actual, tolerance, message, args ) { }
|
|
|
|
/// <summary>
|
|
/// Test whether the objects are equal, building up
|
|
/// the failure message for later use if they are not.
|
|
/// </summary>
|
|
/// <returns>True if the objects are equal</returns>
|
|
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 );
|
|
}
|
|
}
|
|
}
|