public void ApplyAsyncSequenceOfReferenceTypeTaskReturnValuesArrangement() { // Given var value1 = new object(); var value2 = new object(); var value3 = new object(); var signature = typeof(IFooGenericTaskReferenceTypeParameterless) .GetMethod(nameof(IFooGenericTaskReferenceTypeParameterless.MethodWithoutParameterAsync)) ?? throw new InvalidOperationException(); var asyncFeature = new AsyncGenericTaskInvocation <object?>(); var invocation = new Invocation(signature, asyncFeature); var arrangment = new ReturnValueSequenceArrangement <Task <object?> >(signature, new List <Task <object?> >(new[] { Task.FromResult <object?>(value1), Task.FromResult <object?>(value2), Task.FromResult <object?>(value3) })); // When var feature = invocation.GetFeature <IAsyncInvocation <Task <object?> > >(); arrangment.ApplyTo(invocation); var first = feature.AsyncReturnValue; arrangment.ApplyTo(invocation); var second = feature.AsyncReturnValue; arrangment.ApplyTo(invocation); var third = feature.AsyncReturnValue; arrangment.ApplyTo(invocation); var fourth = feature.AsyncReturnValue; // Then Assert.NotNull(first); Assert.IsAssignableFrom <Task <object?> >(first); Assert.Equal(value1, first.Result); Assert.NotNull(second); Assert.IsAssignableFrom <Task <object?> >(second); Assert.Equal(value2, second.Result); Assert.NotNull(third); Assert.IsAssignableFrom <Task <object?> >(third); Assert.Equal(value3, third.Result); Assert.NotNull(fourth); Assert.IsAssignableFrom <Task <object?> >(fourth); Assert.Equal(value3, fourth.Result); }
public void ApplyAsyncSequenceOfValueTypeReturnValuesArrangement() { // Given var signature = typeof(IFooGenericTaskValueTypeParameterless) .GetMethod(nameof(IFooGenericTaskValueTypeParameterless.MethodWithoutParameterAsync)) ?? throw new InvalidOperationException(); var asyncFeature = new AsyncGenericTaskInvocation <int>(); var invocation = new Invocation(signature, asyncFeature); var arrangment = new ReturnValueSequenceArrangement <int>(signature, new List <int>(new[] { 13, 42, 65 })); // When var feature = invocation.GetFeature <IAsyncInvocation <Task <int> > >(); arrangment.ApplyTo(invocation); var first = feature.AsyncReturnValue; arrangment.ApplyTo(invocation); var second = feature.AsyncReturnValue; arrangment.ApplyTo(invocation); var third = feature.AsyncReturnValue; arrangment.ApplyTo(invocation); var fourth = feature.AsyncReturnValue; // Then Assert.NotNull(first); Assert.IsAssignableFrom <Task <int> >(first); Assert.Equal(13, first.Result); Assert.NotNull(second); Assert.IsAssignableFrom <Task <int> >(second); Assert.Equal(42, second.Result); Assert.NotNull(third); Assert.IsAssignableFrom <Task <int> >(third); Assert.Equal(65, third.Result); Assert.NotNull(fourth); Assert.IsAssignableFrom <Task <int> >(fourth); Assert.Equal(65, fourth.Result); }
public void ApplyAsyncValueTypeTaskReturnValueArrangement() { // Given var signature = typeof(IFooGenericTaskValueTypeParameterless) .GetMethod(nameof(IFooGenericTaskValueTypeParameterless.MethodWithoutParameterAsync)) ?? throw new InvalidOperationException(); var asyncFeature = new AsyncGenericTaskInvocation <int>(); var invocation = new Invocation(signature, asyncFeature); var arrangment = new ReturnValueArrangement <Task <int> >(signature, Task.FromResult(42)); // When arrangment.ApplyTo(invocation); // Then Assert.True(invocation.HasFeature <IAsyncInvocation <Task <int> > >()); var feature = invocation.GetFeature <IAsyncInvocation <Task <int> > >(); Assert.IsAssignableFrom <Task <int> >(feature.AsyncReturnValue); Assert.True(invocation.HasFeature <IReturnValue <int> >()); var returnValueFeature = invocation.GetFeature <IReturnValue <int> >(); Assert.Equal(42, returnValueFeature.ReturnValue); }