Jelajahi Sumber

new enums tests

svn path=/trunk/mcs/; revision=127869
Jb Evain 17 tahun lalu
induk
melakukan
4e42fe9f25

+ 45 - 0
mcs/class/System.Core/Test/System.Linq.Expressions/ExpressionTest_Equal.cs

@@ -408,5 +408,50 @@ namespace MonoTests.System.Linq.Expressions
 			Assert.AreEqual (true, eq (null, null));
 			Assert.AreEqual (true, eq (false, false));
 		}
+
+		public enum Foo {
+			Bar,
+			Baz,
+		}
+
+		[Test]
+		[Category ("NotWorking")]
+		public void EnumEqual ()
+		{
+			var l = Expression.Parameter (typeof (Foo), "l");
+			var r = Expression.Parameter (typeof (Foo), "r");
+
+			var node = Expression.Equal (l, r);
+			Assert.IsFalse (node.IsLifted);
+			Assert.IsFalse (node.IsLiftedToNull);
+			Assert.AreEqual (typeof (bool), node.Type);
+			Assert.IsNull (node.Method);
+
+			var eq = Expression.Lambda<Func<Foo, Foo, bool>> (node, l, r).Compile ();
+
+			Assert.AreEqual (true, eq (Foo.Bar, Foo.Bar));
+			Assert.AreEqual (false, eq (Foo.Bar, Foo.Baz));
+		}
+
+		[Test]
+		[Category ("NotWorking")]
+		public void LiftedEnumEqual ()
+		{
+			var l = Expression.Parameter (typeof (Foo?), "l");
+			var r = Expression.Parameter (typeof (Foo?), "r");
+
+			var node = Expression.Equal (l, r);
+			Assert.IsTrue (node.IsLifted);
+			Assert.IsFalse (node.IsLiftedToNull);
+			Assert.AreEqual (typeof (bool), node.Type);
+			Assert.IsNull (node.Method);
+
+			var eq = Expression.Lambda<Func<Foo?, Foo?, bool>> (node, l, r).Compile ();
+
+			Assert.AreEqual (true, eq (Foo.Bar, Foo.Bar));
+			Assert.AreEqual (false, eq (Foo.Bar, Foo.Baz));
+			Assert.AreEqual (false, eq (Foo.Bar, null));
+			Assert.AreEqual (true, eq (null, null));
+		}
 	}
 }

+ 15 - 0
mcs/class/System.Core/Test/System.Linq.Expressions/ExpressionTest_GreaterThan.cs

@@ -233,5 +233,20 @@ namespace MonoTests.System.Linq.Expressions
 			Assert.AreEqual (null, gte (new Slot (1), null));
 			Assert.AreEqual (null, gte (null, null));
 		}
+
+		enum Foo {
+			Bar,
+			Baz
+		}
+
+		[Test]
+		[ExpectedException (typeof (InvalidOperationException))]
+		[Category ("NotWorking")]
+		public void EnumGreaterThan ()
+		{
+			Expression.GreaterThan (
+				Foo.Bar.ToConstant (),
+				Foo.Baz.ToConstant ());
+		}
 	}
 }

+ 46 - 0
mcs/class/System.Core/Test/System.Linq.Expressions/ExpressionTest_NotEqual.cs

@@ -175,5 +175,51 @@ namespace MonoTests.System.Linq.Expressions
 			Assert.AreEqual ((bool?) null, neq (null, 0));
 			Assert.AreEqual ((bool?) null, neq (0, null));
 		}
+
+
+		public enum Foo {
+			Bar,
+			Baz,
+		}
+
+		[Test]
+		[Category ("NotWorking")]
+		public void EnumNotEqual ()
+		{
+			var l = Expression.Parameter (typeof (Foo), "l");
+			var r = Expression.Parameter (typeof (Foo), "r");
+
+			var node = Expression.NotEqual (l, r);
+			Assert.IsFalse (node.IsLifted);
+			Assert.IsFalse (node.IsLiftedToNull);
+			Assert.AreEqual (typeof (bool), node.Type);
+			Assert.IsNull (node.Method);
+
+			var neq = Expression.Lambda<Func<Foo, Foo, bool>> (node, l, r).Compile ();
+
+			Assert.AreEqual (false, neq (Foo.Bar, Foo.Bar));
+			Assert.AreEqual (true, neq (Foo.Bar, Foo.Baz));
+		}
+
+		[Test]
+		[Category ("NotWorking")]
+		public void LiftedEnumNotEqual ()
+		{
+			var l = Expression.Parameter (typeof (Foo?), "l");
+			var r = Expression.Parameter (typeof (Foo?), "r");
+
+			var node = Expression.NotEqual (l, r);
+			Assert.IsTrue (node.IsLifted);
+			Assert.IsFalse (node.IsLiftedToNull);
+			Assert.AreEqual (typeof (bool), node.Type);
+			Assert.IsNull (node.Method);
+
+			var neq = Expression.Lambda<Func<Foo?, Foo?, bool>> (node, l, r).Compile ();
+
+			Assert.AreEqual (false, neq (Foo.Bar, Foo.Bar));
+			Assert.AreEqual (true, neq (Foo.Bar, Foo.Baz));
+			Assert.AreEqual (true, neq (Foo.Bar, null));
+			Assert.AreEqual (false, neq (null, null));
+		}
 	}
 }