public void Sut_creates_Expression_method_call_bound_to_arguments()
        {
            // Arrange
            var target = ((Func<int, int, int>)Sum).Method;

            const int firstAddend = 5;
            const int secondAddend = 17;
            var expectedSum = firstAddend + secondAddend;
            var first = Expression.Constant(firstAddend);
            var second = Expression.Constant(secondAddend);

            var sut = new DynamicProxyMethodGeneratorSimulator();

            // Act
            var expr = sut.GetCallWrapper(target, first, second);

            // Assert
            var mce = expr as MethodCallExpression;

            Assert.IsNotNull(mce, "Expected return value to be a MethodCallExpression.");

            Assert.AreEqual(2, mce.Arguments.Count);
            Assert.AreEqual(first, mce.Arguments[0]);
            Assert.AreSame(second, mce.Arguments[1]);

            var sum = Expression.Lambda<Func<int>>(mce).Compile();
            var result = sum();

            Assert.AreEqual(expectedSum, result);
        }
        public void Sut_creates_Expression_method_call_bound_to_arguments()
        {
            // Arrange
            var target = ((Func <int, int, int>)Sum).Method;

            const int firstAddend  = 5;
            const int secondAddend = 17;
            var       expectedSum  = firstAddend + secondAddend;
            var       first        = Expression.Constant(firstAddend);
            var       second       = Expression.Constant(secondAddend);

            var sut = new DynamicProxyMethodGeneratorSimulator();

            // Act
            var expr = sut.GetCallWrapper(target, first, second);

            // Assert
            var mce = expr as MethodCallExpression;

            Assert.IsNotNull(mce, "Expected return value to be a MethodCallExpression.");

            Assert.AreEqual(2, mce.Arguments.Count);
            Assert.AreEqual(first, mce.Arguments[0]);
            Assert.AreSame(second, mce.Arguments[1]);

            var sum    = Expression.Lambda <Func <int> >(mce).Compile();
            var result = sum();

            Assert.AreEqual(expectedSum, result);
        }
示例#3
0
        public void When_client_can_create_DynamicMethods_with_skip_visibility_GetCallWrapper_returns_cached_DynamicMethod_on_multiple_calls()
        {
            // Arrange
            MethodInfo target;

#if (NETCOREAPP1_0 || NETCOREAPP2_0)
            target = ((Action)Simple).GetMethodInfo();
#else
            target = ((Action)Simple).Method;
#endif
            var sut = new DynamicProxyMethodGeneratorSimulator
            {
                HasPermissionsToCreateDynamicMethodsWithSkipVisibility = true
            };
            var sut2 = new DynamicProxyMethodGeneratorSimulator
            {
                HasPermissionsToCreateDynamicMethodsWithSkipVisibility = true
            };

            // Act
            var expr  = (MethodCallExpression)sut.GetCallWrapper(target);
            var expr2 = (MethodCallExpression)sut2.GetCallWrapper(target);

            // Assert
            Assert.AreSame(expr.Method, expr2.Method);
        }
示例#4
0
        public void When_client_cannot_create_DynamicMethod_with_skip_visibility_GetCallWrapper_returns_Expression_which_calls_method_directly()
        {
            // Arrange
            MethodInfo target;

#if (NETCOREAPP1_0 || NETCOREAPP2_0)
            target = ((Action)Simple).GetMethodInfo();
#else
            target = ((Action)Simple).Method;
#endif
            var sut = new DynamicProxyMethodGeneratorSimulator
            {
                HasPermissionsToCreateDynamicMethodsWithSkipVisibility = false
            };

            // Act
            var expr = sut.GetCallWrapper(target);

            // Assert
            var mce = expr as MethodCallExpression;

            //Expected return value to be a MethodCallExpression.
            Assert.NotNull(mce);
            Assert.Equal(target, mce.Method);
        }
        public void When_client_can_create_DynamicMethod_with_skip_visibility_GetCallWrapper_returns_Expression_which_calls_DynamicMethod()
        {
            // Arrange
            MethodInfo target = typeof(DataServiceContext).GetMethod("GetMetadataUri", BindingFlags.Public | BindingFlags.Instance);
            var sut = new DynamicProxyMethodGeneratorSimulator
                      {
                          HasPermissionsToCreateDynamicMethodsWithSkipVisibility = true
                      };

            // Act
            var expr = sut.GetCallWrapper(target);

            // Assert
            var mce = expr as MethodCallExpression;

            Assert.IsNotNull(mce, "Expected return value to be a MethodCallExpression.");
            Assert.IsInstanceOfType(mce.Method, typeof(DynamicMethod));
        }
        public void When_client_cannot_create_DynamicMethod_with_skip_visibility_GetCallWrapper_returns_Expression_which_calls_method_directly()
        {
            // Arrange
            var target = ((Action)Simple).Method;
            var sut    = new DynamicProxyMethodGeneratorSimulator
            {
                HasPermissionsToCreateDynamicMethodsWithSkipVisibility = false
            };

            // Act
            var expr = sut.GetCallWrapper(target);

            // Assert
            var mce = expr as MethodCallExpression;

            Assert.IsNotNull(mce, "Expected return value to be a MethodCallExpression.");
            Assert.AreEqual(target, mce.Method);
        }
        public void When_client_can_create_DynamicMethod_with_skip_visibility_GetCallWrapper_returns_Expression_which_calls_DynamicMethod()
        {
            // Arrange
            MethodInfo target = typeof(DataServiceContext).GetMethod("GetMetadataUri", BindingFlags.Public | BindingFlags.Instance);
            var        sut    = new DynamicProxyMethodGeneratorSimulator
            {
                HasPermissionsToCreateDynamicMethodsWithSkipVisibility = true
            };

            // Act
            var expr = sut.GetCallWrapper(target);

            // Assert
            var mce = expr as MethodCallExpression;

            Assert.IsNotNull(mce, "Expected return value to be a MethodCallExpression.");
            Assert.IsInstanceOfType(mce.Method, typeof(DynamicMethod));
        }
        public void When_client_cannot_create_DynamicMethod_with_skip_visibility_GetCallWrapper_returns_Expression_which_calls_constructor_directly()
        {
            // Arrange
            var target = typeof(DynamicProxyMethodGeneratorTests).GetConstructor(Type.EmptyTypes);
            var sut    = new DynamicProxyMethodGeneratorSimulator
            {
                HasPermissionsToCreateDynamicMethodsWithSkipVisibility = false
            };

            // Act
            var expr = sut.GetCallWrapper(target);

            // Assert
            var nex = expr as NewExpression;

            Assert.IsNotNull(nex, "Expected return value to be a NewExpression.");
            Assert.AreEqual(target, nex.Constructor);
        }
示例#9
0
        public void Sut_creates_Expression_method_call_bound_to_arguments()
        {
            // Arrange
            MethodInfo target;

#if (NETCOREAPP1_0 || NETCOREAPP2_0)
            target = ((Func <int, int, int>)Sum).GetMethodInfo();
#else
            target = ((Func <int, int, int>)Sum).Method;
#endif

            const int firstAddend  = 5;
            const int secondAddend = 17;
            var       expectedSum  = firstAddend + secondAddend;
            var       first        = Expression.Constant(firstAddend);
            var       second       = Expression.Constant(secondAddend);

            var sut = new DynamicProxyMethodGeneratorSimulator();

            // Act
            var expr = sut.GetCallWrapper(target, first, second);

            // Assert
            var mce = expr as MethodCallExpression;

            Assert.NotNull(mce);

            Assert.Equal(2, mce.Arguments.Count);
            Assert.Equal(first, mce.Arguments[0]);
            Assert.Same(second, mce.Arguments[1]);

            var sum    = Expression.Lambda <Func <int> >(mce).Compile();
            var result = sum();

            Assert.Equal(expectedSum, result);
        }
        public void When_client_cannot_create_DynamicMethod_with_skip_visibility_GetCallWrapper_returns_Expression_which_calls_method_directly()
        {
            // Arrange
            var target = ((Action)Simple).Method;
            var sut = new DynamicProxyMethodGeneratorSimulator
            {
                HasPermissionsToCreateDynamicMethodsWithSkipVisibility = false
            };

            // Act
            var expr = sut.GetCallWrapper(target);

            // Assert
            var mce = expr as MethodCallExpression;

            Assert.IsNotNull(mce, "Expected return value to be a MethodCallExpression.");
            Assert.AreEqual(target, mce.Method);
        }
        public void When_client_can_create_DynamicMethods_with_skip_visibility_GetCallWrapper_returns_cached_DynamicMethod_on_multiple_calls()
        {
            // Arrange
            var target = ((Action)Simple).Method;
            var sut = new DynamicProxyMethodGeneratorSimulator
            {
                HasPermissionsToCreateDynamicMethodsWithSkipVisibility = true
            };
            var sut2 = new DynamicProxyMethodGeneratorSimulator
            {
                HasPermissionsToCreateDynamicMethodsWithSkipVisibility = true
            };

            // Act
            var expr = (MethodCallExpression)sut.GetCallWrapper(target);
            var expr2 = (MethodCallExpression)sut2.GetCallWrapper(target);

            // Assert
            Assert.AreSame(expr.Method, expr2.Method);
        }
        public void When_client_cannot_create_DynamicMethod_with_skip_visibility_GetCallWrapper_returns_Expression_which_calls_constructor_directly()
        {
            // Arrange
            var target = typeof(DynamicProxyMethodGeneratorTests).GetConstructor(Type.EmptyTypes);
            var sut = new DynamicProxyMethodGeneratorSimulator
            {
                HasPermissionsToCreateDynamicMethodsWithSkipVisibility = false
            };

            // Act
            var expr = sut.GetCallWrapper(target);

            // Assert
            var nex = expr as NewExpression;

            Assert.IsNotNull(nex, "Expected return value to be a NewExpression.");
            Assert.AreEqual(target, nex.Constructor);
        }