[Pkg-mono-svn-commits] [mono] 01/04: Add test from Jb Evain to test biner with user method types

Jo Shields directhex at moszumanska.debian.org
Wed Dec 4 00:47:09 UTC 2013


This is an automated email from the git hooks/post-receive script.

directhex pushed a commit to annotated tag debian/3.0.6+dfsg2-10
in repository mono.

commit 3fc971b0114a5e62b406dd1afb5d3c5c33151e69
Author: Marek Safar <marek.safar at gmail.com>
Date:   Wed Mar 6 10:23:47 2013 +0100

    Add test from Jb Evain to test biner with user method types
    
    (cherry picked from commit 80d342ff7555e95bfa3917543ce66910175cf61d)
---
 mcs/class/corlib/System.Reflection/MethodBase.cs   | 13 +++-
 .../corlib/Test/System.Reflection/BinderTests.cs   | 87 ++++++++++++++++++++++
 2 files changed, 98 insertions(+), 2 deletions(-)

diff --git a/mcs/class/corlib/System.Reflection/MethodBase.cs b/mcs/class/corlib/System.Reflection/MethodBase.cs
index 671f11d..dd57144 100644
--- a/mcs/class/corlib/System.Reflection/MethodBase.cs
+++ b/mcs/class/corlib/System.Reflection/MethodBase.cs
@@ -88,8 +88,17 @@ namespace System.Reflection {
 		// This is a quick version for our own use. We should override
 		// it where possible so that it does not allocate an array.
 		//
-		internal abstract ParameterInfo[] GetParametersInternal ();
-		internal abstract int GetParametersCount ();
+		internal virtual ParameterInfo[] GetParametersInternal ()
+		{
+			// Override me
+			return GetParameters ();
+		}
+
+		internal virtual int GetParametersCount ()
+		{
+			// Override me
+			return GetParametersInternal ().Length;
+		}
 
 		internal virtual Type GetParameterType (int pos) {
 			throw new NotImplementedException ();
diff --git a/mcs/class/corlib/Test/System.Reflection/BinderTests.cs b/mcs/class/corlib/Test/System.Reflection/BinderTests.cs
index 33aea7c..b055078 100644
--- a/mcs/class/corlib/Test/System.Reflection/BinderTests.cs
+++ b/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
 	{
@@ -1395,5 +1469,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);
+		}
 	}
 }

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-mono/packages/mono.git



More information about the Pkg-mono-svn-commits mailing list