Jo Shields a575963da9 Imported Upstream version 3.6.0
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
2014-08-13 10:39:27 +01:00

128 lines
5.1 KiB
C#

// ****************************************************************
// Copyright 2007, Charlie Poole
// This is free software licensed under the NUnit license. You may
// obtain a copy of the license at http://nunit.org/?p=license&r=2.4
// ****************************************************************
using System;
namespace NUnit.Framework.Constraints
{
/// <summary>
/// Abstract base class for constraints that compare values to
/// determine if one is greater than, equal to or less than
/// the other.
/// </summary>
public abstract class ComparisonConstraint : Constraint
{
/// <summary>
/// The value against which a comparison is to be made
/// </summary>
protected IComparable expected;
/// <summary>
/// If true, less than returns success
/// </summary>
protected bool ltOK = false;
/// <summary>
/// if true, equal returns success
/// </summary>
protected bool eqOK = false;
/// <summary>
/// if true, greater than returns success
/// </summary>
protected bool gtOK = false;
/// <summary>
/// The predicate used as a part of the description
/// </summary>
private string predicate;
/// <summary>
/// Initializes a new instance of the <see cref="T:ComparisonConstraint"/> class.
/// </summary>
/// <param name="value">The value against which to make a comparison.</param>
/// <param name="ltOK">if set to <c>true</c> less succeeds.</param>
/// <param name="eqOK">if set to <c>true</c> equal succeeds.</param>
/// <param name="gtOK">if set to <c>true</c> greater succeeds.</param>
/// <param name="predicate">String used in describing the constraint.</param>
public ComparisonConstraint(IComparable value, bool ltOK, bool eqOK, bool gtOK, string predicate)
{
this.expected = value;
this.ltOK = ltOK;
this.eqOK = eqOK;
this.gtOK = gtOK;
this.predicate = predicate;
}
/// <summary>
/// Test whether the constraint is satisfied by a given value
/// </summary>
/// <param name="actual">The value to be tested</param>
/// <returns>True for success, false for failure</returns>
public override bool Matches(object actual)
{
this.actual = actual;
int icomp = Numerics.Compare( expected, actual );
return icomp < 0 && gtOK || icomp == 0 && eqOK || icomp > 0 && ltOK;
}
/// <summary>
/// Write the constraint description to a MessageWriter
/// </summary>
/// <param name="writer">The writer on which the description is displayed</param>
public override void WriteDescriptionTo(MessageWriter writer)
{
writer.WritePredicate(predicate);
writer.WriteExpectedValue(expected);
}
}
/// <summary>
/// Tests whether a value is greater than the value supplied to its constructor
/// </summary>
public class GreaterThanConstraint : ComparisonConstraint
{
/// <summary>
/// Initializes a new instance of the <see cref="T:GreaterThanConstraint"/> class.
/// </summary>
/// <param name="expected">The expected value.</param>
public GreaterThanConstraint(IComparable expected) : base(expected, false, false, true, "greater than") { }
}
/// <summary>
/// Tests whether a value is greater than or equal to the value supplied to its constructor
/// </summary>
public class GreaterThanOrEqualConstraint : ComparisonConstraint
{
/// <summary>
/// Initializes a new instance of the <see cref="T:GreaterThanOrEqualConstraint"/> class.
/// </summary>
/// <param name="expected">The expected value.</param>
public GreaterThanOrEqualConstraint(IComparable expected) : base(expected, false, true, true, "greater than or equal to") { }
}
/// <summary>
/// Tests whether a value is less than the value supplied to its constructor
/// </summary>
public class LessThanConstraint : ComparisonConstraint
{
/// <summary>
/// Initializes a new instance of the <see cref="T:LessThanConstraint"/> class.
/// </summary>
/// <param name="expected">The expected value.</param>
public LessThanConstraint(IComparable expected) : base(expected, true, false, false, "less than") { }
}
/// <summary>
/// Tests whether a value is less than or equal to the value supplied to its constructor
/// </summary>
public class LessThanOrEqualConstraint : ComparisonConstraint
{
/// <summary>
/// Initializes a new instance of the <see cref="T:LessThanOrEqualConstraint"/> class.
/// </summary>
/// <param name="expected">The expected value.</param>
public LessThanOrEqualConstraint(IComparable expected) : base(expected, true, true, false, "less than or equal to") { }
}
}