Assume
Provides static methods to express the assumptions
that must be met for a test to give a meaningful
result. If an assumption is not met, the test
should produce an inconclusive result.
using NUnit.Framework.Constraints;
using NUnit.Framework.Internal;
using System;
using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
using System.Runtime.CompilerServices;
namespace NUnit.Framework
{
[System.Runtime.CompilerServices.NullableContext(1)]
[System.Runtime.CompilerServices.Nullable(0)]
public abstract class Assume
{
[EditorBrowsable(EditorBrowsableState.Never)]
public new static bool Equals(object a, object b)
{
throw new InvalidOperationException("Assume.Equals should not be used. Use Assume.That instead.");
}
public new static void ReferenceEquals(object a, object b)
{
throw new InvalidOperationException("Assume.ReferenceEquals should not be used. Use Assume.That instead.");
}
public static void That<[System.Runtime.CompilerServices.Nullable(2)] TActual>(ActualValueDelegate<TActual> del, IResolveConstraint expr, NUnitString message = default(NUnitString), [CallerArgumentExpression("del")] string actualExpression = "", [CallerArgumentExpression("expr")] string constraintExpression = "")
{
CheckMultipleAssertLevel();
IConstraint constraint = expr.Resolve();
ConstraintResult constraintResult = constraint.ApplyTo(del);
if (!constraintResult.IsSuccess)
ReportInconclusive(constraintResult, message.ToString(), actualExpression, constraintExpression);
}
public static void That<[System.Runtime.CompilerServices.Nullable(2)] TActual>(ActualValueDelegate<TActual> del, IResolveConstraint expr, FormattableString message, [CallerArgumentExpression("del")] string actualExpression = "", [CallerArgumentExpression("expr")] string constraintExpression = "")
{
CheckMultipleAssertLevel();
IConstraint constraint = expr.Resolve();
ConstraintResult constraintResult = constraint.ApplyTo(del);
if (!constraintResult.IsSuccess)
ReportInconclusive(constraintResult, message.ToString(), actualExpression, constraintExpression);
}
public static void That<[System.Runtime.CompilerServices.Nullable(2)] TActual>(ActualValueDelegate<TActual> del, IResolveConstraint expr, Func<string> getExceptionMessage, [CallerArgumentExpression("del")] string actualExpression = "", [CallerArgumentExpression("expr")] string constraintExpression = "")
{
CheckMultipleAssertLevel();
IConstraint constraint = expr.Resolve();
ConstraintResult constraintResult = constraint.ApplyTo(del);
if (!constraintResult.IsSuccess)
ReportInconclusive(constraintResult, getExceptionMessage(), actualExpression, constraintExpression);
}
public static void That([DoesNotReturnIf(false)] bool condition, NUnitString message = default(NUnitString), [CallerArgumentExpression("condition")] string actualExpression = "")
{
That(condition, Is.True, message, actualExpression, "Is.True");
}
public static void That([DoesNotReturnIf(false)] bool condition, FormattableString message, [CallerArgumentExpression("condition")] string actualExpression = "")
{
That(condition, Is.True, message, actualExpression, "Is.True");
}
public static void That([DoesNotReturnIf(false)] bool condition, Func<string> getExceptionMessage, [CallerArgumentExpression("condition")] string actualExpression = "")
{
That(condition, Is.True, getExceptionMessage, actualExpression, "Is.True");
}
public static void That(Func<bool> condition, NUnitString message = default(NUnitString), [CallerArgumentExpression("condition")] string actualExpression = "")
{
That(condition(), Is.True, message, actualExpression, "Is.True");
}
public static void That(Func<bool> condition, FormattableString message, [CallerArgumentExpression("condition")] string actualExpression = "")
{
That(condition(), Is.True, message, actualExpression, "Is.True");
}
public static void That(Func<bool> condition, Func<string> getExceptionMessage, [CallerArgumentExpression("condition")] string actualExpression = "")
{
That(condition(), Is.True, getExceptionMessage, actualExpression, "Is.True");
}
public static void That<[System.Runtime.CompilerServices.Nullable(2)] TActual>(TActual actual, IResolveConstraint expression, NUnitString message = default(NUnitString), [CallerArgumentExpression("actual")] string actualExpression = "", [CallerArgumentExpression("expression")] string constraintExpression = "")
{
CheckMultipleAssertLevel();
IConstraint constraint = expression.Resolve();
ConstraintResult constraintResult = constraint.ApplyTo(actual);
if (!constraintResult.IsSuccess)
ReportInconclusive(constraintResult, message.ToString(), actualExpression, constraintExpression);
}
public static void That<[System.Runtime.CompilerServices.Nullable(2)] TActual>(TActual actual, IResolveConstraint expression, FormattableString message, [CallerArgumentExpression("actual")] string actualExpression = "", [CallerArgumentExpression("expression")] string constraintExpression = "")
{
CheckMultipleAssertLevel();
IConstraint constraint = expression.Resolve();
ConstraintResult constraintResult = constraint.ApplyTo(actual);
if (!constraintResult.IsSuccess)
ReportInconclusive(constraintResult, message.ToString(), actualExpression, constraintExpression);
}
public static void That<[System.Runtime.CompilerServices.Nullable(2)] TActual>(TActual actual, IResolveConstraint expression, Func<string> getExceptionMessage, [CallerArgumentExpression("actual")] string actualExpression = "", [CallerArgumentExpression("expression")] string constraintExpression = "")
{
CheckMultipleAssertLevel();
IConstraint constraint = expression.Resolve();
ConstraintResult constraintResult = constraint.ApplyTo(actual);
if (!constraintResult.IsSuccess)
ReportInconclusive(constraintResult, getExceptionMessage(), actualExpression, constraintExpression);
}
private static void CheckMultipleAssertLevel()
{
if (TestExecutionContext.CurrentContext.MultipleAssertLevel > 0)
throw new Exception("Assume.That may not be used in a multiple assertion block.");
}
private static void ReportInconclusive(ConstraintResult result, string message, string actualExpression, string constraintExpression)
{
MessageWriter messageWriter = new TextMessageWriter(Assert.ExtendedMessage("Assume.That", message, actualExpression, constraintExpression), Array.Empty<object>());
result.WriteMessageTo(messageWriter);
throw new InconclusiveException(messageWriter.ToString());
}
}
}