Warn
Provides static methods to express conditions
that must be met for the test to succeed. If
any test fails, a warning is issued.
using NUnit.Framework.Constraints;
using NUnit.Framework.Internal;
using System;
using System.ComponentModel;
namespace NUnit.Framework
{
public class Warn
{
[EditorBrowsable(EditorBrowsableState.Never)]
public new static bool Equals(object a, object b)
{
throw new InvalidOperationException("Warn.Equals should not be used for Assertions.");
}
[EditorBrowsable(EditorBrowsableState.Never)]
public new static void ReferenceEquals(object a, object b)
{
throw new InvalidOperationException("Warn.ReferenceEquals should not be used for Assertions.");
}
public static void Unless<TActual>(ActualValueDelegate<TActual> del, IResolveConstraint expr)
{
Unless(del, expr.Resolve(), null, null);
}
public static void Unless<TActual>(ActualValueDelegate<TActual> del, IResolveConstraint expr, string message, params object[] args)
{
CheckMultipleAssertLevel();
IConstraint constraint = expr.Resolve();
IncrementAssertCount();
ConstraintResult constraintResult = constraint.ApplyTo(del);
if (!constraintResult.IsSuccess)
IssueWarning(constraintResult, message, args);
}
private static void IssueWarning(ConstraintResult result, string message, object[] args)
{
MessageWriter messageWriter = new TextMessageWriter(message, args);
result.WriteMessageTo(messageWriter);
Assert.Warn(messageWriter.ToString());
}
public static void Unless<TActual>(ActualValueDelegate<TActual> del, IResolveConstraint expr, Func<string> getExceptionMessage)
{
CheckMultipleAssertLevel();
IConstraint constraint = expr.Resolve();
IncrementAssertCount();
ConstraintResult constraintResult = constraint.ApplyTo(del);
if (!constraintResult.IsSuccess)
IssueWarning(constraintResult, getExceptionMessage(), null);
}
public static void Unless(bool condition, string message, params object[] args)
{
Unless(condition, Is.True, message, args);
}
public static void Unless(bool condition)
{
Unless(condition, Is.True, null, null);
}
public static void Unless(bool condition, Func<string> getExceptionMessage)
{
Unless(condition, Is.True, getExceptionMessage);
}
public static void Unless(Func<bool> condition, string message, params object[] args)
{
Unless(condition(), Is.True, message, args);
}
public static void Unless(Func<bool> condition)
{
Unless(condition(), Is.True, null, null);
}
public static void Unless(Func<bool> condition, Func<string> getExceptionMessage)
{
Unless(condition(), Is.True, getExceptionMessage);
}
public static void Unless(TestDelegate code, IResolveConstraint constraint)
{
Unless((object)code, constraint);
}
public static void Unless<TActual>(TActual actual, IResolveConstraint expression)
{
Unless(actual, expression, null, null);
}
public static void Unless<TActual>(TActual actual, IResolveConstraint expression, string message, params object[] args)
{
CheckMultipleAssertLevel();
IConstraint constraint = expression.Resolve();
IncrementAssertCount();
ConstraintResult constraintResult = constraint.ApplyTo(actual);
if (!constraintResult.IsSuccess)
IssueWarning(constraintResult, message, args);
}
public static void Unless<TActual>(TActual actual, IResolveConstraint expression, Func<string> getExceptionMessage)
{
CheckMultipleAssertLevel();
IConstraint constraint = expression.Resolve();
IncrementAssertCount();
ConstraintResult constraintResult = constraint.ApplyTo(actual);
if (!constraintResult.IsSuccess)
IssueWarning(constraintResult, getExceptionMessage(), null);
}
public static void If<TActual>(ActualValueDelegate<TActual> del, IResolveConstraint expr)
{
If(del, expr.Resolve(), null, null);
}
public static void If<TActual>(ActualValueDelegate<TActual> del, IResolveConstraint expr, string message, params object[] args)
{
CheckMultipleAssertLevel();
NotConstraint notConstraint = new NotConstraint(expr.Resolve());
IncrementAssertCount();
ConstraintResult constraintResult = notConstraint.ApplyTo(del);
if (!constraintResult.IsSuccess)
IssueWarning(constraintResult, message, args);
}
public static void If<TActual>(ActualValueDelegate<TActual> del, IResolveConstraint expr, Func<string> getExceptionMessage)
{
CheckMultipleAssertLevel();
NotConstraint notConstraint = new NotConstraint(expr.Resolve());
IncrementAssertCount();
ConstraintResult constraintResult = notConstraint.ApplyTo(del);
if (!constraintResult.IsSuccess)
IssueWarning(constraintResult, getExceptionMessage(), null);
}
public static void If(bool condition, string message, params object[] args)
{
If(condition, Is.True, message, args);
}
public static void If(bool condition)
{
If(condition, Is.True, null, null);
}
public static void If(bool condition, Func<string> getExceptionMessage)
{
If(condition, Is.True, getExceptionMessage);
}
public static void If(Func<bool> condition, string message, params object[] args)
{
If(condition(), Is.True, message, args);
}
public static void If(Func<bool> condition)
{
If(condition(), Is.True, null, null);
}
public static void If(Func<bool> condition, Func<string> getExceptionMessage)
{
If(condition(), Is.True, getExceptionMessage);
}
public static void If<TActual>(TActual actual, IResolveConstraint expression)
{
If(actual, expression, null, null);
}
public static void If<TActual>(TActual actual, IResolveConstraint expression, string message, params object[] args)
{
CheckMultipleAssertLevel();
NotConstraint notConstraint = new NotConstraint(expression.Resolve());
IncrementAssertCount();
ConstraintResult constraintResult = notConstraint.ApplyTo(actual);
if (!constraintResult.IsSuccess)
IssueWarning(constraintResult, message, args);
}
public static void If<TActual>(TActual actual, IResolveConstraint expression, Func<string> getExceptionMessage)
{
CheckMultipleAssertLevel();
NotConstraint notConstraint = new NotConstraint(expression.Resolve());
IncrementAssertCount();
ConstraintResult constraintResult = notConstraint.ApplyTo(actual);
if (!constraintResult.IsSuccess)
IssueWarning(constraintResult, getExceptionMessage(), null);
}
private static void CheckMultipleAssertLevel()
{
if (TestExecutionContext.CurrentContext.MultipleAssertLevel > 0)
throw new Exception("Warn.If may not be used in a multiple assertion block.");
}
private static void IncrementAssertCount()
{
TestExecutionContext.CurrentContext.IncrementAssertCount();
}
}
}