public void CanInterceptProperties() { CallCountHandler getHandler = new CallCountHandler(); CallCountHandler setHandler = new CallCountHandler(); VirtualMethodInterceptor interceptor = new VirtualMethodInterceptor(); Assert.IsTrue(interceptor.CanIntercept(typeof(OverrideableProperies))); Type proxyType = interceptor.CreateProxyType(typeof(OverrideableProperies)); OverrideableProperies instance = (OverrideableProperies)Activator.CreateInstance(proxyType); PipelineManager manager = new PipelineManager(); ((IInterceptingProxy)instance).AddInterceptionBehavior(new PolicyInjectionBehavior(manager)); SetPipeline(manager, instance, "get_IntProperty", getHandler); SetPipeline(manager, instance, "set_IntProperty", setHandler); instance.IntProperty = 12; instance.IntProperty = 15; int total = 0; for (int i = 0; i < 5; ++i) { total += instance.IntProperty; } Assert.AreEqual(5 * 15, total); Assert.AreEqual(5, getHandler.CallCount); Assert.AreEqual(2, setHandler.CallCount); }
public void ImplicitlyImplementedMethodsAreInterceptedIfVirtual() { CallCountHandler handler = new CallCountHandler(); Interesting instance = WireupHelper.GetInterceptedInstance<Interesting>("DoSomethingInteresting", handler); instance.DoSomethingInteresting(); Assert.IsTrue(instance.SomethingWasCalled); Assert.AreEqual(1, handler.CallCount); }
IUnityContainer GetContainer() { callCountHandler = new CallCountHandler(); returnHandler = new StringReturnRewriteHandler("REWRITE"); IUnityContainer container = new UnityContainer() .RegisterInstance<ICallHandler>("call count", callCountHandler) .RegisterInstance<ICallHandler>("rewrite", returnHandler); return container; }
public void CanInterceptMethods() { CallCountHandler h1 = new CallCountHandler(); VirtualMethodInterceptor interceptor = new VirtualMethodInterceptor(); Type proxyType = interceptor.CreateProxyType(typeof(TwoOverrideableMethods)); TwoOverrideableMethods instance = (TwoOverrideableMethods)Activator.CreateInstance(proxyType); PipelineManager manager = new PipelineManager(); ((IInterceptingProxy)instance).AddInterceptionBehavior(new PolicyInjectionBehavior(manager)); SetPipeline(manager, instance, "DoSomething", h1); instance.DoSomething(); Assert.IsTrue(instance.DidSomething); Assert.AreEqual(1, h1.CallCount); }
public void CanSetUpInterceptorThroughInjectionMember() { CallCountHandler handler = new CallCountHandler(); IUnityContainer container = new UnityContainer(); container.AddNewExtension<Interception>(); container.Configure<Interception>() .AddPolicy("policy") .AddMatchingRule<AlwaysMatchingRule>() .AddCallHandler(handler); container.RegisterType<IInterface, BaseClass>( "test", new Interceptor<InterfaceInterceptor>(), new InterceptionBehavior<PolicyInjectionBehavior>()); IInterface instance = container.Resolve<IInterface>("test"); instance.DoSomething("1"); Assert.AreEqual(1, handler.CallCount); }
public void CanSetUpAPolicyWithGivenRulesAndHandlers() { IUnityContainer container = new UnityContainer(); container.AddNewExtension<Interception>(); IMatchingRule rule1 = new AlwaysMatchingRule(); ICallHandler handler1 = new CallCountHandler(); container .Configure<Interception>() .AddPolicy("policy1") .AddMatchingRule(rule1) .AddCallHandler(handler1); container .Configure<Interception>() .SetInterceptorFor<Wrappable>("wrappable", new VirtualMethodInterceptor()); Wrappable wrappable1 = container.Resolve<Wrappable>("wrappable"); wrappable1.Method2(); Assert.AreEqual(1, ((CallCountHandler)handler1).CallCount); }
public void CanInterceptTypeWithNonDefaultCtor() { CallCountHandler h1 = new CallCountHandler(); VirtualMethodInterceptor interceptor = new VirtualMethodInterceptor(); Type proxyType = interceptor.CreateProxyType(typeof(ClassWithNonDefaultCtor)); ClassWithNonDefaultCtor instance = (ClassWithNonDefaultCtor)Activator.CreateInstance(proxyType, "arg-value"); PipelineManager manager = new PipelineManager(); ((IInterceptingProxy)instance).AddInterceptionBehavior(new PolicyInjectionBehavior(manager)); SetPipeline(manager, instance, "GetArg", h1); Assert.AreEqual("arg-value", instance.GetArg()); Assert.AreEqual(1, h1.CallCount); }
public void EventsAreIntercepted() { CallCountHandler fireHandler = new CallCountHandler(); CallCountHandler addHandler = new CallCountHandler(); VirtualMethodInterceptor interceptor = new VirtualMethodInterceptor(); Assert.IsTrue(interceptor.CanIntercept(typeof(OverrideableProperies))); Type proxyType = interceptor.CreateProxyType(typeof(ClassWithEvent)); ClassWithEvent instance = (ClassWithEvent)Activator.CreateInstance(proxyType); PipelineManager manager = new PipelineManager(); ((IInterceptingProxy)instance).AddInterceptionBehavior(new PolicyInjectionBehavior(manager)); SetPipeline(manager, instance, "add_MyEvent", addHandler); SetPipeline(manager, instance, "FireMyEvent", fireHandler); bool raised = false; instance.MyEvent += delegate { raised = true; }; instance.FireMyEvent(); instance.FireMyEvent(); Assert.IsTrue(raised); Assert.AreEqual(2, fireHandler.CallCount); Assert.AreEqual(1, addHandler.CallCount); }