Merge pull request #819 from brendanzagaeski/patch-1
[mono.git] / mcs / class / System.Core / Test / System.Linq.Expressions / ExpressionTest_Equal.cs
index 72a2871593a586d5daf38cd9e32c94ed7b710b2c..497955c4a4e2873a32175a4371fd195698cc11fa 100644 (file)
@@ -76,7 +76,21 @@ namespace MonoTests.System.Linq.Expressions
                        Assert.AreEqual (ExpressionType.Equal, expr.NodeType);
                        Assert.AreEqual (typeof (bool), expr.Type);
                        Assert.IsNull (expr.Method);
+#if !NET_4_0
                        Assert.AreEqual ("(1 = 2)", expr.ToString ());
+#endif
+               }
+
+               [Test]
+               public void PrimitiveNonNumeric ()
+               {
+                       BinaryExpression expr = Expression.Equal (Expression.Constant ('a'), Expression.Constant ('b'));
+                       Assert.AreEqual (ExpressionType.Equal, expr.NodeType);
+                       Assert.AreEqual (typeof (bool), expr.Type);
+                       Assert.IsNull (expr.Method);
+
+                       var eq = Expression.Lambda<Func<bool>> (expr).Compile ();
+                       Assert.IsFalse (eq ());
                }
 
                [Test]
@@ -93,7 +107,9 @@ namespace MonoTests.System.Linq.Expressions
                        Assert.AreEqual (true, expr.IsLifted);
                        Assert.AreEqual (false, expr.IsLiftedToNull);
                        Assert.IsNull (expr.Method);
+#if !NET_4_0
                        Assert.AreEqual ("(1 = 2)", expr.ToString ());
+#endif
                }
 
                [Test]
@@ -110,7 +126,9 @@ namespace MonoTests.System.Linq.Expressions
                        Assert.AreEqual (true, expr.IsLifted);
                        Assert.AreEqual (true, expr.IsLiftedToNull);
                        Assert.IsNull (expr.Method);
+#if !NET_4_0
                        Assert.AreEqual ("(1 = 2)", expr.ToString ());
+#endif
                }
 
                [Test]
@@ -136,8 +154,9 @@ namespace MonoTests.System.Linq.Expressions
                        Assert.AreEqual (typeof (bool), expr.Type);
                        Assert.AreEqual (mi, expr.Method);
                        Assert.AreEqual ("op_Equality", expr.Method.Name);
-
+#if !NET_4_0
                        Assert.AreEqual ("(value(MonoTests.System.Linq.Expressions.OpClass) = value(MonoTests.System.Linq.Expressions.OpClass))", expr.ToString ());
+#endif
                }
 
                [Test]
@@ -229,6 +248,7 @@ namespace MonoTests.System.Linq.Expressions
                }
 
                [Test]
+               [Category ("NotWorkingInterpreter")]
                public void UserDefinedEqualLifted ()
                {
                        var l = Expression.Parameter (typeof (Slot?), "l");
@@ -250,6 +270,7 @@ namespace MonoTests.System.Linq.Expressions
                }
 
                [Test]
+               [Category ("NotWorkingInterpreter")]
                public void UserDefinedEqualLiftedToNull ()
                {
                        var l = Expression.Parameter (typeof (Slot?), "l");
@@ -415,7 +436,6 @@ namespace MonoTests.System.Linq.Expressions
                }
 
                [Test]
-               [Category ("NotWorking")]
                public void EnumEqual ()
                {
                        var l = Expression.Parameter (typeof (Foo), "l");
@@ -434,7 +454,6 @@ namespace MonoTests.System.Linq.Expressions
                }
 
                [Test]
-               [Category ("NotWorking")]
                public void LiftedEnumEqual ()
                {
                        var l = Expression.Parameter (typeof (Foo?), "l");
@@ -453,5 +472,24 @@ namespace MonoTests.System.Linq.Expressions
                        Assert.AreEqual (false, eq (Foo.Bar, null));
                        Assert.AreEqual (true, eq (null, null));
                }
+
+               [Test]
+               [Category ("NotWorkingInterpreter")]
+               public void NullableNullEqual ()
+               {
+                       var param = Expression.Parameter (typeof (DateTime?), "x");
+
+                       var node = Expression.Equal (param, Expression.Constant (null));
+
+                       Assert.IsTrue (node.IsLifted);
+                       Assert.IsFalse (node.IsLiftedToNull);
+                       Assert.AreEqual (typeof (bool), node.Type);
+                       Assert.IsNull (node.Method);
+
+                       var eq = Expression.Lambda<Func<DateTime?, bool>> (node, new [] { param }).Compile ();
+
+                       Assert.AreEqual (true, eq (null));
+                       Assert.AreEqual (false, eq (DateTime.Now));
+               }
        }
 }