ValuesAttribute
Provides literal arguments for an individual parameter of a test.
using NUnit.Compatibility;
using NUnit.Framework.Interfaces;
using NUnit.Framework.Internal;
using System;
using System.Collections;
namespace NUnit.Framework
{
[AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)]
public class ValuesAttribute : NUnitAttribute, IParameterDataSource
{
protected object[] data;
public ValuesAttribute()
{
data = new object[0];
}
public ValuesAttribute(object arg1)
{
data = new object[1] {
arg1
};
}
public ValuesAttribute(object arg1, object arg2)
{
data = new object[2] {
arg1,
arg2
};
}
public ValuesAttribute(object arg1, object arg2, object arg3)
{
data = new object[3] {
arg1,
arg2,
arg3
};
}
public ValuesAttribute(params object[] args)
{
data = (args ?? new object[1]);
}
public IEnumerable GetData(IParameterInfo parameter)
{
if (data.Length == 0)
return GenerateData(parameter.ParameterType);
return ParamAttributeTypeConversions.ConvertData(data, parameter.ParameterType);
}
private static IEnumerable GenerateData(Type targetType)
{
if (IsNullableEnum(targetType)) {
Array values = Enum.GetValues(Nullable.GetUnderlyingType(targetType));
object[] array = new object[values.Length + 1];
Array.Copy(values, array, values.Length);
return array;
}
if (targetType.GetTypeInfo().IsEnum)
return Enum.GetValues(targetType);
if (targetType == typeof(bool?))
return new object[3] {
null,
true,
false
};
if (targetType == typeof(bool))
return new object[2] {
true,
false
};
return new object[0];
}
private static bool IsNullableEnum(Type t)
{
Type underlyingType = Nullable.GetUnderlyingType(t);
if (underlyingType != (Type)null)
return underlyingType.GetTypeInfo().IsEnum;
return false;
}
}
}