Пример #1
0
        public void VisitList_Changed_InvalidType()
        {
            Expression expr1 = Expression.Constant(1);
            ReadOnlyCollection <Expression> expressions = new List <Expression> (new[] { expr1 }).AsReadOnly();

            VisitorMock.VisitList(expressions, arg => null);
        }
Пример #2
0
        public void VisitNewExpression_ChangedArguments_WithMembers_AndConversionRequired()
        {
            NewExpression expression = Expression.New(
                typeof(KeyValuePair <object, object>).GetConstructor(new[] { typeof(object), typeof(object) }),
                new Expression[] { Expression.Constant(null), Expression.Constant(null) },
                typeof(KeyValuePair <object, object>).GetProperty("Key"), typeof(KeyValuePair <object, object>).GetProperty("Value"));

            var newArguments = new List <Expression> {
                Expression.Constant("testKey"), Expression.Constant("testValue")
            }.AsReadOnly();

            Expect.Call(VisitorMock.VisitAndConvert(expression.Arguments, "VisitNewExpression")).Return(newArguments);

            var result = (NewExpression)InvokeAndCheckVisitExpression("VisitNewExpression", expression);

            Assert.That(result, Is.Not.SameAs(expression));
            Assert.That(result.NodeType, Is.EqualTo(ExpressionType.New));

            Assert.That(result.Arguments.Count, Is.EqualTo(2));
            var expectedArgument1 = Expression.Convert(newArguments[0], typeof(object));

            ExpressionTreeComparer.CheckAreEqualTrees(expectedArgument1, result.Arguments[0]);
            var expectedArgument2 = Expression.Convert(newArguments[1], typeof(object));

            ExpressionTreeComparer.CheckAreEqualTrees(expectedArgument2, result.Arguments[1]);

            Assert.That(result.Members, Is.SameAs(expression.Members));
        }
Пример #3
0
        public void VisitAndConvert_Single_ThrowsOnNull()
        {
            var expression = (BinaryExpression)ExpressionInstanceCreator.GetExpressionInstance(ExpressionType.Add);

            Expect.Call(VisitorMock.Visit(expression)).Return(null);

            InvokeVisitAndConvert(expression, "VisitMethod");
        }
Пример #4
0
        public void VisitMemberAssignment_Unchanged()
        {
            MemberAssignment memberAssignment = ExpressionInstanceCreator.CreateMemberAssignment();

            Expect.Call(VisitorMock.VisitExpression(memberAssignment.Expression)).Return(memberAssignment.Expression);
            var result = (MemberAssignment)InvokeAndCheckVisitObject("VisitMemberAssignment", memberAssignment);

            Assert.That(result, Is.SameAs(memberAssignment));
        }
Пример #5
0
        public void VisitUnaryExpression_Unchanges()
        {
            var        expression        = (UnaryExpression)ExpressionInstanceCreator.GetExpressionInstance(ExpressionType.UnaryPlus);
            Expression expectedNextVisit = expression.Operand;

            Expect.Call(VisitorMock.VisitExpression(expectedNextVisit)).Return(expectedNextVisit);

            Assert.That(InvokeAndCheckVisitExpression("VisitUnaryExpression", expression), Is.SameAs(expression));
        }
Пример #6
0
        public void VisitAndConvert_Single_ThrowsOnInvalidType()
        {
            var expression    = (BinaryExpression)ExpressionInstanceCreator.GetExpressionInstance(ExpressionType.Add);
            var newExpression = (NewExpression)ExpressionInstanceCreator.GetExpressionInstance(ExpressionType.New);

            Expect.Call(VisitorMock.VisitExpression(expression)).Return(newExpression);

            InvokeAndCheckVisitAndConvertExpression(expression, "VisitMethod");
        }
Пример #7
0
        public void VisitMember_Unchanged()
        {
            var expression = (MemberExpression)ExpressionInstanceCreator.GetExpressionInstance(ExpressionType.MemberAccess);

            Expect.Call(VisitorMock.Visit(expression.Expression)).Return(expression.Expression);
            var result = (MemberExpression)InvokeAndCheckVisit("VisitMember", expression);

            Assert.That(result, Is.SameAs(expression));
        }
Пример #8
0
        public void VisitNewArrayExpression_Unchanged()
        {
            var expression = (NewArrayExpression)ExpressionInstanceCreator.GetExpressionInstance(ExpressionType.NewArrayInit);

            Expect.Call(VisitorMock.VisitAndConvert(expression.Expressions, "VisitNewArrayExpression")).Return(expression.Expressions);
            var result = (NewArrayExpression)InvokeAndCheckVisitExpression("VisitNewArrayExpression", expression);

            Assert.That(result, Is.SameAs(expression));
        }
Пример #9
0
        public void VisitTypeBinary_Unchanged()
        {
            var expression = (TypeBinaryExpression)ExpressionInstanceCreator.GetExpressionInstance(ExpressionType.TypeIs);

            Expect.Call(VisitorMock.VisitExpression(expression.Expression)).Return(expression.Expression);
            var result = (TypeBinaryExpression)InvokeAndCheckVisitExpression("VisitTypeBinaryExpression", expression);

            Assert.That(result, Is.SameAs(expression));
        }
Пример #10
0
        public void VisitLambdaExpression_Unchanged()
        {
            var expression = (LambdaExpression)ExpressionInstanceCreator.GetExpressionInstance(ExpressionType.Lambda);

            Expect.Call(VisitorMock.VisitExpression(expression.Body)).Return(expression.Body);
            Expect.Call(VisitorMock.VisitAndConvert(expression.Parameters, "VisitLambdaExpression")).Return(expression.Parameters);
            var result = (LambdaExpression)InvokeAndCheckVisitExpression("VisitLambdaExpression", expression);

            Assert.That(result, Is.SameAs(expression));
        }
        public void VisitNew_Unchanged()
        {
            var expression = (NewExpression)ExpressionInstanceCreator.GetExpressionInstance(ExpressionType.New);
            var argument   = expression.Arguments.Single();

            Expect.Call(VisitorMock.Visit(argument)).Return(argument);
            var result = (NewExpression)InvokeAndCheckVisit("VisitNew", expression);

            Assert.That(result, Is.SameAs(expression));
        }
Пример #12
0
        public void VisitInvocationExpression_Unchanged()
        {
            var expression = (InvocationExpression)ExpressionInstanceCreator.GetExpressionInstance(ExpressionType.Invoke);

            Expect.Call(VisitorMock.VisitExpression(expression.Expression)).Return(expression.Expression);
            Expect.Call(VisitorMock.VisitAndConvert(expression.Arguments, "VisitInvocationExpression")).Return(expression.Arguments);
            var result = (InvocationExpression)InvokeAndCheckVisitExpression("VisitInvocationExpression", expression);

            Assert.That(result, Is.SameAs(expression));
        }
Пример #13
0
        public void VisitElementInit_Unchanged()
        {
            ElementInit elementInit = ExpressionInstanceCreator.CreateElementInit();

            Expect.Call(VisitorMock.VisitAndConvert(elementInit.Arguments, "VisitElementInit")).Return(elementInit.Arguments);

            var result = (ElementInit)InvokeAndCheckVisitObject("VisitElementInit", elementInit);

            Assert.That(result, Is.SameAs(elementInit));
        }
Пример #14
0
        public void VisitListInitExpression_Unchanged()
        {
            var expression = (ListInitExpression)ExpressionInstanceCreator.GetExpressionInstance(ExpressionType.ListInit);

            Expect.Call(VisitorMock.VisitExpression(expression.NewExpression)).Return(expression.NewExpression);
            Expect.Call(InvokeVisitMethod("VisitElementInitList", expression.Initializers)).Return(expression.Initializers);
            var result = (ListInitExpression)InvokeAndCheckVisitExpression("VisitListInitExpression", expression);

            Assert.That(result, Is.SameAs(expression));
        }
Пример #15
0
        public void VisitAndConvert_Single_NoConvert()
        {
            var expression = (BinaryExpression)ExpressionInstanceCreator.GetExpressionInstance(ExpressionType.Add);

            Expect.Call(VisitorMock.Visit(expression)).Return(expression);

            var result = InvokeVisitAndConvert(expression, "Add");

            Assert.That(result, Is.SameAs(expression));
        }
Пример #16
0
        public void VisitConditionalExpression_Unchanged()
        {
            var expression = (ConditionalExpression)ExpressionInstanceCreator.GetExpressionInstance(ExpressionType.Conditional);

            Expect.Call(VisitorMock.VisitExpression(expression.Test)).Return(expression.Test);
            Expect.Call(VisitorMock.VisitExpression(expression.IfFalse)).Return(expression.IfFalse);
            Expect.Call(VisitorMock.VisitExpression(expression.IfTrue)).Return(expression.IfTrue);
            var result = (ConditionalExpression)InvokeAndCheckVisitExpression("VisitConditionalExpression", expression);

            Assert.That(result, Is.SameAs(expression));
        }
Пример #17
0
        public void VisitLambda_Unchanged()
        {
            var expression = ExpressionInstanceCreator.CreateLambdaWithArguments();
            var parameter  = expression.Parameters.Single();

            Expect.Call(VisitorMock.Visit(expression.Body)).Return(expression.Body);
            Expect.Call(VisitorMock.Visit(parameter)).Return(parameter);
            var result = (LambdaExpression)InvokeAndCheckVisit("VisitLambda", expression);

            Assert.That(result, Is.SameAs(expression));
        }
Пример #18
0
        public void VisitInvocation_Unchanged()
        {
            var expression = ExpressionInstanceCreator.CreateInvokeWithArguments();
            var argument   = expression.Arguments.Single();

            Expect.Call(VisitorMock.Visit(expression.Expression)).Return(expression.Expression);
            Expect.Call(VisitorMock.Visit(argument)).Return(argument);
            var result = (InvocationExpression)InvokeAndCheckVisit("VisitInvocation", expression);

            Assert.That(result, Is.SameAs(expression));
        }
Пример #19
0
        public void VisitMemberInit_Unchanged()
        {
            var expression = (MemberInitExpression)ExpressionInstanceCreator.GetExpressionInstance(ExpressionType.MemberInit);
            var binding    = expression.Bindings.Single();

            Expect.Call(VisitorMock.Visit(expression.NewExpression)).Return(expression.NewExpression);
            Expect.Call(InvokeVisitMethod("VisitMemberBinding", binding)).Return(binding);
            var result = (MemberInitExpression)InvokeAndCheckVisit("VisitMemberInit", expression);

            Assert.That(result, Is.SameAs(expression));
        }
Пример #20
0
        public void VisitMemberAssignment_Changed()
        {
            MemberAssignment memberAssignment    = ExpressionInstanceCreator.CreateMemberAssignment();
            MemberAssignment newMemberAssignment = Expression.Bind(typeof(List <int>).GetProperty("Capacity"), Expression.Constant(2));

            Expect.Call(VisitorMock.Visit(memberAssignment.Expression)).Return(newMemberAssignment.Expression);

            var result = (MemberAssignment)InvokeAndCheckVisitObject("VisitMemberAssignment", memberAssignment);

            Assert.That(result, Is.Not.SameAs(memberAssignment));
        }
        public void VisitBinary_Unchanged()
        {
            BinaryExpression expression = (BinaryExpression)ExpressionInstanceCreator.GetExpressionInstance(ExpressionType.Add);

            Expect.Call(VisitorMock.Visit(expression.Left)).Return(expression.Left);
            Expect.Call(VisitorMock.Visit(expression.Right)).Return(expression.Right);

            BinaryExpression result = (BinaryExpression)InvokeAndCheckVisit("VisitBinary", expression);

            Assert.That(result, Is.SameAs(expression));
        }
Пример #22
0
        public void VisitMemberAssignment_Changed()
        {
            MemberAssignment memberAssignment    = ExpressionInstanceCreator.CreateMemberAssignment();
            MemberAssignment newMemberAssignment = Expression.Bind(typeof(SimpleClass).GetField("Value"), Expression.Constant("2"));

            Expect.Call(VisitorMock.VisitExpression(memberAssignment.Expression)).Return(newMemberAssignment.Expression);

            var result = (MemberAssignment)InvokeAndCheckVisitObject("VisitMemberAssignment", memberAssignment);

            Assert.That(result, Is.Not.SameAs(memberAssignment));
        }
Пример #23
0
        public void VisitList_Unchanged()
        {
            Expression expr1 = Expression.Constant(1);
            ReadOnlyCollection <Expression> expressions = new List <Expression> (new[] { expr1 }).AsReadOnly();

            Expect.Call(VisitorMock.Visit(expr1)).Return(expr1);

            var result = ExpressionVisitor.Visit(expressions, arg => InvokeVisitAndConvert(expr1, "VisitAndConvert"));

            Assert.That(result, Is.SameAs(expressions));
        }
Пример #24
0
        public void VisitAndConvert_Collection_ExceptionUsesCallerName()
        {
            var constantExpression = Expression.Constant(1);
            var expressions        = new List <ConstantExpression> (new[] { constantExpression }).AsReadOnly();

            var newExpression = (NewExpression)ExpressionInstanceCreator.GetExpressionInstance(ExpressionType.New);

            Expect.Call(VisitorMock.Visit(constantExpression)).Return(newExpression);
            VisitorMock.Replay();

            VisitorMock.VisitAndConvert(expressions, "Whatever");
        }
Пример #25
0
        public void VisitList_Changed()
        {
            Expression expr1 = Expression.Constant(1);
            Expression expr2 = Expression.Constant(2);
            ReadOnlyCollection <Expression> expressions = new List <Expression> (new[] { expr1 }).AsReadOnly();

            Expect.Call(VisitorMock.VisitExpression(expr1)).Return(expr2);
            var result = VisitorMock.VisitList(expressions, arg => InvokeAndCheckVisitAndConvertExpression(expr1, "VisitAndConvert"));
            ReadOnlyCollection <Expression> conditionResult = new List <Expression> (new[] { expr2 }).AsReadOnly();

            Assert.That(result, Is.EqualTo(conditionResult));
        }
Пример #26
0
        public void VisitMemberExpression_ChangedExpression()
        {
            var        expression    = (MemberExpression)ExpressionInstanceCreator.GetExpressionInstance(ExpressionType.MemberAccess);
            Expression newExpression = Expression.Constant(DateTime.Now);

            Expect.Call(VisitorMock.VisitExpression(expression.Expression)).Return(newExpression);
            var result = (MemberExpression)InvokeAndCheckVisitExpression("VisitMemberExpression", expression);

            Assert.That(result, Is.Not.SameAs(expression));
            Assert.That(result.NodeType, Is.EqualTo(ExpressionType.MemberAccess));
            Assert.That(result.Expression, Is.SameAs(newExpression));
        }
Пример #27
0
        public void VisitTypeBinary_Changed()
        {
            var        expression    = (TypeBinaryExpression)ExpressionInstanceCreator.GetExpressionInstance(ExpressionType.TypeIs);
            Expression newExpression = Expression.Constant(1);

            Expect.Call(VisitorMock.VisitExpression(expression.Expression)).Return(newExpression);
            var result = (TypeBinaryExpression)InvokeAndCheckVisitExpression("VisitTypeBinaryExpression", expression);

            Assert.That(result, Is.Not.SameAs(expression));
            Assert.That(result.NodeType, Is.EqualTo(ExpressionType.TypeIs));
            Assert.That(result.Expression, Is.SameAs(newExpression));
        }
Пример #28
0
        public void VisitAndConvert_Collection()
        {
            var expr1       = Expression.Constant(1);
            var expressions = new List <ConstantExpression> (new[] { expr1 }).AsReadOnly();

            Expect.Call(VisitorMock.Visit(expr1)).Return(expr1);
            VisitorMock.Replay();

            var result = VisitorMock.VisitAndConvert(expressions, "Whatever");

            Assert.That(result, Is.SameAs(expressions));
            VisitorMock.VerifyAllExpectations();
        }
Пример #29
0
        public void VisitUnaryExpression_Negate_Changes()
        {
            var        expression        = (UnaryExpression)ExpressionInstanceCreator.GetExpressionInstance(ExpressionType.Negate);
            Expression expectedNextVisit = expression.Operand;
            Expression newOperand        = Expression.Constant(1);

            Expect.Call(VisitorMock.VisitExpression(expectedNextVisit)).Return(newOperand);

            var result = (UnaryExpression)InvokeAndCheckVisitExpression("VisitUnaryExpression", expression);

            Assert.That(result.Operand, Is.SameAs(newOperand));
            Assert.That(result.NodeType, Is.EqualTo(ExpressionType.Negate));
        }
Пример #30
0
        public void VisitElementInit_Changed()
        {
            ElementInit elementInit = ExpressionInstanceCreator.CreateElementInit();
            ReadOnlyCollection <Expression> newArguments = new List <Expression> (new Expression[] { Expression.Constant(214578) }).AsReadOnly();

            Expect.Call(VisitorMock.VisitAndConvert(elementInit.Arguments, "VisitElementInit")).Return(newArguments);

            var result = (ElementInit)InvokeAndCheckVisitObject("VisitElementInit", elementInit);

            Assert.That(result, Is.Not.SameAs(elementInit));
            Assert.That(result.AddMethod, Is.SameAs(elementInit.AddMethod));
            Assert.That(result.Arguments, Is.EqualTo(newArguments));
        }