2 // ParameterInfoTest - NUnit Test Cases for the ParameterInfo class
4 // Zoltan Varga (vargaz@freemail.hu)
6 // (C) Ximian, Inc. http://www.ximian.com
11 using System
.Threading
;
12 using System
.Reflection
;
14 using System
.Reflection
.Emit
;
16 using System
.Runtime
.InteropServices
;
18 using NUnit
.Framework
;
20 namespace MonoTests
.System
.Reflection
22 public class Marshal1
: ICustomMarshaler
24 public static ICustomMarshaler
GetInstance (string s
)
26 return new Marshal1 ();
29 public void CleanUpManagedData (object managedObj
)
33 public void CleanUpNativeData (IntPtr pNativeData
)
37 public int GetNativeDataSize ()
42 public IntPtr
MarshalManagedToNative (object managedObj
)
47 public object MarshalNativeToManaged (IntPtr pNativeData
)
54 public class ParameterInfoTest
57 public void IsDefined_AttributeType_Null ()
59 MethodInfo mi
= typeof (object).GetMethod ("Equals",
60 new Type
[1] { typeof (object) }
);
61 ParameterInfo pi
= mi
.GetParameters () [0];
64 pi
.IsDefined ((Type
) null, false);
66 } catch (ArgumentNullException ex
) {
67 Assert
.AreEqual (typeof (ArgumentNullException
), ex
.GetType (), "#2");
68 Assert
.IsNull (ex
.InnerException
, "#3");
69 Assert
.IsNotNull (ex
.Message
, "#4");
70 Assert
.IsNotNull (ex
.ParamName
, "#5");
71 Assert
.AreEqual ("attributeType", ex
.ParamName
, "#6");
76 public enum ParamEnum
{
82 public static void paramMethod (int i
, [In
] int j
, [Out
] int k
, [Optional
] int l
, [In
,Out
] int m
, [DefaultParameterValue (ParamEnum
.Foo
)] ParamEnum n
)
86 #if !TARGET_JVM // No support for extern methods in TARGET_JVM
88 public extern static void marshalAsMethod (
89 [MarshalAs(UnmanagedType
.Bool
)]int p0
,
90 [MarshalAs(UnmanagedType
.LPArray
, ArraySubType
=UnmanagedType
.LPStr
)] string [] p1
,
91 [MarshalAs( UnmanagedType
.CustomMarshaler
, MarshalTypeRef
= typeof (Marshal1
), MarshalCookie
= "5")] object p2
);
94 public void DefaultValueEnum () {
95 ParameterInfo
[] info
= typeof (ParameterInfoTest
).GetMethod ("paramMethod").GetParameters ();
97 Assert
.AreEqual (typeof (ParamEnum
), info
[5].DefaultValue
.GetType (), "#1");
98 Assert
.AreEqual (ParamEnum
.Foo
, info
[5].DefaultValue
, "#2");
101 [Test
] // bug #339013
102 public void TestDefaultValues ()
104 ParameterInfo
[] pi
= typeof (ParameterInfoTest
).GetMethod ("Sample").GetParameters ();
106 Assert
.AreEqual (pi
[0].DefaultValue
.GetType (), typeof (DBNull
), "#1");
107 Assert
.AreEqual (pi
[1].DefaultValue
.GetType (), typeof (Missing
), "#2");
110 public void Sample (int a
, [Optional
] int b
)
115 public void PseudoCustomAttributes () {
116 ParameterInfo
[] info
= typeof (ParameterInfoTest
).GetMethod ("paramMethod").GetParameters ();
117 Assert
.AreEqual (0, info
[0].GetCustomAttributes (true).Length
, "#A1");
118 Assert
.AreEqual (1, info
[1].GetCustomAttributes (typeof (InAttribute
), true).Length
, "#A2");
119 Assert
.AreEqual (1, info
[2].GetCustomAttributes (typeof (OutAttribute
), true).Length
, "#A3");
120 Assert
.AreEqual (1, info
[3].GetCustomAttributes (typeof (OptionalAttribute
), true).Length
, "#A4");
121 Assert
.AreEqual (2, info
[4].GetCustomAttributes (true).Length
, "#A5");
123 #if !TARGET_JVM // No support for extern methods in TARGET_JVM
124 ParameterInfo
[] pi
= typeof (ParameterInfoTest
).GetMethod ("marshalAsMethod").GetParameters ();
125 MarshalAsAttribute attr
;
127 attr
= (MarshalAsAttribute
)(pi
[0].GetCustomAttributes (true) [0]);
128 Assert
.AreEqual (UnmanagedType
.Bool
, attr
.Value
, "#B");
130 attr
= (MarshalAsAttribute
)(pi
[1].GetCustomAttributes (true) [0]);
131 Assert
.AreEqual (UnmanagedType
.LPArray
, attr
.Value
, "#C1");
132 Assert
.AreEqual (UnmanagedType
.LPStr
, attr
.ArraySubType
, "#C2");
134 attr
= (MarshalAsAttribute
)(pi
[2].GetCustomAttributes (true) [0]);
135 Assert
.AreEqual (UnmanagedType
.CustomMarshaler
, attr
.Value
, "#D1");
136 Assert
.AreEqual ("5", attr
.MarshalCookie
, "#D2");
137 Assert
.AreEqual (typeof (Marshal1
), Type
.GetType (attr
.MarshalType
), "#D3");
141 [Test
] // bug #342536
142 public void Generics_Name ()
146 ParameterInfo
[] info
;
148 type
= typeof (BaseType
<string>);
150 mi
= type
.GetMethod ("GetItems");
151 Assert
.IsNotNull (mi
, "#A1");
152 info
= mi
.GetParameters ();
153 Assert
.AreEqual (1, info
.Length
, "#A2");
154 Assert
.AreEqual ("count", info
[0].Name
, "#A3");
156 mi
= type
.GetMethod ("Add");
157 Assert
.IsNotNull (mi
, "#B1");
158 info
= mi
.GetParameters ();
159 Assert
.AreEqual (2, info
.Length
, "#B2");
160 Assert
.AreEqual ("item", info
[0].Name
, "#B3");
161 Assert
.AreEqual ("index", info
[1].Name
, "#B4");
163 mi
= type
.GetMethod ("Create");
164 Assert
.IsNotNull (mi
, "#C1");
165 info
= mi
.GetParameters ();
166 Assert
.AreEqual (2, info
.Length
, "#C2");
167 Assert
.AreEqual ("x", info
[0].Name
, "#C3");
168 Assert
.AreEqual ("item", info
[1].Name
, "#C4");
171 public class BaseType
<T
>
173 public void GetItems (int count
)
177 public void Add (T item
, int index
)
181 public V Create
<V
> (int x
, T item
)
189 public void Member () {
190 ParameterInfo parm
= typeof (Derived
).GetMethod ("SomeMethod").GetParameters()[0];
191 Assert
.AreEqual (typeof (Derived
), parm
.Member
.ReflectedType
);
192 Assert
.AreEqual (typeof (Base
), parm
.Member
.DeclaringType
);
197 public void SomeMethod( int x
)