2009-12-17 Rodrigo Kumpera <rkumpera@novell.com>
authorRodrigo Kumpera <kumpera@gmail.com>
Thu, 17 Dec 2009 12:10:47 +0000 (12:10 -0000)
committerRodrigo Kumpera <kumpera@gmail.com>
Thu, 17 Dec 2009 12:10:47 +0000 (12:10 -0000)
* TypeTest.cs: Add tests for #564379.

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

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

index da6137597ab71196a386dabd70f44b101db24c2c..a0ce72fb82b3a60448809bc85a1311a6575f328d 100644 (file)
@@ -1,3 +1,7 @@
+2009-12-17 Rodrigo Kumpera  <rkumpera@novell.com>
+
+       * TypeTest.cs: Add tests for #564379.
+
 2009-12-14 Rodrigo Kumpera  <rkumpera@novell.com>
 
        * TypeTest.cs: Fix test that checked for old and wrong behavior of mono.
index 87edb7ccf8ce1596c9a34bacc8c6c5dc6d9979cb..12d86043631f3269906cff44d42e82d5121f8bed 100644 (file)
@@ -3166,6 +3166,51 @@ PublicKeyToken=b77a5c561934e089"));
                        } catch (ArgumentException) {}
                }
 
+               [Test] //Bug #564379
+               public void GetMethodsReturnPublicMethodsInInterfaces ()
+               {
+                       Type t = typeof (NonClosingStream);
+                       MethodInfo[] methods = t.GetMethods (BindingFlags.Public | BindingFlags.Instance);
+
+                       Assert.AreEqual (5, methods.Length, "#1");
+                       int id = 2;
+
+                       foreach (var m in methods) {
+                               if (m.Name.Equals ("ToString"))
+                                       Assert.IsTrue (m.DeclaringType == typeof (NonClosingStream), "#" + id);
+                               else if (m.Name.Equals ("Dispose") && m.GetParameters ().Length == 0)
+                                       Assert.IsTrue (m.DeclaringType == typeof (Stream), "#" + id);
+                               else if (m.Name.Equals ("Equals") || m.Name.Equals ("GetHashCode") || m.Name.Equals ("GetType"))
+                                       Assert.IsTrue (m.DeclaringType == typeof (object), "#" + id);
+                               else
+                                       Assert.Fail ("invalid method " + m);
+                               ++id;
+                       }
+               }
+
+               public abstract class Stream : IDisposable
+               {
+                       public void Dispose ()
+                       {
+                               Console.WriteLine ("stream::dispose");
+                       }
+
+                       protected virtual void Dispose (bool disposing)
+                       {
+                       }
+               }
+
+               public class NonClosingStream 
+                       : Stream, IDisposable
+               {
+                       void  IDisposable.Dispose()
+                       {
+                               Console.WriteLine ("ncs::dispose");
+                       }
+
+                       public override string ToString () { return ""; }
+               }
+
                static bool ContainsProperty (PropertyInfo [] props, string name)
                {
                        foreach (PropertyInfo p in props)