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
24 public class Marshal1 : ICustomMarshaler
26 public static ICustomMarshaler GetInstance (string s) {
27 return new Marshal1 ();
30 public void CleanUpManagedData (object managedObj)
34 public void CleanUpNativeData (IntPtr pNativeData)
38 public int GetNativeDataSize ()
43 public IntPtr MarshalManagedToNative (object managedObj)
48 public object MarshalNativeToManaged (IntPtr pNativeData)
55 public class ParameterInfoTest : Assertion
58 public enum ParamEnum {
64 public static void paramMethod (int i, [In] int j, [Out] int k, [Optional] int l, [In,Out] int m, [DefaultParameterValue (ParamEnum.Foo)] ParamEnum n) {
66 #if !TARGET_JVM // No support for extern methods in TARGET_JVM
68 public extern static void marshalAsMethod (
69 [MarshalAs(UnmanagedType.Bool)]int p0,
70 [MarshalAs(UnmanagedType.LPArray, ArraySubType=UnmanagedType.LPStr)] string [] p1,
71 [MarshalAs( UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof (Marshal1), MarshalCookie = "5")] object p2);
74 public void DefaultValueEnum () {
75 ParameterInfo[] info = typeof (ParameterInfoTest).GetMethod ("paramMethod").GetParameters ();
77 AssertEquals (typeof (ParamEnum), info [5].DefaultValue.GetType ());
78 AssertEquals (ParamEnum.Foo, info [5].DefaultValue);
82 public void PseudoCustomAttributes () {
83 ParameterInfo[] info = typeof (ParameterInfoTest).GetMethod ("paramMethod").GetParameters ();
84 AssertEquals (0, info[0].GetCustomAttributes (true).Length);
85 AssertEquals (1, info[1].GetCustomAttributes (typeof (InAttribute), true).Length);
86 AssertEquals (1, info[2].GetCustomAttributes (typeof (OutAttribute), true).Length);
87 AssertEquals (1, info[3].GetCustomAttributes (typeof (OptionalAttribute), true).Length);
88 AssertEquals (2, info[4].GetCustomAttributes (true).Length);
90 #if !TARGET_JVM // No support for extern methods in TARGET_JVM
91 ParameterInfo[] pi = typeof (ParameterInfoTest).GetMethod ("marshalAsMethod").GetParameters ();
92 MarshalAsAttribute attr;
94 attr = (MarshalAsAttribute)(pi [0].GetCustomAttributes (true) [0]);
95 AssertEquals (UnmanagedType.Bool, attr.Value);
97 attr = (MarshalAsAttribute)(pi [1].GetCustomAttributes (true) [0]);
98 AssertEquals (UnmanagedType.LPArray, attr.Value);
99 AssertEquals (UnmanagedType.LPStr, attr.ArraySubType);
101 attr = (MarshalAsAttribute)(pi [2].GetCustomAttributes (true) [0]);
102 AssertEquals (UnmanagedType.CustomMarshaler, attr.Value);
103 AssertEquals ("5", attr.MarshalCookie);
104 AssertEquals (typeof (Marshal1), Type.GetType (attr.MarshalType));