/// <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);
        }
Example #3
0
 /// <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>());
 }