// **************************************************************** // 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 { // TODO Needs tests /// /// ContainsConstraint tests a whether a string contains a substring /// or a collection contains an object. It postpones the decision of /// which test to use until the type of the actual argument is known. /// This allows testing whether a string is contained in a collection /// or as a substring of another string using the same syntax. /// public class ContainsConstraint : Constraint { object expected; Constraint realConstraint; private Constraint RealConstraint { get { if ( realConstraint == null ) { if ( actual is string ) this.realConstraint = new SubstringConstraint( (string)expected ); else this.realConstraint = new CollectionContainsConstraint( expected ); } return realConstraint; } set { realConstraint = value; } } /// /// Initializes a new instance of the class. /// /// The expected. public ContainsConstraint( object expected ) { this.expected = expected; } /// /// 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; if ( this.caseInsensitive ) this.RealConstraint = RealConstraint.IgnoreCase; return this.RealConstraint.Matches( actual ); } /// /// Write the constraint description to a MessageWriter /// /// The writer on which the description is displayed public override void WriteDescriptionTo(MessageWriter writer) { this.RealConstraint.WriteDescriptionTo(writer); } } }