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) {
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 ParameterInfo[] pi = typeof (ParameterInfoTest).GetMethod ("marshalAsMethod").GetParameters ();
91 MarshalAsAttribute attr;
93 attr = (MarshalAsAttribute)(pi [0].GetCustomAttributes (true) [0]);
94 AssertEquals (UnmanagedType.Bool, attr.Value);
96 attr = (MarshalAsAttribute)(pi [1].GetCustomAttributes (true) [0]);
97 AssertEquals (UnmanagedType.LPArray, attr.Value);
98 AssertEquals (UnmanagedType.LPStr, attr.ArraySubType);
100 attr = (MarshalAsAttribute)(pi [2].GetCustomAttributes (true) [0]);
101 AssertEquals (UnmanagedType.CustomMarshaler, attr.Value);
102 AssertEquals ("5", attr.MarshalCookie);
103 AssertEquals (typeof (Marshal1), Type.GetType (attr.MarshalType));