AndConstraint
AndConstraint succeeds only if both members succeed.
using System.Runtime.CompilerServices;
namespace NUnit.Framework.Constraints
{
[System.Runtime.CompilerServices.NullableContext(1)]
[System.Runtime.CompilerServices.Nullable(0)]
public class AndConstraint : BinaryConstraint
{
[System.Runtime.CompilerServices.Nullable(0)]
private class AndConstraintResult : ConstraintResult
{
private readonly ConstraintResult _leftResult;
private readonly ConstraintResult _rightResult;
public AndConstraintResult(AndConstraint constraint, [System.Runtime.CompilerServices.Nullable(2)] object actual, ConstraintResult leftResult, ConstraintResult rightResult)
: base(constraint, actual, leftResult.IsSuccess && rightResult.IsSuccess)
{
_leftResult = leftResult;
_rightResult = rightResult;
}
public override void WriteActualValueTo(MessageWriter writer)
{
if (IsSuccess)
base.WriteActualValueTo(writer);
else if (!_leftResult.IsSuccess) {
_leftResult.WriteActualValueTo(writer);
} else {
_rightResult.WriteActualValueTo(writer);
}
}
public override void WriteAdditionalLinesTo(MessageWriter writer)
{
if (IsSuccess)
base.WriteAdditionalLinesTo(writer);
else if (!_leftResult.IsSuccess) {
_leftResult.WriteAdditionalLinesTo(writer);
} else {
_rightResult.WriteAdditionalLinesTo(writer);
}
}
}
public override string Description => Left.Description + " and " + Right.Description;
public AndConstraint(IConstraint left, IConstraint right)
: base(left, right)
{
}
public override ConstraintResult ApplyTo<[System.Runtime.CompilerServices.Nullable(2)] TActual>(TActual actual)
{
ConstraintResult constraintResult = Left.ApplyTo(actual);
ConstraintResult rightResult = constraintResult.IsSuccess ? Right.ApplyTo(actual) : new ConstraintResult(Right, actual);
return new AndConstraintResult(this, actual, constraintResult, rightResult);
}
}
}