public void CreateNewArrangementCollection() { // Given var signature = typeof(IFooFuncValueTypeParameterless <int>) .GetMethod(nameof(IFooFuncValueTypeParameterless <int> .MethodWithoutParameter)) ?? throw new InvalidOperationException(); var arrangment = new ReturnValueArrangement <int>(signature, 42); // When var arrangmentCollection = new ArrangementCollection(arrangment); // Then Assert.Single(arrangmentCollection); Assert.Equal(1u, arrangmentCollection.Count); }
public void ApplyValueTypeReturnValueArrangement() { // Given var signature = typeof(IFooFuncValueTypeParameterless <int>) .GetMethod(nameof(IFooFuncValueTypeParameterless <int> .MethodWithoutParameter)) ?? throw new InvalidOperationException(); var returnValueFeature = new ReturnValueInvocation <int>(); var invocation = new Invocation(signature, returnValueFeature); var arrangment = new ReturnValueArrangement <int>(signature, 42); // When arrangment.ApplyTo(invocation); // Then Assert.True(invocation.HasFeature <IReturnValue <int> >()); var feature = invocation.GetFeature <IReturnValue <int> >(); Assert.Equal(42, feature.ReturnValue); }
public void EnsureNoArrangentIsAppliedToNonMatchingInvocation() { // Given var valueTypeSignature = typeof(IFooFuncValueTypeParameterless <int>) .GetMethod(nameof(IFooFuncValueTypeParameterless <int> .MethodWithoutParameter)) ?? throw new InvalidOperationException(); var referenceTypeSignature = typeof(IFooFuncReferenceTypeParameterless <object>) .GetMethod(nameof(IFooFuncReferenceTypeParameterless <object> .MethodWithoutParameter)) ?? throw new InvalidOperationException(); var returnValueFeature = new ReturnValueInvocation <int>(); var invocation = new Invocation(referenceTypeSignature, returnValueFeature); var arrangment = new ReturnValueArrangement <int>(valueTypeSignature, 42); // When arrangment.ApplyTo(invocation); // Then Assert.True(invocation.HasFeature <IReturnValue <int> >()); var feature = invocation.GetFeature <IReturnValue <int> >(); Assert.Equal(default, feature.ReturnValue);
public void CheckIfAMatchingArrangmentExists() { // Given var signature = typeof(IFooFuncValueTypeParameterless <int>) .GetMethod(nameof(IFooFuncValueTypeParameterless <int> .MethodWithoutParameter)) ?? throw new InvalidOperationException(); var otherSignature = typeof(IFooFuncValueTypeParameterIn <int>) .GetMethod(nameof(IFooFuncValueTypeParameterIn <int> .MethodWithOneParameter)) ?? throw new InvalidOperationException(); var returnValueFeature = new ReturnValueInvocation <int>(); var invocation = new Invocation(signature, returnValueFeature); var arrangment = new ReturnValueArrangement <int>(signature, 42); var otherArrangment = new ReturnValueArrangement <int>(otherSignature, 13); var arrangmentCollection = new ArrangementCollection(arrangment, otherArrangment); // When var hasMatchingArrangment = arrangmentCollection.CanApplyAtLeasOneArrangmentTo(invocation); // Then Assert.True(hasMatchingArrangment); }
public void ApplyValueTypeGetterReturnValueArrangement() { // Given var signature = typeof(IFooValueTypeGetter <int>) .GetProperty(nameof(IFooValueTypeGetter <int> .Getter)) ?? throw new InvalidOperationException(); var getter = signature.GetGetMethod() ?? throw new InvalidOperationException(); var propertyFeature = new PropertyInvocation(signature); var returnValueFeature = new ReturnValueInvocation <int>(); var invocation = new Invocation(getter, propertyFeature, returnValueFeature); var arrangment = new ReturnValueArrangement <int>(getter, 42); // When arrangment.ApplyTo(invocation); // Then Assert.True(invocation.HasFeature <IReturnValue <int> >()); var feature = invocation.GetFeature <IReturnValue <int> >(); Assert.Equal(42, feature.ReturnValue); }
public void SuccessfullInvocationWithArrangement() { // Given var type = typeof(object); var methodName = nameof(object.GetHashCode); var signature = type.GetMethod(methodName) ?? throw new MethodInfoException(type, methodName); var methodInvocation = new Invocation(signature, new ReturnValueInvocation <int>()); var arrangement = new ReturnValueArrangement <int>(signature, 42); var arrangements = new ArrangementCollection(new IArrangement[] { arrangement }); var interceptor = new PartialMockInterceptor(arrangements); // When var wasIntercepted = interceptor.Intercept(methodInvocation); // Then Assert.True(wasIntercepted); var hasFeature = methodInvocation.TryGetFeature <IReturnValue <int> >(out var feature); Assert.True(hasFeature); Assert.Equal(42, feature?.ReturnValue); }
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); }
public void TryToApplyOnlyMatchingArrangements() { // Given var signature = typeof(IFooFuncValueTypeParameterless <int>) .GetMethod(nameof(IFooFuncValueTypeParameterless <int> .MethodWithoutParameter)) ?? throw new InvalidOperationException(); var otherSignature = typeof(IFooFuncValueTypeParameterIn <int>) .GetMethod(nameof(IFooFuncValueTypeParameterIn <int> .MethodWithOneParameter)) ?? throw new InvalidOperationException(); var returnValueFeature = new ReturnValueInvocation <int>(); var invocation = new Invocation(signature, returnValueFeature); var arrangment = new ReturnValueArrangement <int>(signature, 42); var otherArrangment = new ReturnValueArrangement <int>(otherSignature, 13); var arrangmentCollection = new ArrangementCollection(arrangment, otherArrangment); // When var hasAppliedArrangment = arrangmentCollection.TryApplyTo(invocation); // Then Assert.True(hasAppliedArrangment); Assert.True(invocation.HasFeature <IReturnValue <int> >()); var feature = invocation.GetFeature <IReturnValue <int> >(); Assert.Equal(42, feature.ReturnValue); }