/// <inheritdoc cref="IArrangement" /> public bool CanApplyTo(IInvocation invocation) { Ensures.NotNull(invocation, nameof(invocation)); if (invocation.HasFeature <IReturnValue <T> >()) { return(invocation.Signature == Signature); } return(false); }
/// <inheritdoc cref="IArrangement" /> public bool TryApplyTo(IInvocation invocation) { Ensures.NotNull(invocation, nameof(invocation)); if (invocation.Signature == Signature) { if (invocation.HasFeature <IAsyncInvocation>()) { if (invocation.TryGetFeature <IAsyncInvocation <T> >(out var asyncFeature)) { asyncFeature.AsyncReturnValue = GetNextReturnValue(); return(true); } else if (invocation.TryGetFeature <IAsyncInvocation <Task <T> > >(out var asyncTaskFeature)) { var returnValue = GetNextReturnValue(); asyncTaskFeature.AsyncReturnValue = Task.FromResult(returnValue); return(true); } else if (invocation.TryGetFeature <IAsyncInvocation <ValueTask <T> > >(out var asyncValueTaskFeature)) { var returnValue = GetNextReturnValue(); asyncValueTaskFeature.AsyncReturnValue = new ValueTask <T>(returnValue); return(true); } else if (invocation.TryGetFeature <IAsyncInvocation <IAsyncEnumerable <T> > >(out var asyncEnumerableFeature)) { var returnValue = GetNextReturnValue(); asyncEnumerableFeature.AsyncReturnValue = AsyncEnumerable.Create(_ => AsyncEnumerator.Create( () => new ValueTask <bool>(true), () => returnValue, () => default)); return(true); } } else if (invocation.TryGetFeature <IReturnValue <T> >(out var returnValueFeature)) { returnValueFeature.ReturnValue = GetNextReturnValue(); return(true); } } return(false); }
/// <summary> /// Validates that the invocation has no out parameters. /// </summary> /// <param name="invocation"> The extended <see cref="IInvocation"/> instance. </param> public static void ShouldHaveNoParameterOut(this IInvocation invocation) { Assert.False(invocation.HasFeature <IParameterOut>()); }