X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Ftests%2Fmarshal9.cs;h=7a22bbf40454bbc4a329358604d2f354b0307dd4;hb=237e1dd0ae6d8a49c7b41529025a2bf549659504;hp=99f19b23d2f0db8e912d1f0637437dc07d5ffcc1;hpb=5bbfa8860b090e465a3aa45edeb9c94481ef1a22;p=mono.git diff --git a/mono/tests/marshal9.cs b/mono/tests/marshal9.cs index 99f19b23d2f..7a22bbf4045 100644 --- a/mono/tests/marshal9.cs +++ b/mono/tests/marshal9.cs @@ -78,6 +78,7 @@ public class Tests { public static int Main (string[] args) { return TestDriver.RunTests (typeof (Tests)); + return 0; } [DllImport ("libtest")] @@ -90,6 +91,7 @@ public class Tests Marshal1.cleanup_managed_count = 0; Marshal1.cleanup_native_count = 0; + Marshal1.native_to_managed_count = 0; int res = (int)mono_test_marshal_pass_return_custom (5, 10, 5); @@ -97,6 +99,8 @@ public class Tests return 1; if (Marshal1.cleanup_native_count != 2) return 2; + if (Marshal1.native_to_managed_count != 1) + return 3; return res == 15 ? 0 : 3; } @@ -371,4 +375,66 @@ public class Tests return 1; } + public class Marshal6 : ICustomMarshaler { + public static int managed_to_native_count = 0; + public static int native_to_managed_count = 0; + + public static ICustomMarshaler GetInstance (string s) + { + return new Marshal6 (); + } + + public void CleanUpManagedData (object managedObj) + { + } + + public void CleanUpNativeData (IntPtr pNativeData) + { + } + + public int GetNativeDataSize () + { + return 4; + } + + public IntPtr MarshalManagedToNative (object managedObj) + { + managed_to_native_count++; + return IntPtr.Zero; + } + + public object MarshalNativeToManaged (IntPtr pNativeData) + { + native_to_managed_count++; + return null; + } + } + + public delegate void custom_out_param_delegate ([MarshalAs (UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof (Marshal6), MarshalCookie = "5")] out object o); + + [DllImport ("libtest")] + private static extern int mono_test_marshal_custom_out_param_delegate (custom_out_param_delegate del); + + // ICustomMarshaler.MarshalNativeToManaged should not be called when the + // parameter is marked as an out. + public static int test_0_native_to_managed_custom_parameter () + { + Marshal6.managed_to_native_count = 0; + Marshal6.native_to_managed_count = 0; + + int res = mono_test_marshal_custom_out_param_delegate (new custom_out_param_delegate (custom_out_param)); + + if (Marshal6.managed_to_native_count != 1) + return 1; + if (Marshal6.native_to_managed_count != 0) + return 2; + + return 0; + } + + private static void custom_out_param (out object i) + { + i = new object(); + } + }