SomeItemsConstraint
SomeItemsConstraint applies another constraint to each
item in a collection, succeeding if any of them succeeds.
using NUnit.Framework.Internal;
using System;
using System.Collections;
using System.Collections.Generic;
namespace NUnit.Framework.Constraints
{
public class SomeItemsConstraint : PrefixConstraint
{
private EqualConstraint _equalConstraint;
public override string DisplayName => "Some";
public SomeItemsConstraint(IConstraint itemConstraint)
: base(itemConstraint)
{
_equalConstraint = (itemConstraint as EqualConstraint);
base.DescriptionPrefix = "some item";
}
public override ConstraintResult ApplyTo<TActual>(TActual actual)
{
foreach (object item in ConstraintUtils.RequireActual<IEnumerable>(actual, "actual", false)) {
if (base.BaseConstraint.ApplyTo(item).IsSuccess)
return new ConstraintResult(this, actual, ConstraintStatus.Success);
}
return new ConstraintResult(this, actual, ConstraintStatus.Failure);
}
public SomeItemsConstraint Using<TCollectionType, TMemberType>(Func<TCollectionType, TMemberType, bool> comparison)
{
CheckPrecondition("comparison");
_equalConstraint.Using(comparison);
return this;
}
public SomeItemsConstraint Using(IComparer comparer)
{
CheckPrecondition("comparer");
_equalConstraint.Using(comparer);
return this;
}
public SomeItemsConstraint Using<T>(IComparer<T> comparer)
{
CheckPrecondition("comparer");
_equalConstraint.Using(comparer);
return this;
}
public SomeItemsConstraint Using<T>(Comparison<T> comparer)
{
CheckPrecondition("comparer");
_equalConstraint.Using(comparer);
return this;
}
public SomeItemsConstraint Using(IEqualityComparer comparer)
{
CheckPrecondition("comparer");
_equalConstraint.Using(comparer);
return this;
}
public SomeItemsConstraint Using<T>(IEqualityComparer<T> comparer)
{
CheckPrecondition("comparer");
_equalConstraint.Using(comparer);
return this;
}
private void CheckPrecondition(string argument)
{
if (_equalConstraint == null)
throw new ArgumentException("Using may only be used with constraints that check the equality of the items", argument);
}
}
}