Browse Source

2008-01-18 Jb Evain <[email protected]>

	* ExpressionTest_Negate.cs
	ExpressionTest_Not.cs
	ExpressionTest_UnaryPlus.cs: test for some unary operators.

svn path=/trunk/mcs/; revision=93255
Jb Evain 18 năm trước cách đây
mục cha
commit
ceef9b6f96

+ 6 - 0
mcs/class/System.Core/Test/System.Linq.Expressions/ChangeLog

@@ -1,3 +1,9 @@
+2008-01-18  Jb Evain  <[email protected]>
+
+	* ExpressionTest_Negate.cs
+	ExpressionTest_Not.cs
+	ExpressionTest_UnaryPlus.cs: test for some unary operators.
+
 2008-01-16  Jb Evain  <[email protected]>
 
 	* ExpressionTest_CallWithExpression.cs: test for static method.

+ 88 - 0
mcs/class/System.Core/Test/System.Linq.Expressions/ExpressionTest_Negate.cs

@@ -0,0 +1,88 @@
+//
+// ExpressionTest_UnaryPlus.cs
+//
+// Author:
+//   Jb Evain ([email protected])
+//
+// (C) 2008 Novell, Inc. (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Reflection;
+using System.Linq;
+using System.Linq.Expressions;
+using NUnit.Framework;
+
+namespace MonoTests.System.Linq.Expressions
+{
+	[TestFixture]
+	public class ExpressionTest_Negate
+	{
+		[Test]
+		[ExpectedException (typeof (ArgumentNullException))]
+		public void Arg1Null ()
+		{
+			Expression.Negate (null);
+		}
+
+		[Test]
+		[ExpectedException (typeof (ArgumentException))]
+		public void MethodArgNotStatic ()
+		{
+			Expression.Negate (Expression.Constant (new object ()), typeof (OpClass).GetMethod ("WrongUnaryNotStatic"));
+		}
+
+		[Test]
+		[ExpectedException (typeof (ArgumentException))]
+		public void MethodArgParameterCount ()
+		{
+			Expression.Negate (Expression.Constant (new object ()), typeof (OpClass).GetMethod ("WrongUnaryParameterCount"));
+		}
+
+		[Test]
+		[ExpectedException (typeof (ArgumentException))]
+		public void MethodArgReturnsVoid ()
+		{
+			Expression.Negate (Expression.Constant (new object ()), typeof (OpClass).GetMethod ("WrongUnaryReturnVoid"));
+		}
+
+		[Test]
+		public void Number ()
+		{
+			var up = Expression.Negate (Expression.Constant (1));
+			Assert.AreEqual ("-1", up.ToString ());
+		}
+
+		[Test]
+		public void UserDefinedClass ()
+		{
+			var mi = typeof (OpClass).GetMethod ("op_UnaryNegation");
+
+			var expr = Expression.Negate (Expression.Constant (new OpClass ()));
+			Assert.AreEqual (ExpressionType.Negate, expr.NodeType);
+			Assert.AreEqual (typeof (OpClass), expr.Type);
+			Assert.AreEqual (mi, expr.Method);
+			Assert.AreEqual ("op_UnaryNegation", expr.Method.Name);
+			Assert.AreEqual ("-value(MonoTests.System.Linq.Expressions.OpClass)",	expr.ToString ());
+		}
+	}
+}

+ 88 - 0
mcs/class/System.Core/Test/System.Linq.Expressions/ExpressionTest_Not.cs

@@ -0,0 +1,88 @@
+//
+// ExpressionTest_UnaryPlus.cs
+//
+// Author:
+//   Jb Evain ([email protected])
+//
+// (C) 2008 Novell, Inc. (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Reflection;
+using System.Linq;
+using System.Linq.Expressions;
+using NUnit.Framework;
+
+namespace MonoTests.System.Linq.Expressions
+{
+	[TestFixture]
+	public class ExpressionTest_Not
+	{
+		[Test]
+		[ExpectedException (typeof (ArgumentNullException))]
+		public void Arg1Null ()
+		{
+			Expression.Not (null);
+		}
+
+		[Test]
+		[ExpectedException (typeof (ArgumentException))]
+		public void MethodArgNotStatic ()
+		{
+			Expression.Not (Expression.Constant (new object ()), typeof (OpClass).GetMethod ("WrongUnaryNotStatic"));
+		}
+
+		[Test]
+		[ExpectedException (typeof (ArgumentException))]
+		public void MethodArgParameterCount ()
+		{
+			Expression.Not (Expression.Constant (new object ()), typeof (OpClass).GetMethod ("WrongUnaryParameterCount"));
+		}
+
+		[Test]
+		[ExpectedException (typeof (ArgumentException))]
+		public void MethodArgReturnsVoid ()
+		{
+			Expression.Not (Expression.Constant (new object ()), typeof (OpClass).GetMethod ("WrongUnaryReturnVoid"));
+		}
+
+		[Test]
+		public void Number ()
+		{
+			var up = Expression.Not (Expression.Constant (1));
+			Assert.AreEqual ("Not(1)", up.ToString ());
+		}
+
+		[Test]
+		public void UserDefinedClass ()
+		{
+			var mi = typeof (OpClass).GetMethod ("op_LogicalNot");
+
+			var expr = Expression.Not (Expression.Constant (new OpClass ()));
+			Assert.AreEqual (ExpressionType.Not, expr.NodeType);
+			Assert.AreEqual (typeof (OpClass), expr.Type);
+			Assert.AreEqual (mi, expr.Method);
+			Assert.AreEqual ("op_LogicalNot", expr.Method.Name);
+			Assert.AreEqual ("Not(value(MonoTests.System.Linq.Expressions.OpClass))",	expr.ToString ());
+		}
+	}
+}

+ 88 - 0
mcs/class/System.Core/Test/System.Linq.Expressions/ExpressionTest_UnaryPlus.cs

@@ -0,0 +1,88 @@
+//
+// ExpressionTest_UnaryPlus.cs
+//
+// Author:
+//   Jb Evain ([email protected])
+//
+// (C) 2008 Novell, Inc. (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Reflection;
+using System.Linq;
+using System.Linq.Expressions;
+using NUnit.Framework;
+
+namespace MonoTests.System.Linq.Expressions
+{
+	[TestFixture]
+	public class ExpressionTest_UnaryPlus
+	{
+		[Test]
+		[ExpectedException (typeof (ArgumentNullException))]
+		public void Arg1Null ()
+		{
+			Expression.UnaryPlus (null);
+		}
+
+		[Test]
+		[ExpectedException (typeof (ArgumentException))]
+		public void MethodArgNotStatic ()
+		{
+			Expression.UnaryPlus (Expression.Constant (new object ()), typeof (OpClass).GetMethod ("WrongUnaryNotStatic"));
+		}
+
+		[Test]
+		[ExpectedException (typeof (ArgumentException))]
+		public void MethodArgParameterCount ()
+		{
+			Expression.UnaryPlus (Expression.Constant (new object ()), typeof (OpClass).GetMethod ("WrongUnaryParameterCount"));
+		}
+
+		[Test]
+		[ExpectedException (typeof (ArgumentException))]
+		public void MethodArgReturnsVoid ()
+		{
+			Expression.UnaryPlus (Expression.Constant (new object ()), typeof (OpClass).GetMethod ("WrongUnaryReturnVoid"));
+		}
+
+		[Test]
+		public void Number ()
+		{
+			var up = Expression.UnaryPlus (Expression.Constant (1));
+			Assert.AreEqual ("+1", up.ToString ());
+		}
+
+		[Test]
+		public void UserDefinedClass ()
+		{
+			var mi = typeof (OpClass).GetMethod ("op_UnaryPlus");
+
+			var expr = Expression.UnaryPlus (Expression.Constant (new OpClass ()));
+			Assert.AreEqual (ExpressionType.UnaryPlus, expr.NodeType);
+			Assert.AreEqual (typeof (OpClass), expr.Type);
+			Assert.AreEqual (mi, expr.Method);
+			Assert.AreEqual ("op_UnaryPlus", expr.Method.Name);
+			Assert.AreEqual ("+value(MonoTests.System.Linq.Expressions.OpClass)",	expr.ToString ());
+		}
+	}
+}

+ 64 - 2
mcs/class/System.Core/Test/System.Linq.Expressions/ExpressionTest_Utils.cs

@@ -1,3 +1,12 @@
+//
+// ExpressionTest_Utils.cs
+//
+// Author:
+//   Federico Di Gregorio <[email protected]>
+//   Jb Evain ([email protected])
+//
+// (C) 2008 Novell, Inc. (http://www.novell.com)
+//
 // Permission is hereby granted, free of charge, to any person obtaining
 // a copy of this software and associated documentation files (the
 // "Software"), to deal in the Software without restriction, including
@@ -15,9 +24,8 @@
 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
-// Authors:
-//		Federico Di Gregorio <[email protected]>
 
 using System;
 using System.Reflection;
@@ -88,6 +96,60 @@ namespace MonoTests.System.Linq.Expressions
 		{
 			return false;
 		}
+
+		public static bool operator > (OpClass a, OpClass b)
+		{
+			return false;
+		}
+
+		public static bool operator < (OpClass a, OpClass b)
+		{
+			return false;
+		}
+
+		public static bool operator >= (OpClass a, OpClass b)
+		{
+			return false;
+		}
+
+		public static bool operator <= (OpClass a, OpClass b)
+		{
+			return false;
+		}
+
+		public static OpClass operator + (OpClass a)
+		{
+			return a;
+		}
+
+		public static OpClass operator - (OpClass a)
+		{
+			return a;
+		}
+
+		public static OpClass operator ! (OpClass a)
+		{
+			return a;
+		}
+
+		public static OpClass operator ~ (OpClass a)
+		{
+			return a;
+		}
+
+		public static void WrongUnaryReturnVoid (OpClass a)
+		{
+		}
+
+		public static OpClass WrongUnaryParameterCount (OpClass a, OpClass b)
+		{
+			return a;
+		}
+
+		public OpClass WrongUnaryNotStatic (OpClass a)
+		{
+			return a;
+		}
 	}
 
 	public class NoOpClass