private T GetProxyInstance <T>(T func, params IInterceptor[] interceptors) { var type = GenerateProxyType <T>(); var instance = Activator.CreateInstance(type, func, interceptors); return((T)(object)ProxyUtil.CreateDelegateToMixin(instance, typeof(T))); }
public void CreateDelegateToMixin_returns_invokable_delegate() { var proxy = new FakeProxyWithInvokeMethods(); var action = ProxyUtil.CreateDelegateToMixin <Action>(proxy); action.Invoke(); }
public void CreateDelegateToMixin_throws_MissingMethodException_if_no_suitable_Invoke_method_found() { var proxy = new FakeProxyWithInvokeMethods(); Assert.Throws <MissingMethodException>( () => ProxyUtil.CreateDelegateToMixin <Action <bool> >(proxy) ); }
public void CreateDelegateToMixin_when_given_non_delegate_type_throws_ArgumentException() { var _ = new object(); Assert.Throws <ArgumentException>( () => ProxyUtil.CreateDelegateToMixin(_, typeof(Exception)) ); }
public void CreateDelegateToMixin_can_deal_with_multiple_Invoke_overloads() { var proxy = new FakeProxyWithInvokeMethods(); var action = ProxyUtil.CreateDelegateToMixin <Action>(proxy); action.Invoke(); Assert.AreEqual("Invoke()", proxy.LastInvocation); var intAction = ProxyUtil.CreateDelegateToMixin <Action <int> >(proxy); intAction.Invoke(42); Assert.AreEqual("Invoke(42)", proxy.LastInvocation); }
public void ProxyGenerator_CreateInterfaceProxyWithoutTarget_cannot_proceed_to_delegate_type_mixin() { var options = new ProxyGenerationOptions(); options.AddDelegateTypeMixin(typeof(Action)); var interceptor = new Interceptor(shouldProceed: true); var proxy = generator.CreateInterfaceProxyWithoutTarget(typeof(IComparable), options, interceptor); var action = ProxyUtil.CreateDelegateToMixin <Action>(proxy); Assert.NotNull(action); Assert.Throws <NotImplementedException>(() => action.Invoke()); }
public void ProxyGenerator_CreateClassProxy_can_create_callable_delegate_proxy_without_target() { var options = new ProxyGenerationOptions(); options.AddDelegateTypeMixin(typeof(Action)); var interceptor = new Interceptor(); var proxy = generator.CreateClassProxy(typeof(object), options, interceptor); var action = ProxyUtil.CreateDelegateToMixin <Action>(proxy); Assert.NotNull(action); action.Invoke(); Assert.AreSame(typeof(Action).GetMethod("Invoke"), interceptor.LastInvocation.Method); }
public void ProxyGenerator_CreateInterfaceProxyWithTarget_can_proceed_to_delegate_mixin() { var target = new Target(); var options = new ProxyGenerationOptions(); options.AddDelegateMixin(new Action(target.Method)); var interceptor = new Interceptor(shouldProceed: true); var proxy = generator.CreateInterfaceProxyWithTarget(typeof(IComparable), target, options, interceptor); var action = ProxyUtil.CreateDelegateToMixin <Action>(proxy); Assert.NotNull(action); action.Invoke(); Assert.True(target.MethodInvoked); }
public void Can_mixin_several_different_delegate_types_simultaneously() { var options = new ProxyGenerationOptions(); options.AddDelegateTypeMixin(typeof(Action)); options.AddDelegateTypeMixin(typeof(Action <int>)); var interceptor = new Interceptor(); var proxy = generator.CreateClassProxy(typeof(object), options, interceptor); var action = ProxyUtil.CreateDelegateToMixin <Action>(proxy); Assert.NotNull(action); action.Invoke(); var intAction = ProxyUtil.CreateDelegateToMixin <Action <int> >(proxy); Assert.NotNull(action); intAction.Invoke(42); }
public void CreateDelegateToMixin_when_given_valid_arguments_succeeds() { var proxy = new FakeProxyWithInvokeMethods(); Assert.NotNull(ProxyUtil.CreateDelegateToMixin(proxy, typeof(Action))); }
public void CreateDelegateToMixin_when_given_null_for_delegateType_throws_ArgumentNullException() { var _ = new object(); Assert.Throws <ArgumentNullException>(() => ProxyUtil.CreateDelegateToMixin(_, null)); }
public void CreateDelegateToMixin_when_given_null_for_proxy_throws_ArgumentNullException() { var _ = typeof(Action); Assert.Throws <ArgumentNullException>(() => ProxyUtil.CreateDelegateToMixin(null, _)); }