2009-03-25 Jb Evain <jbevain@novell.com>
authorJb Evain <jbevain@gmail.com>
Tue, 24 Mar 2009 23:37:53 +0000 (23:37 -0000)
committerJb Evain <jbevain@gmail.com>
Tue, 24 Mar 2009 23:37:53 +0000 (23:37 -0000)
* DelegateTest.cs: add CreateDelegate tests for valuetype -> object
conversion for arguments and return types.

svn path=/trunk/mcs/; revision=130176

mcs/class/corlib/Test/System/ChangeLog
mcs/class/corlib/Test/System/DelegateTest.cs

index a213e9c3b3d5820044955ae3bd0e83ad3f7e99bb..5f5770bc0624c007874c4f29079ea47baafcf536 100644 (file)
@@ -1,3 +1,8 @@
+2009-03-25  Jb Evain  <jbevain@novell.com>
+
+       * DelegateTest.cs: add CreateDelegate tests for valuetype -> object
+       conversion for arguments and return types.
+
 2009-03-23  Zoltan Varga  <vargaz@gmail.com>
 
        * StringTest.cs (LastIndexOfStringComparison): Add a test for #486234.
index c55e74c3761c109f40b0c33292935102501b1d50..2e96a5a6e57f2c65ae59e6d68ae6543c62751ef3 100644 (file)
@@ -851,6 +851,57 @@ namespace MonoTests.System
                        d (null);
                }
 
+               static object Box (object o)
+               {
+                       return o;
+               }
+
+               delegate object Boxer ();
+
+               [Test]
+               public void BoxingCovariance ()
+               {
+                       var boxer = (Boxer) Delegate.CreateDelegate (
+                               typeof (Boxer),
+                               42,
+                               GetType ().GetMethod ("Box", BindingFlags.NonPublic | BindingFlags.Static));
+
+                       Assert.IsNotNull (boxer);
+                       Assert.AreEqual (42, boxer ());
+               }
+
+               static object Nada (int o)
+               {
+                       return (int) o;
+               }
+
+               delegate int WrongDelegate ();
+
+               [Test]
+               [ExpectedException (typeof (ArgumentException))]
+               public void WrongReturnTypeContravariance ()
+               {
+                       Delegate.CreateDelegate (
+                               typeof (WrongDelegate),
+                               42,
+                               GetType ().GetMethod ("Nada", BindingFlags.NonPublic | BindingFlags.Static));
+               }
+
+               static int Identity (int i)
+               {
+                       return i;
+               }
+
+               [Test]
+               [ExpectedException (typeof (ArgumentException))]
+               public void WrongReturnTypeContravariance_2 ()
+               {
+                       Delegate.CreateDelegate (
+                               typeof (Boxer),
+                               42,
+                               GetType ().GetMethod ("Identity", BindingFlags.NonPublic | BindingFlags.Static));
+               }
+
                [Test]
                public void Virtual ()
                {