Browse Source

More tests.

svn path=/trunk/mcs/; revision=102123
Marek Safar 17 năm trước cách đây
mục cha
commit
27bc7fe86c
1 tập tin đã thay đổi với 28 bổ sung4 xóa
  1. 28 4
      mcs/tests/gtest-etree-01.cs

+ 28 - 4
mcs/tests/gtest-etree-01.cs

@@ -280,6 +280,9 @@ class NewTest<T>
 
 class Tester
 {
+	delegate void EmptyDelegate ();
+	delegate int IntDelegate ();
+
 	static void AssertNodeType (LambdaExpression e, ExpressionType et)
 	{
 		if (e.Body.NodeType != et)
@@ -790,8 +793,6 @@ class Tester
 		Assert (false, e13.Compile ().Invoke (0));
 	}
 
-	delegate void EmptyDelegate ();
-	
 	void EqualTestDelegate ()
 	{
 		Expression<Func<Delegate, Delegate, bool>> e1 = (a, b) => a == b;
@@ -933,6 +934,18 @@ class Tester
 		Assert (true, e8.Compile ().Invoke (MyEnum.Value_2, MyEnum.Value_2));
 	}
 	
+	void InvokeTest ()
+	{
+		var del = new IntDelegate (TestInt);
+		Expression<Func<IntDelegate, int>> e = (a) => a ();
+		AssertNodeType (e, ExpressionType.Invoke);
+		Assert (29, e.Compile ().Invoke (del));
+
+		Expression<Func<Func<int, string>, int, string>> e2 = (a, b) => a (b);
+		AssertNodeType (e2, ExpressionType.Invoke);
+		Assert ("4", e2.Compile ().Invoke ((a) => (a+1).ToString (), 3));
+	}
+	
 	void LeftShiftTest ()
 	{
 		Expression<Func<ulong, short, ulong>> e = (ulong a, short b) => a << b;
@@ -1319,6 +1332,11 @@ class Tester
 		Expression<Func<decimal, NewTest<decimal>>> e4 = (decimal d) => new NewTest<decimal> (1, 5, d);
 		AssertNodeType (e4, ExpressionType.New);
 		Assert (new NewTest<decimal> (1, 5, -9), e4.Compile ().Invoke (-9));
+		
+		Expression<Func<object>> e5 = () => new { A = 9, Value = "a" };
+// FIXME: Extra return convert
+//		AssertNodeType (e5, ExpressionType.New);
+		Assert (new { A = 9, Value = "a" }, e5.Compile ().Invoke ());
 	}	
 
 	void NotTest ()
@@ -1605,8 +1623,8 @@ class Tester
 
 		// CSC bug
 		Expression<Func<MyEnum?, MyEnum?, byte?>> e11 = (a, b) => a - b;
-		AssertNodeType (e9, ExpressionType.Convert);
-		Assert (1, e9.Compile ().Invoke (MyEnum.Value_2, MyEnum.Value_1));
+		AssertNodeType (e11, ExpressionType.Convert);
+		Assert<byte?> (1, e11.Compile ().Invoke (MyEnum.Value_2, MyEnum.Value_1));
 		
 	}
 
@@ -1721,6 +1739,11 @@ class Tester
 			return "<empty>";
 		return args [index];
 	}
+	
+	static int TestInt ()
+	{
+		return 29;
+	}
 
 	T GenericMethod<T> (T t)
 	{
@@ -1751,6 +1774,7 @@ class Tester
 		e.ExclusiveOrTest ();
 		e.GreaterThanTest ();
 		e.GreaterThanOrEqualTest ();
+		e.InvokeTest ();
 		e.LeftShiftTest ();
 		e.LessThanTest ();
 		e.LessThanOrEqualTest ();