ExactCountConstraint
ExactCountConstraint applies another constraint to each
item in a collection, succeeding only if a specified
number of items succeed.
using NUnit.Framework.Internal;
using System;
using System.Collections;
namespace NUnit.Framework.Constraints
{
public class ExactCountConstraint : Constraint
{
private readonly int _expectedCount;
private readonly IConstraint _itemConstraint;
public override string Description {
get {
string text = (_expectedCount == 0) ? "no item" : ((_expectedCount == 1) ? "exactly one item" : $"""{_expectedCount}""");
if (_itemConstraint == null)
return text;
return PrefixConstraint.FormatDescription(text, _itemConstraint);
}
}
public ExactCountConstraint(int expectedCount)
: base(Array.Empty<object>())
{
_expectedCount = expectedCount;
}
public ExactCountConstraint(int expectedCount, IConstraint itemConstraint)
: base(itemConstraint)
{
Guard.ArgumentNotNull(itemConstraint, "itemConstraint");
_itemConstraint = itemConstraint.Resolve();
_expectedCount = expectedCount;
}
public override ConstraintResult ApplyTo<TActual>(TActual actual)
{
IEnumerable enumerable = ConstraintUtils.RequireActual<IEnumerable>(actual, "actual", false);
int num = 0;
if (_itemConstraint == null) {
foreach (object item in enumerable) {
object obj = item;
num++;
}
} else {
foreach (object item2 in enumerable) {
if (_itemConstraint.ApplyTo(item2).IsSuccess)
num++;
}
}
return new ConstraintResult(this, actual, num == _expectedCount);
}
}
}