ParameterInfoTest.cs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. //
  2. // ParameterInfoTest - NUnit Test Cases for the ParameterInfo class
  3. //
  4. // Zoltan Varga ([email protected])
  5. //
  6. // (C) Ximian, Inc. http://www.ximian.com
  7. //
  8. //
  9. using System;
  10. using System.Threading;
  11. using System.Reflection;
  12. using System.Reflection.Emit;
  13. using System.Runtime.InteropServices;
  14. using NUnit.Framework;
  15. namespace MonoTests.System.Reflection
  16. {
  17. public class Marshal1 : ICustomMarshaler
  18. {
  19. public static ICustomMarshaler GetInstance (string s) {
  20. return new Marshal1 ();
  21. }
  22. public void CleanUpManagedData (object managedObj)
  23. {
  24. }
  25. public void CleanUpNativeData (IntPtr pNativeData)
  26. {
  27. }
  28. public int GetNativeDataSize ()
  29. {
  30. return 4;
  31. }
  32. public IntPtr MarshalManagedToNative (object managedObj)
  33. {
  34. return IntPtr.Zero;
  35. }
  36. public object MarshalNativeToManaged (IntPtr pNativeData)
  37. {
  38. return null;
  39. }
  40. }
  41. [TestFixture]
  42. public class ParameterInfoTest : Assertion
  43. {
  44. #if NET_2_0
  45. public enum ParamEnum {
  46. None = 0,
  47. Foo = 1,
  48. Bar = 2
  49. };
  50. public static void paramMethod (int i, [In] int j, [Out] int k, [Optional] int l, [In,Out] int m, [DefaultParameterValue (ParamEnum.Foo)] ParamEnum n) {
  51. }
  52. #if !TARGET_JVM
  53. [DllImport ("foo")]
  54. public extern static void marshalAsMethod (
  55. [MarshalAs(UnmanagedType.Bool)]int p0,
  56. [MarshalAs(UnmanagedType.LPArray, ArraySubType=UnmanagedType.LPStr)] string [] p1,
  57. [MarshalAs( UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof (Marshal1), MarshalCookie = "5")] object p2);
  58. #endif
  59. [Test]
  60. public void DefaultValueEnum () {
  61. ParameterInfo[] info = typeof (ParameterInfoTest).GetMethod ("paramMethod").GetParameters ();
  62. AssertEquals (typeof (ParamEnum), info [5].DefaultValue.GetType ());
  63. AssertEquals (ParamEnum.Foo, info [5].DefaultValue);
  64. }
  65. [Test]
  66. public void PseudoCustomAttributes () {
  67. ParameterInfo[] info = typeof (ParameterInfoTest).GetMethod ("paramMethod").GetParameters ();
  68. AssertEquals (0, info[0].GetCustomAttributes (true).Length);
  69. AssertEquals (1, info[1].GetCustomAttributes (typeof (InAttribute), true).Length);
  70. AssertEquals (1, info[2].GetCustomAttributes (typeof (OutAttribute), true).Length);
  71. AssertEquals (1, info[3].GetCustomAttributes (typeof (OptionalAttribute), true).Length);
  72. AssertEquals (2, info[4].GetCustomAttributes (true).Length);
  73. ParameterInfo[] pi = typeof (ParameterInfoTest).GetMethod ("marshalAsMethod").GetParameters ();
  74. MarshalAsAttribute attr;
  75. attr = (MarshalAsAttribute)(pi [0].GetCustomAttributes (true) [0]);
  76. AssertEquals (UnmanagedType.Bool, attr.Value);
  77. attr = (MarshalAsAttribute)(pi [1].GetCustomAttributes (true) [0]);
  78. AssertEquals (UnmanagedType.LPArray, attr.Value);
  79. AssertEquals (UnmanagedType.LPStr, attr.ArraySubType);
  80. attr = (MarshalAsAttribute)(pi [2].GetCustomAttributes (true) [0]);
  81. AssertEquals (UnmanagedType.CustomMarshaler, attr.Value);
  82. AssertEquals ("5", attr.MarshalCookie);
  83. AssertEquals (typeof (Marshal1), Type.GetType (attr.MarshalType));
  84. }
  85. #endif
  86. }
  87. }