public void ThrowingFromInterceptedMethodStillRunsAllHandlers() { MethodInfo thrower = typeof(ClassWithDefaultCtor).GetMethod("NotImplemented"); ClassWithDefaultCtor instance = WireupHelper.GetInterceptingInstance <ClassWithDefaultCtor>(); IInterceptingProxy pm = (IInterceptingProxy)instance; CallCountHandler handler = new CallCountHandler(); PostCallCountHandler postHandler = new PostCallCountHandler(); HandlerPipeline pipeline = new HandlerPipeline(new ICallHandler[] { postHandler, handler }); PipelineManager manager = new PipelineManager(); manager.SetPipeline(thrower, pipeline); pm.AddInterceptionBehavior(new PolicyInjectionBehavior(manager)); try { instance.NotImplemented(); Assert.Fail("Should have thrown before getting here"); } catch (NotImplementedException) { // We're expecting this one } Assert.AreEqual(1, handler.CallCount); Assert.AreEqual(1, postHandler.CallsCompleted); }
public void AttemptingToInterceptInvalidClassThrows() { PostCallCountHandler handler = new PostCallCountHandler(); VirtualMethodInterceptor interceptor = new VirtualMethodInterceptor(); interceptor.CreateProxyType(typeof(CantTouchThis)); }
public void CanInterceptMethodWithGenericReturnTypeForValueTypeGenericParameter() { PostCallCountHandler handler = new PostCallCountHandler(); ClassWithDefaultCtor instance = WireupHelper.GetInterceptedInstance <ClassWithDefaultCtor>("MethodWithGenericReturnType", handler); int value = instance.MethodWithGenericReturnType(5); Assert.AreEqual(5, value); Assert.AreEqual(1, handler.CallsCompleted); }
public void CanInterceptNestedClass() { PostCallCountHandler handler = new PostCallCountHandler(); NestedClass instance = WireupHelper.GetInterceptedInstance <NestedClass>("MakeAValue", handler); int result = instance.MakeAValue(12); Assert.AreEqual(12 * 37 + 12 / 2, result); Assert.AreEqual(1, handler.CallsCompleted); }
public void CanInterceptMethodsWithParameters() { PostCallCountHandler handler = new PostCallCountHandler(); ClassWithDefaultCtor instance = WireupHelper.GetInterceptedInstance <ClassWithDefaultCtor>("AddUp", handler); string result = instance.AddUp(5, 12); Assert.AreEqual("17", result); Assert.AreEqual(1, handler.CallsCompleted); }
public void CanInterceptMethodsThatReturnReferenceTypes() { PostCallCountHandler handler = new PostCallCountHandler(); ClassWithDefaultCtor instance = WireupHelper.GetInterceptedInstance <ClassWithDefaultCtor>("GimmeName", handler); string result = instance.GimmeName(); Assert.AreEqual("name", result); Assert.AreEqual(1, handler.CallsCompleted); }
public void CanInterceptMethodsThatHaveReturnValues() { PostCallCountHandler handler = new PostCallCountHandler(); ClassWithDefaultCtor instance = WireupHelper.GetInterceptedInstance <ClassWithDefaultCtor>("CalculateAnswer", handler); int result = instance.CalculateAnswer(); Assert.AreEqual(42, result); Assert.AreEqual(1, handler.CallsCompleted); }
public void CanInterceptGenericMethodOnClosedGenericType() { PostCallCountHandler handler = new PostCallCountHandler(); InterceptingGenericClass <DateTime> instance = WireupHelper.GetInterceptedInstance <InterceptingGenericClass <DateTime> >("Reverse", handler); string result = instance.Reverse(137); Assert.AreEqual("731", result); Assert.AreEqual(1, handler.CallsCompleted); }
public void CanInterceptMethodsWithRefParameters() { PostCallCountHandler handler = new PostCallCountHandler(); ClassWithDefaultCtor instance = WireupHelper.GetInterceptedInstance <ClassWithDefaultCtor>("MethodWithRefParameters", handler); string s = "abc"; int result = instance.MethodWithRefParameters(5, ref s, 10); Assert.AreEqual(15, result); Assert.AreEqual("abc hooray!", s); Assert.AreEqual(1, handler.CallsCompleted); }
public void CanInterceptClosedGenericType() { PostCallCountHandler handler = new PostCallCountHandler(); InterceptingGenericClass <DateTime> instance = WireupHelper.GetInterceptedInstance <InterceptingGenericClass <DateTime> >("Decorate", handler); DateTime now = DateTime.Now; string result = instance.Decorate(now); Assert.AreEqual("**" + now + "**", result); Assert.AreEqual(1, handler.CallsCompleted); }
public void CanInterceptMethodsWithOutParameters() { PostCallCountHandler handler = new PostCallCountHandler(); ClassWithDefaultCtor instance = WireupHelper.GetInterceptedInstance <ClassWithDefaultCtor>("OutParams", handler); int plusOne; int timesTwo; instance.OutParams(5, out plusOne, out timesTwo); Assert.AreEqual(5 + 1, plusOne); Assert.AreEqual(5 * 2, timesTwo); Assert.AreEqual(1, handler.CallsCompleted); }
public void AttemptingToInterceptInvalidClassThrows() { PostCallCountHandler handler = new PostCallCountHandler(); VirtualMethodInterceptor interceptor = new VirtualMethodInterceptor(); try { interceptor.CreateProxyType(typeof(CantTouchThis)); Assert.Fail(); } catch (Exception ex) { Assert.IsInstanceOfType(ex, typeof(InvalidOperationException)); } }
public void GenericWrapperWorks() { PostCallCountHandler handler = new PostCallCountHandler(); InterceptingGenericClass <DateTime> instance = new WrapperGeneric <DateTime>(); PipelineManager pm = new PipelineManager(); MethodBase reverse = typeof(InterceptingGenericClass <DateTime>).GetMethod("Reverse"); pm.SetPipeline(reverse, new HandlerPipeline(Sequence.Collect <ICallHandler>(handler))); ((IInterceptingProxy)instance).AddInterceptionBehavior(new PolicyInjectionBehavior(pm)); string result = instance.Reverse(137); Assert.AreEqual("731", result); Assert.AreEqual(1, handler.CallsCompleted); }
public void CallingMethodInvokesHandlers() { MethodInfo methodOne = typeof(ClassWithDefaultCtor).GetMethod("MethodOne"); ClassWithDefaultCtor instance = WireupHelper.GetInterceptingInstance <ClassWithDefaultCtor>(); IInterceptingProxy pm = (IInterceptingProxy)instance; CallCountHandler handler = new CallCountHandler(); PostCallCountHandler postHandler = new PostCallCountHandler(); HandlerPipeline pipeline = new HandlerPipeline(new ICallHandler[] { postHandler, handler }); pm.SetPipeline(methodOne, pipeline); instance.MethodOne(); Assert.AreEqual(1, handler.CallCount); Assert.AreEqual(1, postHandler.CallsCompleted); }
public void GenericWrapperWorks() { PostCallCountHandler handler = new PostCallCountHandler(); InterceptingGenericClass <DateTime> instance = new WrapperGeneric <DateTime>(); IInterceptingProxy pm = (IInterceptingProxy)instance; MethodBase reverse = typeof(InterceptingGenericClass <DateTime>).GetMethod("Reverse"); pm.SetPipeline(reverse, new HandlerPipeline(Seq.Collect <ICallHandler>(handler))); DateTime now = DateTime.Now; string result = instance.Reverse(137); Assert.AreEqual("731", result); Assert.AreEqual(1, handler.CallsCompleted); }