// ****************************************************************
// 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
{
///
/// Abstract base class for constraints that compare values to
/// determine if one is greater than, equal to or less than
/// the other.
///
public abstract class ComparisonConstraint : Constraint
{
///
/// The value against which a comparison is to be made
///
protected IComparable expected;
///
/// If true, less than returns success
///
protected bool ltOK = false;
///
/// if true, equal returns success
///
protected bool eqOK = false;
///
/// if true, greater than returns success
///
protected bool gtOK = false;
///
/// The predicate used as a part of the description
///
private string predicate;
///
/// Initializes a new instance of the class.
///
/// The value against which to make a comparison.
/// if set to true less succeeds.
/// if set to true equal succeeds.
/// if set to true greater succeeds.
/// String used in describing the constraint.
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;
}
///
/// Test whether the constraint is satisfied by a given value
///
/// The value to be tested
/// True for success, false for failure
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;
}
///
/// Write the constraint description to a MessageWriter
///
/// The writer on which the description is displayed
public override void WriteDescriptionTo(MessageWriter writer)
{
writer.WritePredicate(predicate);
writer.WriteExpectedValue(expected);
}
}
///
/// Tests whether a value is greater than the value supplied to its constructor
///
public class GreaterThanConstraint : ComparisonConstraint
{
///
/// Initializes a new instance of the class.
///
/// The expected value.
public GreaterThanConstraint(IComparable expected) : base(expected, false, false, true, "greater than") { }
}
///
/// Tests whether a value is greater than or equal to the value supplied to its constructor
///
public class GreaterThanOrEqualConstraint : ComparisonConstraint
{
///
/// Initializes a new instance of the class.
///
/// The expected value.
public GreaterThanOrEqualConstraint(IComparable expected) : base(expected, false, true, true, "greater than or equal to") { }
}
///
/// Tests whether a value is less than the value supplied to its constructor
///
public class LessThanConstraint : ComparisonConstraint
{
///
/// Initializes a new instance of the class.
///
/// The expected value.
public LessThanConstraint(IComparable expected) : base(expected, true, false, false, "less than") { }
}
///
/// Tests whether a value is less than or equal to the value supplied to its constructor
///
public class LessThanOrEqualConstraint : ComparisonConstraint
{
///
/// Initializes a new instance of the class.
///
/// The expected value.
public LessThanOrEqualConstraint(IComparable expected) : base(expected, true, true, false, "less than or equal to") { }
}
}