Ejemplo n.º 1
0
        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)));
        }
Ejemplo n.º 2
0
        public void CreateDelegateToMixin_returns_invokable_delegate()
        {
            var proxy  = new FakeProxyWithInvokeMethods();
            var action = ProxyUtil.CreateDelegateToMixin <Action>(proxy);

            action.Invoke();
        }
Ejemplo n.º 3
0
        public void CreateDelegateToMixin_throws_MissingMethodException_if_no_suitable_Invoke_method_found()
        {
            var proxy = new FakeProxyWithInvokeMethods();

            Assert.Throws <MissingMethodException>(
                () => ProxyUtil.CreateDelegateToMixin <Action <bool> >(proxy)
                );
        }
Ejemplo n.º 4
0
        public void CreateDelegateToMixin_when_given_non_delegate_type_throws_ArgumentException()
        {
            var _ = new object();

            Assert.Throws <ArgumentException>(
                () => ProxyUtil.CreateDelegateToMixin(_, typeof(Exception))
                );
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        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());
        }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 8
0
        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);
        }
Ejemplo n.º 9
0
        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);
        }
Ejemplo n.º 10
0
        public void CreateDelegateToMixin_when_given_valid_arguments_succeeds()
        {
            var proxy = new FakeProxyWithInvokeMethods();

            Assert.NotNull(ProxyUtil.CreateDelegateToMixin(proxy, typeof(Action)));
        }
Ejemplo n.º 11
0
        public void CreateDelegateToMixin_when_given_null_for_delegateType_throws_ArgumentNullException()
        {
            var _ = new object();

            Assert.Throws <ArgumentNullException>(() => ProxyUtil.CreateDelegateToMixin(_, null));
        }
Ejemplo n.º 12
0
        public void CreateDelegateToMixin_when_given_null_for_proxy_throws_ArgumentNullException()
        {
            var _ = typeof(Action);

            Assert.Throws <ArgumentNullException>(() => ProxyUtil.CreateDelegateToMixin(null, _));
        }