public void CooperativeExpressionVisitor_MethodCall_Rewrite3() { var cv = new CooperativeExpressionVisitor(); var m1 = (Expression <Func <MethOp, int, int> >)((m, x) => MethOp.Foo(MethOp.Qux(m.Bar(x)))); var res = cv.Visit(m1.Body); var mr = res as MethodCallExpression; Assert.IsNotNull(mr); Assert.IsNull(mr.Object); Assert.AreEqual("Foz", mr.Method.Name); var mi = mr.Arguments[0] as MethodCallExpression; Assert.IsNotNull(mi); Assert.IsNull(mi.Object); Assert.AreEqual("Qux", mi.Method.Name); var mj = mi.Arguments[0] as MethodCallExpression; Assert.IsNotNull(mj); Assert.AreSame(m1.Parameters[0], mj.Object); Assert.AreSame(m1.Parameters[1], mj.Arguments[0]); }
public void CooperativeExpressionVisitor_Index_NoRewrite() { var cv = new CooperativeExpressionVisitor(); var p1 = Expression.Parameter(typeof(List <string>)); var i1 = Expression.Lambda(Expression.MakeIndex(p1, typeof(List <string>).GetProperty("Item"), new[] { Expression.Constant(42) }), p1); Assert.AreSame(i1, cv.Visit(i1)); }
public void CooperativeExpressionVisitor_Unary_NoRewrite() { var cv = new CooperativeExpressionVisitor(); var u1 = (Expression <Func <int, int> >)(x => - x); Assert.AreSame(u1, cv.Visit(u1)); var u2 = (Expression <Func <TimeSpan, TimeSpan> >)(x => - x); Assert.AreSame(u2, cv.Visit(u2)); }
public void CooperativeExpressionVisitor_Binary_NoRewrite() { var cv = new CooperativeExpressionVisitor(); var b1 = (Expression <Func <int, int, int> >)((a, b) => a + b); Assert.AreSame(b1, cv.Visit(b1)); var b2 = (Expression <Func <DateTime, TimeSpan, DateTime> >)((a, b) => a + b); Assert.AreSame(b2, cv.Visit(b2)); }
public void CooperativeExpressionVisitor_MethodCall_NoRewrite() { var cv = new CooperativeExpressionVisitor(); var m1 = (Expression <Action <string> >)(s => Console.WriteLine(s)); Assert.AreSame(m1, cv.Visit(m1)); var m2 = (Expression <Func <TimeSpan, TimeSpan, TimeSpan> >)((t1, t2) => t1.Add(t2)); Assert.AreSame(m2, cv.Visit(m2)); }
public void CooperativeExpressionVisitor_Member_NoRewrite() { var cv = new CooperativeExpressionVisitor(); var m1 = (Expression <Func <Exception, string> >)(ex => ex.Message); Assert.AreSame(m1, cv.Visit(m1)); var m2 = (Expression <Func <int> >)(() => new { a = 42, b = "bar" }.a); Assert.AreSame(m2, cv.Visit(m2)); }
public void CooperativeExpressionVisitor_Unary_Rewrite1() { var cv = new CooperativeExpressionVisitor(); var u1 = (Expression <Func <UnOp, UnOp> >)(x => - x); var res = cv.Visit(u1.Body); var br = res as UnaryExpression; Assert.IsNotNull(br); Assert.AreEqual(ExpressionType.UnaryPlus, br.NodeType); Assert.AreSame(u1.Parameters[0], br.Operand); }
public void CooperativeExpressionVisitor_Member_Rewrite2() { var cv = new CooperativeExpressionVisitor(); var m1 = (Expression <Func <int> >)(() => MemOp.Foo); var res = cv.Visit(m1.Body); var mr = res as MemberExpression; Assert.IsNotNull(mr); Assert.IsNull(mr.Expression); Assert.AreEqual("Foz", mr.Member.Name); }
public void CooperativeExpressionVisitor_Member_Rewrite1() { var cv = new CooperativeExpressionVisitor(); var m1 = (Expression <Func <MemOp, int> >)(m => m.Bar); var res = cv.Visit(m1.Body); var mr = res as MemberExpression; Assert.IsNotNull(mr); Assert.AreSame(m1.Parameters[0], mr.Expression); Assert.AreEqual("Baz", mr.Member.Name); }
public void CooperativeExpressionVisitor_Binary_Rewrite1() { var cv = new CooperativeExpressionVisitor(); var b1 = (Expression <Func <BinOp, BinOp, BinOp> >)((a, b) => a + b); var res = cv.Visit(b1.Body); var br = res as BinaryExpression; Assert.IsNotNull(br); Assert.AreEqual(ExpressionType.Subtract, br.NodeType); Assert.AreSame(b1.Parameters[0], br.Left); Assert.AreSame(b1.Parameters[1], br.Right); }
public void CooperativeExpressionVisitor_New_Rewrite1() { var cv = new CooperativeExpressionVisitor(); var n1 = (Expression <Func <int, string, NewOp> >)((x, s) => new NewOp(x, s)); var res = cv.Visit(n1.Body); var nr = res as NewExpression; Assert.IsNotNull(nr); Assert.IsTrue(new[] { typeof(string), typeof(int) }.SequenceEqual(nr.Constructor.GetParameters().Select(p => p.ParameterType))); Assert.AreSame(n1.Parameters[1], nr.Arguments[0]); Assert.AreSame(n1.Parameters[0], nr.Arguments[1]); }
public void CooperativeExpressionVisitor_MethodCall_Rewrite2() { var cv = new CooperativeExpressionVisitor(); var m1 = (Expression <Func <int, int> >)(x => MethOp.Foo(x)); var res = cv.Visit(m1.Body); var mr = res as MethodCallExpression; Assert.IsNotNull(mr); Assert.IsNull(mr.Object); Assert.AreEqual("Foz", mr.Method.Name); Assert.AreSame(m1.Parameters[0], mr.Arguments[0]); }
public void CooperativeExpressionVisitor_Index_Rewrite1() { var cv = new CooperativeExpressionVisitor(); var p1 = Expression.Parameter(typeof(IndOp)); var i1 = Expression.Lambda(Expression.MakeIndex(p1, typeof(IndOp).GetProperty("Item"), new[] { Expression.Constant(42) }), p1); var res = cv.Visit(i1.Body); var ir = res as MethodCallExpression; Assert.IsNotNull(ir); Assert.AreEqual("Get", ir.Method.Name); Assert.AreSame(i1.Parameters[0], ir.Object); }
public void CooperativeExpressionVisitor_New_NoRewrite() { var cv = new CooperativeExpressionVisitor(); var n1 = (Expression <Func <Exception> >)(() => new Exception("foo")); Assert.AreSame(n1, cv.Visit(n1)); var n2 = (Expression <Func <object> >)(() => new { a = 42, b = "bar" }); Assert.AreSame(n2, cv.Visit(n2)); var n3 = Expression.Lambda(Expression.New(typeof(int))); Assert.AreSame(n3, cv.Visit(n3)); }