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;
using System.Diagnostics.CodeAnalysis;
using System.Runtime.CompilerServices;
namespace NUnit.Framework.Constraints
{
[NullableContext(1)]
[Nullable(0)]
public class SomeItemsConstraint : PrefixConstraint
{
[Nullable(2)]
private readonly EqualConstraint _equalConstraint;
public override string DisplayName => "Some";
public SomeItemsConstraint(IConstraint itemConstraint)
: base(itemConstraint, "some item")
{
_equalConstraint = (itemConstraint as EqualConstraint);
}
public override ConstraintResult ApplyTo<[Nullable(2)] TActual>(TActual actual)
{
IEnumerable enumerable = ConstraintUtils.RequireActual<IEnumerable>(actual, "actual", false);
foreach (object item in enumerable) {
if (base.BaseConstraint.ApplyTo(item).IsSuccess)
return new ConstraintResult(this, actual, ConstraintStatus.Success);
}
return new ConstraintResult(this, actual, ConstraintStatus.Failure);
}
public SomeItemsConstraint Using<[Nullable(2)] TActualCollectionElement, [Nullable(2)] TExpected>(Func<TActualCollectionElement, TExpected, bool> comparison)
{
CheckPrecondition("comparison");
_equalConstraint.Using(comparison);
return this;
}
public SomeItemsConstraint Using(IComparer comparer)
{
CheckPrecondition("comparer");
_equalConstraint.Using(comparer);
return this;
}
public SomeItemsConstraint Using<[Nullable(2)] T>(IComparer<T> comparer)
{
CheckPrecondition("comparer");
_equalConstraint.Using(comparer);
return this;
}
public SomeItemsConstraint Using<[Nullable(2)] 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<[Nullable(2)] T>(IEqualityComparer<T> comparer)
{
CheckPrecondition("comparer");
_equalConstraint.Using(comparer);
return this;
}
public SomeItemsConstraint UsingPropertiesComparer()
{
CheckPrecondition("UsingPropertiesComparer");
_equalConstraint.UsingPropertiesComparer();
return this;
}
[MemberNotNull("_equalConstraint")]
private void CheckPrecondition(string argument)
{
if (_equalConstraint == null) {
string message = "Using may only be used with constraints that check the equality of the items";
throw new ArgumentException(message, argument);
}
}
}
}