// **************************************************************** // 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") { } } }