<PackageReference Include="NUnit" Version="4.2.1" />

IndexerConstraint

IndexerConstraint extracts a named property and uses its value as the actual value for a chained constraint.
using NUnit.Framework.Internal; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; namespace NUnit.Framework.Constraints { [System.Runtime.CompilerServices.NullableContext(1)] [System.Runtime.CompilerServices.Nullable(0)] public class IndexerConstraint : PrefixConstraint { private readonly Type[] _argumentTypes; private readonly object[] _arguments; public IndexerConstraint(IEnumerable<object> indexerArguments, IConstraint baseConstraint) : this(indexerArguments.ToArray(), baseConstraint) { } public IndexerConstraint(object[] indexerArguments, IConstraint baseConstraint) : base(baseConstraint, "Default indexer accepting arguments " + MsgUtils.FormatCollection(indexerArguments, 0, 10)) { _arguments = indexerArguments; _argumentTypes = (from a in _arguments select a.GetType()).ToArray(); } public override ConstraintResult ApplyTo<[System.Runtime.CompilerServices.Nullable(2)] TActual>(TActual actual) { Guard.ArgumentNotNull(actual, "actual"); Type type = (actual as Type) ?? actual.GetType(); object actual2; if (type.IsArray) actual2 = (actual as Array)?.GetValue(_arguments.Cast<int>().ToArray()); else { MethodInfo defaultIndexer = Reflect.GetDefaultIndexer(type, _argumentTypes); if ((object)defaultIndexer == null) { DefaultInterpolatedStringHandler defaultInterpolatedStringHandler = new DefaultInterpolatedStringHandler(19, 2); defaultInterpolatedStringHandler.AppendFormatted(base.DescriptionPrefix); defaultInterpolatedStringHandler.AppendLiteral(" was not found on "); defaultInterpolatedStringHandler.AppendFormatted(type); defaultInterpolatedStringHandler.AppendLiteral("."); throw new ArgumentException(defaultInterpolatedStringHandler.ToStringAndClear()); } MethodInfo method = defaultIndexer; actual2 = Reflect.InvokeMethod(method, actual, _arguments); } return base.BaseConstraint.ApplyTo(actual2); } protected override string GetStringRepresentation() { DefaultInterpolatedStringHandler defaultInterpolatedStringHandler = new DefaultInterpolatedStringHandler(11, 2); defaultInterpolatedStringHandler.AppendLiteral("<indexer "); defaultInterpolatedStringHandler.AppendFormatted(MsgUtils.FormatCollection(_arguments, 0, 10)); defaultInterpolatedStringHandler.AppendLiteral(" "); defaultInterpolatedStringHandler.AppendFormatted(base.BaseConstraint); defaultInterpolatedStringHandler.AppendLiteral(">"); return defaultInterpolatedStringHandler.ToStringAndClear(); } } }