Browse Source

Add test from Jb Evain to test biner with user method types

Marek Safar 13 years ago
parent
commit
80d342ff75

+ 4 - 2
mcs/class/corlib/System.Reflection/MethodBase.cs

@@ -94,12 +94,14 @@ namespace System.Reflection {
 		//
 		internal virtual ParameterInfo[] GetParametersInternal ()
 		{
-			throw new NotImplementedException ();
+			// Override me
+			return GetParameters ();
 		}
 
 		internal virtual int GetParametersCount ()
 		{
-			throw new NotImplementedException ();
+			// Override me
+			return GetParametersInternal ().Length;
 		}
 
 		internal virtual Type GetParameterType (int pos) {

+ 87 - 0
mcs/class/corlib/Test/System.Reflection/BinderTests.cs

@@ -101,6 +101,80 @@ namespace MonoTests.System.Reflection
 		}
 	}
 
+	class MethodInfoWrapper : MethodInfo
+	{
+		private readonly MethodInfo method;
+		
+		public MethodInfoWrapper (MethodInfo method)
+		{
+			this.method = method;
+		}
+		
+		public override object[] GetCustomAttributes (bool inherit)
+		{
+			return method.GetCustomAttributes (inherit);
+		}
+		
+		public override bool IsDefined (Type attributeType, bool inherit)
+		{
+			return method.IsDefined (attributeType, inherit);
+		}
+		
+		public override ParameterInfo[] GetParameters ()
+		{
+			return method.GetParameters ();
+		}
+		
+		public override MethodImplAttributes GetMethodImplementationFlags ()
+		{
+			return method.GetMethodImplementationFlags ();
+		}
+		
+		public override object Invoke (object obj, BindingFlags invokeAttr, Binder binder, object[] parameters, CultureInfo culture)
+		{
+			return method.Invoke (obj, invokeAttr, binder, parameters, culture);
+		}
+		
+		public override MethodInfo GetBaseDefinition ()
+		{
+			return method.GetBaseDefinition ();
+		}
+		
+		public override ICustomAttributeProvider ReturnTypeCustomAttributes {
+			get { return method.ReturnTypeCustomAttributes; }
+		}
+		
+		public override string Name {
+			get { return method.Name; }
+		}
+		
+		public override Type ReturnType {
+			get { return method.ReturnType; }
+		}
+		
+		public override Type DeclaringType {
+			get { return method.DeclaringType; }
+		}
+		
+		public override Type ReflectedType {
+			get { return method.ReflectedType; }
+		}
+		
+		public override RuntimeMethodHandle MethodHandle {
+			get { return method.MethodHandle; }
+		}
+		
+		public override MethodAttributes Attributes {
+			get { return method.Attributes; }
+		}
+		
+		public override object[] GetCustomAttributes (Type attributeType, bool inherit)
+		{
+			return method.GetCustomAttributes (attributeType, inherit);
+		}
+	}
+
+
 	[TestFixture]
 	public class BinderTest
 	{
@@ -1402,5 +1476,18 @@ namespace MonoTests.System.Reflection
 				null, // target
 				new object [] { CultureInfo.CurrentCulture, "foo{0}{1}", "bar", "baz" }));
 		}
+
+		public static void CustomMethodType_Helper ()
+		{
+		}
+
+		[Test]
+		public void CustomMethodType ()
+		{
+			var method = new MethodInfoWrapper (GetType ().GetMethod ("CustomMethodType_Helper"));
+
+			var res = Type.DefaultBinder.SelectMethod (BindingFlags.Static | BindingFlags.Public, new[] { method }, Type.EmptyTypes, new ParameterModifier[0]);
+			Assert.AreSame (method, res);
+		}
 	}
 }