2006-06-28 Zoltan Varga <vargaz@gmail.com>
authorZoltan Varga <vargaz@gmail.com>
Wed, 28 Jun 2006 17:09:54 +0000 (17:09 -0000)
committerZoltan Varga <vargaz@gmail.com>
Wed, 28 Jun 2006 17:09:54 +0000 (17:09 -0000)
* marshal2.cs: Add tests for ByValTStr + Unicode encoding.

svn path=/trunk/mono/; revision=62120

mono/tests/ChangeLog
mono/tests/marshal2.cs

index 269f9b54a79fa4d4d2e9874f4a42efbe623ed389..91ba0a83302d0670cab836f4756b73e0625dfc25 100644 (file)
@@ -1,3 +1,15 @@
+2006-06-28  Zoltan Varga  <vargaz@gmail.com>
+
+       * marshal2.cs: Add tests for ByValTStr + Unicode encoding.
+
+2006-06-15  Zoltan Varga  <vargaz@gmail.com>
+
+       * pinvoke-2.cs: Rename to pinvoke-2.2.cs.
+       
+       * Makefile.am (TEST_CS2_SRC): Add pinvoke-2.2.cs
+
+       * pinvoke-2.2.cs libtest.c: Add Marshal.GetDelegateForFunctionPointer () tests.
+       
 2006-06-22  Sebastien Pouliot  <sebastien@ximian.com>
 
        * Makefile.am: Add 'cas' to SUBDIRS
index ad3ab05cee6ad9b3467df25f0153cc4903190520..3e98a14a48780513be5c497917a81fd9add804d9 100644 (file)
@@ -36,12 +36,17 @@ public class Test {
                public double x;
                [MarshalAs (UnmanagedType.ByValArray, SizeConst=2)] public char[] a2;
        }
+
+       [StructLayout (LayoutKind.Sequential, CharSet=CharSet.Unicode)]
+       public struct ByValWStrStruct {
+               [MarshalAs (UnmanagedType.ByValTStr, SizeConst=4)] public string s1;
+               public int i;
+       }
        
        public unsafe static int Main () {
                SimpleStruct ss = new SimpleStruct ();
                int size = Marshal.SizeOf (typeof (SimpleStruct));
                
-               Console.WriteLine ("SimpleStruct:" + size);
                //if (size != 52)
                //return 1;
                
@@ -148,7 +153,32 @@ public class Test {
 
                if (cp.a2 [1] != 'b')
                        return 30;
-               
+
+               /* ByValTStr with Unicode */
+               ByValWStrStruct s = new ByValWStrStruct ();
+
+               IntPtr p2 = Marshal.AllocHGlobal (Marshal.SizeOf (typeof (ByValWStrStruct)));
+               Marshal.StructureToPtr(s, p2, false);
+
+               /* Check that the ByValWStr is initialized correctly */
+               for (int i = 0; i < 8; ++i)
+                       if (Marshal.ReadByte (p2, i) != 0)
+                               return 31;
+
+               s.s1 = "ABCD";
+               s.i = 55;
+
+               Marshal.StructureToPtr(s, p2, false);
+
+               ByValWStrStruct s2 = (ByValWStrStruct)Marshal.PtrToStructure (p2, typeof (ByValWStrStruct));
+
+               /* The fourth char is lost because of null-termination */
+               if (s2.s1 != "ABC")
+                       return 32;
+
+               if (s2.i != 55)
+                       return 33;
+
                return 0;
        }
 }