ExactCountConstraint
ExactCountConstraint applies another constraint to each
item in a collection, succeeding only if a specified
number of items succeed.
using System;
using System.Collections;
namespace NUnit.Framework.Constraints
{
public class ExactCountConstraint : PrefixConstraint
{
private int expectedCount;
public ExactCountConstraint(int expectedCount, IConstraint itemConstraint)
: base(itemConstraint)
{
this.expectedCount = expectedCount;
object descriptionPrefix;
switch (expectedCount) {
default:
descriptionPrefix = $"""{expectedCount}""";
break;
case 1:
descriptionPrefix = "exactly one item";
break;
case 0:
descriptionPrefix = "no item";
break;
}
base.DescriptionPrefix = (string)descriptionPrefix;
}
public override ConstraintResult ApplyTo<TActual>(TActual actual)
{
if (!(((object)actual) is IEnumerable))
throw new ArgumentException("The actual value must be an IEnumerable", "actual");
int num = 0;
foreach (object item in (IEnumerable)(object)actual) {
if (base.BaseConstraint.ApplyTo(item).IsSuccess)
num++;
}
return new ConstraintResult(this, actual, num == expectedCount);
}
}
}