Beispiel #1
0
        public static void CheckCallFactoryInstanceN()
        {
            const int N = 4;

            ParameterExpression obj = Expression.Parameter(typeof(MS));

            ConstantExpression[] args = Enumerable.Range(0, N).Select(i => Expression.Constant(i)).ToArray();

            MethodCallExpression expr = Expression.Call(obj, typeof(MS).GetMethod("I" + N), args);

            if (!PlatformDetection.IsNetNative) // .Net Native blocks internal framework reflection.
            {
                Assert.Equal("InstanceMethodCallExpressionN", expr.GetType().Name);
            }

            Assert.Same(obj, expr.Object);

            Assert.Equal(N, expr.ArgumentCount);
            for (var i = 0; i < N; i++)
            {
                Assert.Same(args[i], expr.GetArgument(i));
            }

            Collections.ObjectModel.ReadOnlyCollection <Expression> arguments = expr.Arguments;
            Assert.Same(arguments, expr.Arguments);

            Assert.Equal(N, arguments.Count);
            for (var i = 0; i < N; i++)
            {
                Assert.Same(args[i], arguments[i]);
            }

            MethodCallExpression updated = expr.Update(obj, arguments.ToList());

            Assert.Same(expr, updated);

            var visited = (MethodCallExpression) new NopVisitor().Visit(expr);

            Assert.Same(expr, visited);

            var visitedObj = (MethodCallExpression) new VisitorObj().Visit(expr);

            Assert.NotSame(expr, visitedObj);
            Assert.NotSame(obj, visitedObj.Object);
            Assert.Same(arguments, visitedObj.Arguments);

            var visitedArgs = (MethodCallExpression) new VisitorArgs().Visit(expr);

            Assert.NotSame(expr, visitedArgs);
            Assert.Same(obj, visitedArgs.Object);
            Assert.NotSame(arguments, visitedArgs.Arguments);
        }
Beispiel #2
0
        public static void CheckCallFactoryStaticN()
        {
            const int N = 6;

            ConstantExpression[] args = Enumerable.Range(0, N).Select(i => Expression.Constant(i)).ToArray();

            MethodCallExpression expr = Expression.Call(typeof(MS).GetMethod("S" + N), args);

            Assert.Equal("MethodCallExpressionN", expr.GetType().Name);

            Assert.Equal(N, expr.ArgumentCount);
            for (var i = 0; i < N; i++)
            {
                Assert.Same(args[i], expr.GetArgument(i));
            }

            Collections.ObjectModel.ReadOnlyCollection <Expression> arguments = expr.Arguments;
            Assert.Same(arguments, expr.Arguments);

            Assert.Equal(N, arguments.Count);
            for (var i = 0; i < N; i++)
            {
                Assert.Same(args[i], arguments[i]);
            }

            MethodCallExpression updated = expr.Update(null, arguments);

            Assert.Same(expr, updated);

            var visited = (MethodCallExpression) new NopVisitor().Visit(expr);

            Assert.Same(expr, visited);

            var visitedArgs = (MethodCallExpression) new VisitorArgs().Visit(expr);

            Assert.NotSame(expr, visitedArgs);
            Assert.Same(null, visitedArgs.Object);
            Assert.NotSame(arguments, visitedArgs.Arguments);
        }
Beispiel #3
0
 protected internal override Expression VisitNew(NewExpression node)
 {
     Out("new ");
     Out(node.Type.Name);
     Out('(');
     Collections.ObjectModel.ReadOnlyCollection <MemberInfo> members = node.Members;
     for (int i = 0; i < node.ArgumentCount; i++)
     {
         if (i > 0)
         {
             Out(", ");
         }
         if (members != null)
         {
             string name = members[i].Name;
             Out(name);
             Out(" = ");
         }
         Visit(node.GetArgument(i));
     }
     Out(')');
     return(node);
 }