public void Can_Intercept_Multiple_Methods_Using_A_Filter() { var ack = 0; var foo = new Foo(); var proxy = new Proxy<IFoo>() .Target(foo) .InterceptWhere(mi => mi.Name.EndsWith("Go")) //.InterceptWhere(mi => mi.IsGenericMethod ) .OnBefore(mi => ack++) .Save(); // intercepted proxy.Go(); proxy.GenericGo<int>(-1); proxy.OverloadedGo(-1); proxy.OverloadedGo(string.Empty); // not intercepted proxy.Name = string.Empty; proxy.Return(); Assert.Equal(4, ack); }
public void Can_Intercept_Generic_Methods() { var ack = 0; var foo = new Foo(); var proxy = new Proxy<IFoo>() .Target(foo) .InterceptMethod(f => f.GenericGo<int>(It.Any<int>())) .OnBefore(() => { Assert.False(foo.WasExecuted); ack++; }) .InterceptMethod(f => f.GenericGo<string>(It.Any<string>())) .OnAfter(() => { ack++; }) .Save(); proxy.GenericGo<int>(1); // intercepted proxy.GenericGo<string>(string.Empty); // intercepted proxy.GenericGo<double>(2d); // not intercepted proxy.GenericGo<object>(It.Any<object>()); // not intercepted Assert.True(foo.WasExecuted); Assert.Equal(2, ack); }
public void Can_Intercept_Many_Methods_With_One_Advice() { var ack = 0; var foo = new Foo(); var proxy = new Proxy<IFoo>() .Target(foo) .InterceptMethods( f => f.Return(), f => f.GenericGo<int>(It.Any<int>()), f => f.Go()) .OnBefore(mi => ack++) .Save(); // intercepted proxy.Go(); proxy.Return(); proxy.GenericGo<int>(-1); // not intercepted proxy.Name = string.Empty; proxy.OverloadedGo(-1); proxy.OverloadedGo(string.Empty); Assert.Equal(3, ack); }
public void Can_Intercept_All_Methods_Getters_And_Setters() { var ack = 0; var foo = new Foo(); var proxy = new Proxy<IFoo>() .Target(foo) .InterceptAll() .OnFinally(() => { ack++; }) .Save(); // intercepts all gettrers, setters and methods... proxy.Go(); var name = proxy.Name; var description = proxy.Description; proxy.Name = string.Empty; var result = proxy.GenericGo<int>(-1); Assert.Equal(5, ack); }