From: Tijoy Tom Kalathiparambil Date: Tue, 22 Mar 2016 22:28:51 +0000 (-0700) Subject: Marshal specific tests. X-Git-Tag: accepted/tizen/base/20180629.140029~5211^2~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8ba68c678cd2ded73716fdad4697dda599bdd0fd;p=platform%2Fupstream%2Fcoreclr.git Marshal specific tests. Updating to rc2 framework refrence Adding more tests --- diff --git a/tests/src/Interop/MarshalAPI/Copy/CopyByteArray.cs b/tests/src/Interop/MarshalAPI/Copy/CopyByteArray.cs new file mode 100644 index 0000000..ea79b7b --- /dev/null +++ b/tests/src/Interop/MarshalAPI/Copy/CopyByteArray.cs @@ -0,0 +1,213 @@ +using System; +using System.IO; +using System.Reflection; +using System.Security; +using System.Runtime.InteropServices; +using System.Runtime.InteropServices.ComTypes; +using CoreFXTestLibrary; + + +public class CopyByteArrayTest +{ + private byte[] TestArray = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; + + private bool IsArrayEqual(byte[] array1, byte[] array2) + { + if (array1.Length != array2.Length) + { + + return false; + } + + for (int i = 0; i < array1.Length; i++) + if (!array1[i].Equals(array2[i])) + { + + return false; + } + + return true; + } + + private bool IsSubArrayEqual(byte[] array1, byte[] array2, int startIndex, int Length) + { + if (startIndex + Length > array1.Length) + { + + return false; + } + + if (startIndex + Length > array2.Length) + { + + return false; + } + + for (int i = 0; i < Length; i++) + if (!array1[startIndex + i].Equals(array2[startIndex + i])) + { + + return false; + } + + return true; + } + + private void NullValueTests() + { + byte[] array = null; + + try + { + Marshal.Copy(array, 0, IntPtr.Zero, 0); + + Assert.ErrorWriteLine("Failed null values test."); + Assert.ErrorWriteLine("No exception from Copy when passed null as parameter."); + } + catch (ArgumentNullException) + { + + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed null values test."); + } + + try + { + Marshal.Copy(IntPtr.Zero, array, 0, 0); + + Assert.ErrorWriteLine("Failed null values test."); + Assert.ErrorWriteLine("No exception from Copy when passed null as parameter."); + } + catch (ArgumentNullException) + { + + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed null values test."); + } + } + + private void OutOfRangeTests() + { + int sizeOfArray = Marshal.SizeOf(TestArray[0]) * TestArray.Length; + + IntPtr ptr = Marshal.AllocCoTaskMem(sizeOfArray); + + try //try to copy more elements than the TestArray has + { + Marshal.Copy(TestArray, 0, ptr, TestArray.Length + 1); + + Assert.ErrorWriteLine("Failed out of range values test."); + Assert.ErrorWriteLine("No exception from Copy when trying to copy more elements than the TestArray has."); + } + catch (ArgumentOutOfRangeException) + { + + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed out of range values test."); + } + + try //try to copy from an out of bound startIndex + { + Marshal.Copy(TestArray, TestArray.Length + 1, ptr, 1); + + Assert.ErrorWriteLine("Failed out of range values test."); + Assert.ErrorWriteLine("No exception from Copy when trying to copy from an out of bound startIndex."); + } + catch (ArgumentOutOfRangeException) + { + + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed out of range values test."); + } + + try //try to copy from a positive startIndex, with length taking it out of bounds + { + Marshal.Copy(TestArray, 2, ptr, TestArray.Length); + + Assert.ErrorWriteLine("Failed out of range values test."); + Assert.ErrorWriteLine("No exception from Copy when trying to copy from a positive startIndex, with length taking it out of bounds."); + } + catch (ArgumentOutOfRangeException) + { + + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed out of range values test."); + } + + Marshal.FreeCoTaskMem(ptr); + } + + private void CopyRoundTripTests() + { + int sizeOfArray = Marshal.SizeOf(TestArray[0]) * TestArray.Length; + + IntPtr ptr = Marshal.AllocCoTaskMem(sizeOfArray); + + try //try to copy the entire array + { + Marshal.Copy(TestArray, 0, ptr, TestArray.Length); + + byte[] array = new byte[TestArray.Length]; + + Marshal.Copy(ptr, array, 0, TestArray.Length); + + if (!IsArrayEqual(TestArray, array)) + { + Assert.ErrorWriteLine("Failed copy round trip test"); + Assert.ErrorWriteLine("Original array and round trip copied arrays do not match."); + } + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed copy round trip test."); + } + + try //try to copy part of the array + { + Marshal.Copy(TestArray, 2, ptr, TestArray.Length - 4); + + byte[] array = new byte[TestArray.Length]; + + Marshal.Copy(ptr, array, 2, TestArray.Length - 4); + + if (!IsSubArrayEqual(TestArray, array, 2, TestArray.Length - 4)) + { + Assert.ErrorWriteLine("Failed copy round trip test"); + Assert.ErrorWriteLine("Original array and round trip partially copied arrays do not match."); + } + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed copy round trip test."); + } + + Marshal.FreeCoTaskMem(ptr); + } + + public bool RunTests() + { + NullValueTests(); + OutOfRangeTests(); + CopyRoundTripTests(); + return true; + } + + public static int Main(String[] unusedArgs) + { + if (new CopyByteArrayTest().RunTests()) + return 100; + + return 99; + } + +} diff --git a/tests/src/Interop/MarshalAPI/Copy/CopyByteArray.csproj b/tests/src/Interop/MarshalAPI/Copy/CopyByteArray.csproj new file mode 100644 index 0000000..3ffd008 --- /dev/null +++ b/tests/src/Interop/MarshalAPI/Copy/CopyByteArray.csproj @@ -0,0 +1,47 @@ + + + + + Debug + AnyCPU + CopyByteArray + 2.0 + {F1E66554-8C8E-4141-85CF-D0CD6A0CD0B0} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages + ..\..\ + + 7a9bfb7d + $(DefineConstants);STATIC + + + + + + + + + False + + + + + + + + + + + + + + + {c8c0dc74-fac4-45b1-81fe-70c4808366e0} + CoreCLRTestLibrary + + + + diff --git a/tests/src/Interop/MarshalAPI/Copy/CopyCharArray.cs b/tests/src/Interop/MarshalAPI/Copy/CopyCharArray.cs new file mode 100644 index 0000000..05b2d29 --- /dev/null +++ b/tests/src/Interop/MarshalAPI/Copy/CopyCharArray.cs @@ -0,0 +1,200 @@ +using System; +using System.IO; +using System.Reflection; +using System.Security; +using System.Runtime.InteropServices; +using System.Runtime.InteropServices.ComTypes; +using CoreFXTestLibrary; + + +public class CopyCharArrayTest +{ + private char[] TestArray = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j' }; + + private bool IsArrayEqual(char[] array1, char[] array2) + { + if (array1.Length != array2.Length) + { + return false; + } + + for (int i = 0; i < array1.Length; i++) + if (!array1[i].Equals(array2[i])) + { + return false; + } + + return true; + } + + private bool IsSubArrayEqual(char[] array1, char[] array2, int startIndex, int Length) + { + if (startIndex + Length > array1.Length) + { + return false; + } + + if (startIndex + Length > array2.Length) + { + + return false; + } + + for (int i = 0; i < Length; i++) + if (!array1[startIndex + i].Equals(array2[startIndex + i])) + { + return false; + } + + return true; + } + + private void NullValueTests() + { + char[] array = null; + + try + { + Marshal.Copy(array, 0, IntPtr.Zero, 0); + throw new Exception("No exception from Copy when passed null as parameter."); + } + catch (ArgumentNullException) + { + } + + + try + { + Marshal.Copy(IntPtr.Zero, array, 0, 0); + + Assert.ErrorWriteLine("Failed null values test."); + Assert.ErrorWriteLine("No exception from Copy when passed null as parameter."); + } + catch (ArgumentNullException) + { + + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed null values test."); + } + } + + private void OutOfRangeTests() + { + int sizeOfArray = Marshal.SizeOf(TestArray[0]) * TestArray.Length; + + IntPtr ptr = Marshal.AllocCoTaskMem(sizeOfArray); + + try //try to copy more elements than the TestArray has + { + Marshal.Copy(TestArray, 0, ptr, TestArray.Length + 1); + + Assert.ErrorWriteLine("Failed out of range values test."); + Assert.ErrorWriteLine("No exception from Copy when trying to copy more elements than the TestArray has."); + } + catch (ArgumentOutOfRangeException) + { + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed out of range values test."); + } + + try //try to copy from an out of bound startIndex + { + Marshal.Copy(TestArray, TestArray.Length + 1, ptr, 1); + + Assert.ErrorWriteLine("Failed out of range values test."); + Assert.ErrorWriteLine("No exception from Copy when trying to copy from an out of bound startIndex."); + } + catch (ArgumentOutOfRangeException) + { + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed out of range values test."); + } + + try //try to copy from a positive startIndex, with length taking it out of bounds + { + Marshal.Copy(TestArray, 2, ptr, TestArray.Length); + + Assert.ErrorWriteLine("Failed out of range values test."); + Assert.ErrorWriteLine("No exception from Copy when trying to copy from a positive startIndex, with length taking it out of bounds."); + } + catch (ArgumentOutOfRangeException) + { + + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed out of range values test."); + } + + Marshal.FreeCoTaskMem(ptr); + } + + private void CopyRoundTripTests() + { + int sizeOfArray = Marshal.SizeOf(TestArray[0]) * TestArray.Length; + + IntPtr ptr = Marshal.AllocCoTaskMem(sizeOfArray); + + try //try to copy the entire array + { + Marshal.Copy(TestArray, 0, ptr, TestArray.Length); + + char[] array = new char[TestArray.Length]; + + Marshal.Copy(ptr, array, 0, TestArray.Length); + + if (!IsArrayEqual(TestArray, array)) + { + Assert.ErrorWriteLine("Failed copy round trip test"); + Assert.ErrorWriteLine("Original array and round trip copied arrays do not match."); + } + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed copy round trip test."); + } + + try //try to copy part of the array + { + Marshal.Copy(TestArray, 2, ptr, TestArray.Length - 4); + + char[] array = new char[TestArray.Length]; + + Marshal.Copy(ptr, array, 2, TestArray.Length - 4); + + if (!IsSubArrayEqual(TestArray, array, 2, TestArray.Length - 4)) + { + Assert.ErrorWriteLine("Failed copy round trip test"); + Assert.ErrorWriteLine("Original array and round trip partially copied arrays do not match."); + } + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed copy round trip test."); + } + + Marshal.FreeCoTaskMem(ptr); + } + + public bool RunTests() + { + NullValueTests(); + OutOfRangeTests(); + CopyRoundTripTests(); + return true; + } + + public static int Main(String[] unusedArgs) + { + if (new CopyCharArrayTest().RunTests()) + return 100; + return 99; + } + +} diff --git a/tests/src/Interop/MarshalAPI/Copy/CopyCharArray.csproj b/tests/src/Interop/MarshalAPI/Copy/CopyCharArray.csproj new file mode 100644 index 0000000..694e3d6 --- /dev/null +++ b/tests/src/Interop/MarshalAPI/Copy/CopyCharArray.csproj @@ -0,0 +1,47 @@ + + + + + Debug + AnyCPU + CopyCharArray + 2.0 + {F1E66554-8C8E-4141-85CF-D0CD6A0CD0B0} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages + ..\..\ + + 7a9bfb7d + $(DefineConstants);STATIC + + + + + + + + + False + + + + + + + + + + + + + + + {c8c0dc74-fac4-45b1-81fe-70c4808366e0} + CoreCLRTestLibrary + + + + diff --git a/tests/src/Interop/MarshalAPI/Copy/CopyDoubleArray.cs b/tests/src/Interop/MarshalAPI/Copy/CopyDoubleArray.cs new file mode 100644 index 0000000..0b631a3 --- /dev/null +++ b/tests/src/Interop/MarshalAPI/Copy/CopyDoubleArray.cs @@ -0,0 +1,201 @@ +using System; +using System.IO; +using System.Reflection; +using System.Security; +using System.Runtime.InteropServices; +using System.Runtime.InteropServices.ComTypes; +using CoreFXTestLibrary; + +public class CopyDoubleArrayTest +{ + private double[] TestArray = { 0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0 }; + + private bool IsArrayEqual(double[] array1, double[] array2) + { + if (array1.Length != array2.Length) + { + return false; + } + + for (int i = 0; i < array1.Length; i++) + if (!array1[i].Equals(array2[i])) + { + return false; + } + + return true; + } + + private bool IsSubArrayEqual(double[] array1, double[] array2, int startIndex, int Length) + { + if (startIndex + Length > array1.Length) + { + return false; + } + + if (startIndex + Length > array2.Length) + { + return false; + } + + for (int i = 0; i < Length; i++) + if (!array1[startIndex + i].Equals(array2[startIndex + i])) + { + return false; + } + + return true; + } + + private void NullValueTests() + { + double[] array = null; + + try + { + Marshal.Copy(array, 0, IntPtr.Zero, 0); + Assert.ErrorWriteLine("Failed null values test."); + Assert.ErrorWriteLine("No exception from Copy when passed null as parameter."); + } + catch (ArgumentNullException) + { + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed null values test."); + } + + try + { + Marshal.Copy(IntPtr.Zero, array, 0, 0); + + Assert.ErrorWriteLine("Failed null values test."); + Assert.ErrorWriteLine("No exception from Copy when passed null as parameter."); + } + catch (ArgumentNullException) + { + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed null values test."); + } + } + + private void OutOfRangeTests() + { + int sizeOfArray = Marshal.SizeOf(TestArray[0]) * TestArray.Length; + + IntPtr ptr = Marshal.AllocCoTaskMem(sizeOfArray); + + try //try to copy more elements than the TestArray has + { + Marshal.Copy(TestArray, 0, ptr, TestArray.Length + 1); + + Assert.ErrorWriteLine("Failed out of range values test."); + Assert.ErrorWriteLine("No exception from Copy when trying to copy more elements than the TestArray has."); + } + catch (ArgumentOutOfRangeException) + { + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed out of range values test."); + } + + try //try to copy from an out of bound startIndex + { + Marshal.Copy(TestArray, TestArray.Length + 1, ptr, 1); + + Assert.ErrorWriteLine("Failed out of range values test."); + Assert.ErrorWriteLine("No exception from Copy when trying to copy from an out of bound startIndex."); + } + catch (ArgumentOutOfRangeException) + { + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed out of range values test."); + } + + try //try to copy from a positive startIndex, with length taking it out of bounds + { + Marshal.Copy(TestArray, 2, ptr, TestArray.Length); + + Assert.ErrorWriteLine("Failed out of range values test."); + Assert.ErrorWriteLine("No exception from Copy when trying to copy from a positive startIndex, with length taking it out of bounds."); + } + catch (ArgumentOutOfRangeException) + { + + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed out of range values test."); + } + + Marshal.FreeCoTaskMem(ptr); + } + + private void CopyRoundTripTests() + { + int sizeOfArray = Marshal.SizeOf(TestArray[0]) * TestArray.Length; + + IntPtr ptr = Marshal.AllocCoTaskMem(sizeOfArray); + + try //try to copy the entire array + { + Marshal.Copy(TestArray, 0, ptr, TestArray.Length); + + double[] array = new double[TestArray.Length]; + + Marshal.Copy(ptr, array, 0, TestArray.Length); + + if (!IsArrayEqual(TestArray, array)) + { + Assert.ErrorWriteLine("Failed copy round trip test"); + Assert.ErrorWriteLine("Original array and round trip copied arrays do not match."); + } + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed copy round trip test."); + } + + try //try to copy part of the array + { + Marshal.Copy(TestArray, 2, ptr, TestArray.Length - 4); + + double[] array = new double[TestArray.Length]; + + Marshal.Copy(ptr, array, 2, TestArray.Length - 4); + + if (!IsSubArrayEqual(TestArray, array, 2, TestArray.Length - 4)) + { + Assert.ErrorWriteLine("Failed copy round trip test"); + Assert.ErrorWriteLine("Original array and round trip partially copied arrays do not match."); + } + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed copy round trip test."); + } + + Marshal.FreeCoTaskMem(ptr); + } + + public bool RunTests() + { + NullValueTests(); + OutOfRangeTests(); + CopyRoundTripTests(); + return true; + } + + public static int Main(String[] unusedArgs) + { + if (new CopyDoubleArrayTest().RunTests()) + return 100; + return 99; + } + +} diff --git a/tests/src/Interop/MarshalAPI/Copy/CopyDoubleArray.csproj b/tests/src/Interop/MarshalAPI/Copy/CopyDoubleArray.csproj new file mode 100644 index 0000000..11cd0eb --- /dev/null +++ b/tests/src/Interop/MarshalAPI/Copy/CopyDoubleArray.csproj @@ -0,0 +1,47 @@ + + + + + Debug + AnyCPU + CopyDoubleArray + 2.0 + {F1E66554-8C8E-4141-85CF-D0CD6A0CD0B0} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages + ..\..\ + + 7a9bfb7d + $(DefineConstants);STATIC + + + + + + + + + False + + + + + + + + + + + + + + + {c8c0dc74-fac4-45b1-81fe-70c4808366e0} + CoreCLRTestLibrary + + + + diff --git a/tests/src/Interop/MarshalAPI/Copy/CopyInt16Array.cs b/tests/src/Interop/MarshalAPI/Copy/CopyInt16Array.cs new file mode 100644 index 0000000..8307f8d --- /dev/null +++ b/tests/src/Interop/MarshalAPI/Copy/CopyInt16Array.cs @@ -0,0 +1,202 @@ +using System; +using System.IO; +using System.Reflection; +using System.Security; +using System.Runtime.InteropServices; +using System.Runtime.InteropServices.ComTypes; +using CoreFXTestLibrary; + +public class CopyInt16ArrayTest +{ + private short[] TestArray = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; + + private bool IsArrayEqual(short[] array1, short[] array2) + { + if (array1.Length != array2.Length) + { + return false; + } + + for (int i = 0; i < array1.Length; i++) + if (!array1[i].Equals(array2[i])) + { + return false; + } + + return true; + } + + private bool IsSubArrayEqual(short[] array1, short[] array2, int startIndex, int Length) + { + if (startIndex + Length > array1.Length) + { + return false; + } + + if (startIndex + Length > array2.Length) + { + return false; + } + + for (int i = 0; i < Length; i++) + if (!array1[startIndex + i].Equals(array2[startIndex + i])) + { + return false; + } + + return true; + } + + private void NullValueTests() + { + short[] array = null; + + try + { + Marshal.Copy(array, 0, IntPtr.Zero, 0); + + Assert.ErrorWriteLine("Failed null values test."); + Assert.ErrorWriteLine("No exception from Copy when passed null as parameter."); + } + catch (ArgumentNullException) + { + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed null values test."); + } + + try + { + Marshal.Copy(IntPtr.Zero, array, 0, 0); + + Assert.ErrorWriteLine("Failed null values test."); + Assert.ErrorWriteLine("No exception from Copy when passed null as parameter."); + } + catch (ArgumentNullException) + { + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed null values test."); + Assert.ErrorWriteLine("Exception occurred: {0}", ex); + } + } + + private void OutOfRangeTests() + { + int sizeOfArray = Marshal.SizeOf(TestArray[0]) * TestArray.Length; + + IntPtr ptr = Marshal.AllocCoTaskMem(sizeOfArray); + + try //try to copy more elements than the TestArray has + { + Marshal.Copy(TestArray, 0, ptr, TestArray.Length + 1); + + Assert.ErrorWriteLine("Failed out of range values test."); + Assert.ErrorWriteLine("No exception from Copy when trying to copy more elements than the TestArray has."); + } + catch (ArgumentOutOfRangeException) + { + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed out of range values test."); + } + + try //try to copy from an out of bound startIndex + { + Marshal.Copy(TestArray, TestArray.Length + 1, ptr, 1); + + Assert.ErrorWriteLine("Failed out of range values test."); + Assert.ErrorWriteLine("No exception from Copy when trying to copy from an out of bound startIndex."); + } + catch (ArgumentOutOfRangeException) + { + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed out of range values test."); + } + + try //try to copy from a positive startIndex, with length taking it out of bounds + { + Marshal.Copy(TestArray, 2, ptr, TestArray.Length); + + Assert.ErrorWriteLine("Failed out of range values test."); + Assert.ErrorWriteLine("No exception from Copy when trying to copy from a positive startIndex, with length taking it out of bounds."); + } + catch (ArgumentOutOfRangeException) + { + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed out of range values test."); + } + + Marshal.FreeCoTaskMem(ptr); + } + + private void CopyRoundTripTests() + { + int sizeOfArray = Marshal.SizeOf(TestArray[0]) * TestArray.Length; + + IntPtr ptr = Marshal.AllocCoTaskMem(sizeOfArray); + + try //try to copy the entire array + { + Marshal.Copy(TestArray, 0, ptr, TestArray.Length); + + short[] array = new short[TestArray.Length]; + + Marshal.Copy(ptr, array, 0, TestArray.Length); + + if (!IsArrayEqual(TestArray, array)) + { + Assert.ErrorWriteLine("Failed copy round trip test"); + Assert.ErrorWriteLine("Original array and round trip copied arrays do not match."); + } + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed copy round trip test."); + } + + try //try to copy part of the array + { + Marshal.Copy(TestArray, 2, ptr, TestArray.Length - 4); + + short[] array = new short[TestArray.Length]; + + Marshal.Copy(ptr, array, 2, TestArray.Length - 4); + + if (!IsSubArrayEqual(TestArray, array, 2, TestArray.Length - 4)) + { + Assert.ErrorWriteLine("Failed copy round trip test"); + Assert.ErrorWriteLine("Original array and round trip partially copied arrays do not match."); + } + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed copy round trip test."); + } + + Marshal.FreeCoTaskMem(ptr); + } + + public bool RunTests() + { + + NullValueTests(); + OutOfRangeTests(); + CopyRoundTripTests(); + return true; + } + + public static int Main(String[] unusedArgs) + { + if (new CopyInt16ArrayTest().RunTests()) + return 100; + return 99; + } +} diff --git a/tests/src/Interop/MarshalAPI/Copy/CopyInt16Array.csproj b/tests/src/Interop/MarshalAPI/Copy/CopyInt16Array.csproj new file mode 100644 index 0000000..c2a8723 --- /dev/null +++ b/tests/src/Interop/MarshalAPI/Copy/CopyInt16Array.csproj @@ -0,0 +1,47 @@ + + + + + Debug + AnyCPU + CopyInt16Array + 2.0 + {F1E66554-8C8E-4141-85CF-D0CD6A0CD0B0} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages + ..\..\ + + 7a9bfb7d + $(DefineConstants);STATIC + + + + + + + + + False + + + + + + + + + + + + + + + {c8c0dc74-fac4-45b1-81fe-70c4808366e0} + CoreCLRTestLibrary + + + + diff --git a/tests/src/Interop/MarshalAPI/Copy/CopyInt32Array.cs b/tests/src/Interop/MarshalAPI/Copy/CopyInt32Array.cs new file mode 100644 index 0000000..0b0c2f8 --- /dev/null +++ b/tests/src/Interop/MarshalAPI/Copy/CopyInt32Array.cs @@ -0,0 +1,206 @@ +using System; +using System.IO; +using System.Reflection; +using System.Security; +using System.Runtime.InteropServices; +using System.Runtime.InteropServices.ComTypes; +using CoreFXTestLibrary; +public class CopyInt32ArrayTest +{ + private int[] TestArray = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; + + private bool IsArrayEqual(int[] array1, int[] array2) + { + if (array1.Length != array2.Length) + { + return false; + } + + for (int i = 0; i < array1.Length; i++) + if (!array1[i].Equals(array2[i])) + { + return false; + } + + return true; + } + + private bool IsSubArrayEqual(int[] array1, int[] array2, int startIndex, int Length) + { + if (startIndex + Length > array1.Length) + { + return false; + } + + if (startIndex + Length > array2.Length) + { + + return false; + } + + for (int i = 0; i < Length; i++) + if (!array1[startIndex + i].Equals(array2[startIndex + i])) + { + return false; + } + + return true; + } + + private void NullValueTests() + { + int[] array = null; + + try + { + Marshal.Copy(array, 0, IntPtr.Zero, 0); + + Assert.ErrorWriteLine("Failed null values test."); + Assert.ErrorWriteLine("No exception from Copy when passed null as parameter."); + } + catch (ArgumentNullException) + { + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed null values test."); + Assert.ErrorWriteLine("Exception occurred: {0}", ex); + } + + try + { + Marshal.Copy(IntPtr.Zero, array, 0, 0); + + Assert.ErrorWriteLine("Failed null values test."); + Assert.ErrorWriteLine("No exception from Copy when passed null as parameter."); + } + catch (ArgumentNullException) + { + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed null values test."); + Assert.ErrorWriteLine("Exception occurred: {0}", ex); + } + } + + private void OutOfRangeTests() + { + int sizeOfArray = Marshal.SizeOf(TestArray[0]) * TestArray.Length; + + IntPtr ptr = Marshal.AllocCoTaskMem(sizeOfArray); + + try //try to copy more elements than the TestArray has + { + Marshal.Copy(TestArray, 0, ptr, TestArray.Length + 1); + + Assert.ErrorWriteLine("Failed out of range values test."); + Assert.ErrorWriteLine("No exception from Copy when trying to copy more elements than the TestArray has."); + } + catch (ArgumentOutOfRangeException) + { + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed out of range values test."); + } + + try //try to copy from an out of bound startIndex + { + Marshal.Copy(TestArray, TestArray.Length + 1, ptr, 1); + + Assert.ErrorWriteLine("Failed out of range values test."); + Assert.ErrorWriteLine("No exception from Copy when trying to copy from an out of bound startIndex."); + } + catch (ArgumentOutOfRangeException) + { + + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed out of range values test."); + } + + try //try to copy from a positive startIndex, with length taking it out of bounds + { + Marshal.Copy(TestArray, 2, ptr, TestArray.Length); + + Assert.ErrorWriteLine("Failed out of range values test."); + Assert.ErrorWriteLine("No exception from Copy when trying to copy from a positive startIndex, with length taking it out of bounds."); + } + catch (ArgumentOutOfRangeException) + { + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed out of range values test."); + } + + Marshal.FreeCoTaskMem(ptr); + } + + private void CopyRoundTripTests() + { + int sizeOfArray = Marshal.SizeOf(TestArray[0]) * TestArray.Length; + + IntPtr ptr = Marshal.AllocCoTaskMem(sizeOfArray); + + try //try to copy the entire array + { + Marshal.Copy(TestArray, 0, ptr, TestArray.Length); + + int[] array = new int[TestArray.Length]; + + Marshal.Copy(ptr, array, 0, TestArray.Length); + + if (!IsArrayEqual(TestArray, array)) + { + Assert.ErrorWriteLine("Failed copy round trip test"); + Assert.ErrorWriteLine("Original array and round trip copied arrays do not match."); + } + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed copy round trip test."); + Assert.ErrorWriteLine("Exception occurred: {0}", ex); + } + + try //try to copy part of the array + { + Marshal.Copy(TestArray, 2, ptr, TestArray.Length - 4); + + int[] array = new int[TestArray.Length]; + + Marshal.Copy(ptr, array, 2, TestArray.Length - 4); + + if (!IsSubArrayEqual(TestArray, array, 2, TestArray.Length - 4)) + { + Assert.ErrorWriteLine("Failed copy round trip test"); + Assert.ErrorWriteLine("Original array and round trip partially copied arrays do not match."); + } + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed copy round trip test."); + Assert.ErrorWriteLine("Exception occurred: {0}", ex); + } + + Marshal.FreeCoTaskMem(ptr); + } + + public bool RunTests() + { + NullValueTests(); + OutOfRangeTests(); + CopyRoundTripTests(); + return true; + } + + public static int Main(String[] unusedArgs) + { + if (new CopyInt32ArrayTest().RunTests()) + return 100; + return 99; + } + +} diff --git a/tests/src/Interop/MarshalAPI/Copy/CopyInt32Array.csproj b/tests/src/Interop/MarshalAPI/Copy/CopyInt32Array.csproj new file mode 100644 index 0000000..81c43e7 --- /dev/null +++ b/tests/src/Interop/MarshalAPI/Copy/CopyInt32Array.csproj @@ -0,0 +1,47 @@ + + + + + Debug + AnyCPU + CopyInt32Array + 2.0 + {F1E66554-8C8E-4141-85CF-D0CD6A0CD0B0} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages + ..\..\ + + 7a9bfb7d + $(DefineConstants);STATIC + + + + + + + + + False + + + + + + + + + + + + + + + {c8c0dc74-fac4-45b1-81fe-70c4808366e0} + CoreCLRTestLibrary + + + + diff --git a/tests/src/Interop/MarshalAPI/Copy/CopyInt64Array.cs b/tests/src/Interop/MarshalAPI/Copy/CopyInt64Array.cs new file mode 100644 index 0000000..c90759c --- /dev/null +++ b/tests/src/Interop/MarshalAPI/Copy/CopyInt64Array.cs @@ -0,0 +1,203 @@ +using System; +using System.IO; +using System.Reflection; +using System.Security; +using System.Runtime.InteropServices; +using System.Runtime.InteropServices.ComTypes; +using CoreFXTestLibrary; + + +public class CopyInt64ArrayTest +{ + private long[] TestArray = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; + + private bool IsArrayEqual(long[] array1, long[] array2) + { + if (array1.Length != array2.Length) + { + return false; + } + + for (int i = 0; i < array1.Length; i++) + if (!array1[i].Equals(array2[i])) + { + return false; + } + + return true; + } + + private bool IsSubArrayEqual(long[] array1, long[] array2, int startIndex, int Length) + { + if (startIndex + Length > array1.Length) + { + return false; + } + + if (startIndex + Length > array2.Length) + { + return false; + } + + for (int i = 0; i < Length; i++) + if (!array1[startIndex + i].Equals(array2[startIndex + i])) + { + return false; + } + + return true; + } + + private void NullValueTests() + { + long[] array = null; + + try + { + Marshal.Copy(array, 0, IntPtr.Zero, 0); + + Assert.ErrorWriteLine("Failed null values test."); + Assert.ErrorWriteLine("No exception from Copy when passed null as parameter."); + } + catch (ArgumentNullException) + { + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed null values test."); + Assert.ErrorWriteLine("Exception occurred: {0}", ex); + } + + try + { + Marshal.Copy(IntPtr.Zero, array, 0, 0); + + Assert.ErrorWriteLine("Failed null values test."); + Assert.ErrorWriteLine("No exception from Copy when passed null as parameter."); + } + catch (ArgumentNullException) + { + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed null values test."); + } + } + + private void OutOfRangeTests() + { + int sizeOfArray = Marshal.SizeOf(TestArray[0]) * TestArray.Length; + + IntPtr ptr = Marshal.AllocCoTaskMem(sizeOfArray); + + try //try to copy more elements than the TestArray has + { + Marshal.Copy(TestArray, 0, ptr, TestArray.Length + 1); + + Assert.ErrorWriteLine("Failed out of range values test."); + Assert.ErrorWriteLine("No exception from Copy when trying to copy more elements than the TestArray has."); + } + catch (ArgumentOutOfRangeException) + { + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed out of range values test."); + } + + try //try to copy from an out of bound startIndex + { + Marshal.Copy(TestArray, TestArray.Length + 1, ptr, 1); + + Assert.ErrorWriteLine("Failed out of range values test."); + Assert.ErrorWriteLine("No exception from Copy when trying to copy from an out of bound startIndex."); + } + catch (ArgumentOutOfRangeException) + { + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed out of range values test."); + } + + try //try to copy from a positive startIndex, with length taking it out of bounds + { + Marshal.Copy(TestArray, 2, ptr, TestArray.Length); + + Assert.ErrorWriteLine("Failed out of range values test."); + Assert.ErrorWriteLine("No exception from Copy when trying to copy from a positive startIndex, with length taking it out of bounds."); + } + catch (ArgumentOutOfRangeException) + { + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed out of range values test."); + } + + Marshal.FreeCoTaskMem(ptr); + } + + private void CopyRoundTripTests() + { + int sizeOfArray = Marshal.SizeOf(TestArray[0]) * TestArray.Length; + + IntPtr ptr = Marshal.AllocCoTaskMem(sizeOfArray); + + try //try to copy the entire array + { + Marshal.Copy(TestArray, 0, ptr, TestArray.Length); + + long[] array = new long[TestArray.Length]; + + Marshal.Copy(ptr, array, 0, TestArray.Length); + + if (!IsArrayEqual(TestArray, array)) + { + Assert.ErrorWriteLine("Failed copy round trip test"); + Assert.ErrorWriteLine("Original array and round trip copied arrays do not match."); + } + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed copy round trip test."); + } + + try //try to copy part of the array + { + Marshal.Copy(TestArray, 2, ptr, TestArray.Length - 4); + + long[] array = new long[TestArray.Length]; + + Marshal.Copy(ptr, array, 2, TestArray.Length - 4); + + if (!IsSubArrayEqual(TestArray, array, 2, TestArray.Length - 4)) + { + Assert.ErrorWriteLine("Failed copy round trip test"); + Assert.ErrorWriteLine("Original array and round trip partially copied arrays do not match."); + } + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed copy round trip test."); + } + + Marshal.FreeCoTaskMem(ptr); + } + + public bool RunTests() + { + NullValueTests(); + OutOfRangeTests(); + CopyRoundTripTests(); + return true; + } + + public static int Main(String[] unusedArgs) + { + if (new CopyInt64ArrayTest().RunTests()) + return 100; + return 99; + } + +} diff --git a/tests/src/Interop/MarshalAPI/Copy/CopyInt64Array.csproj b/tests/src/Interop/MarshalAPI/Copy/CopyInt64Array.csproj new file mode 100644 index 0000000..d0726d2 --- /dev/null +++ b/tests/src/Interop/MarshalAPI/Copy/CopyInt64Array.csproj @@ -0,0 +1,47 @@ + + + + + Debug + AnyCPU + CopyInt64Array + 2.0 + {F1E66554-8C8E-4141-85CF-D0CD6A0CD0B0} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages + ..\..\ + + 7a9bfb7d + $(DefineConstants);STATIC + + + + + + + + + False + + + + + + + + + + + + + + + {c8c0dc74-fac4-45b1-81fe-70c4808366e0} + CoreCLRTestLibrary + + + + diff --git a/tests/src/Interop/MarshalAPI/Copy/CopyIntPtrArray.cs b/tests/src/Interop/MarshalAPI/Copy/CopyIntPtrArray.cs new file mode 100644 index 0000000..4cbd8f3 --- /dev/null +++ b/tests/src/Interop/MarshalAPI/Copy/CopyIntPtrArray.cs @@ -0,0 +1,221 @@ +using System; +using System.IO; +using System.Reflection; +using System.Security; +using System.Runtime.InteropServices; +using System.Runtime.InteropServices.ComTypes; +using CoreFXTestLibrary; + +public class CopyIntPtrArrayTest +{ + private IntPtr[] TestArray; + + private bool IsArrayEqual(IntPtr[] array1, IntPtr[] array2) + { + if (array1.Length != array2.Length) + { + return false; + } + + for (int i = 0; i < array1.Length; i++) + if (!array1[i].Equals(array2[i])) + { + return false; + } + + return true; + } + + private bool IsSubArrayEqual(IntPtr[] array1, IntPtr[] array2, int startIndex, int Length) + { + if (startIndex + Length > array1.Length) + { + return false; + } + + if (startIndex + Length > array2.Length) + { + return false; + } + + for (int i = 0; i < Length; i++) + if (!array1[startIndex + i].Equals(array2[startIndex + i])) + { + return false; + } + + return true; + } + + private void NullValueTests() + { + IntPtr[] array = null; + + try + { + Marshal.Copy(array, 0, IntPtr.Zero, 0); + + Assert.ErrorWriteLine("Failed null values test."); + Assert.ErrorWriteLine("No exception from Copy when passed null as parameter."); + } + catch (ArgumentNullException) + { + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed null values test."); + Assert.ErrorWriteLine("Exception occurred: {0}", ex); + } + + try + { + Marshal.Copy(IntPtr.Zero, array, 0, 0); + + Assert.ErrorWriteLine("Failed null values test."); + Assert.ErrorWriteLine("No exception from Copy when passed null as parameter."); + } + catch (ArgumentNullException) + { + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed null values test."); + Assert.ErrorWriteLine("Exception occurred: {0}", ex); + } + } + + private void OutOfRangeTests() + { + int sizeOfArray = Marshal.SizeOf(TestArray[0]) * TestArray.Length; + + IntPtr ptr = Marshal.AllocCoTaskMem(sizeOfArray); + + try //try to copy more elements than the TestArray has + { + Marshal.Copy(TestArray, 0, ptr, TestArray.Length + 1); + + Assert.ErrorWriteLine("Failed out of range values test."); + Assert.ErrorWriteLine("No exception from Copy when trying to copy more elements than the TestArray has."); + } + catch (ArgumentOutOfRangeException) + { + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed out of range values test."); + Assert.ErrorWriteLine("Exception occurred: {0}", ex); + } + + try //try to copy from an out of bound startIndex + { + Marshal.Copy(TestArray, TestArray.Length + 1, ptr, 1); + + Assert.ErrorWriteLine("Failed out of range values test."); + Assert.ErrorWriteLine("No exception from Copy when trying to copy from an out of bound startIndex."); + } + catch (ArgumentOutOfRangeException) + { + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed out of range values test."); + Assert.ErrorWriteLine("Exception occurred: {0}", ex); + } + + try //try to copy from a positive startIndex, with length taking it out of bounds + { + Marshal.Copy(TestArray, 2, ptr, TestArray.Length); + + Assert.ErrorWriteLine("Failed out of range values test."); + Assert.ErrorWriteLine("No exception from Copy when trying to copy from a positive startIndex, with length taking it out of bounds."); + } + catch (ArgumentOutOfRangeException) + { + + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed out of range values test."); + Assert.ErrorWriteLine("Exception occurred: {0}", ex); + } + + Marshal.FreeCoTaskMem(ptr); + } + + private void CopyRoundTripTests() + { + int sizeOfArray = Marshal.SizeOf(TestArray[0]) * TestArray.Length; + + IntPtr ptr = Marshal.AllocCoTaskMem(sizeOfArray); + + try //try to copy the entire array + { + Marshal.Copy(TestArray, 0, ptr, TestArray.Length); + + IntPtr[] array = new IntPtr[TestArray.Length]; + + Marshal.Copy(ptr, array, 0, TestArray.Length); + + if (!IsArrayEqual(TestArray, array)) + { + Assert.ErrorWriteLine("Failed copy round trip test"); + Assert.ErrorWriteLine("Original array and round trip copied arrays do not match."); + } + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed copy round trip test."); + Assert.ErrorWriteLine("Exception occurred: {0}", ex); + } + + try //try to copy part of the array + { + Marshal.Copy(TestArray, 2, ptr, TestArray.Length - 4); + + IntPtr[] array = new IntPtr[TestArray.Length]; + + Marshal.Copy(ptr, array, 2, TestArray.Length - 4); + + if (!IsSubArrayEqual(TestArray, array, 2, TestArray.Length - 4)) + { + Assert.ErrorWriteLine("Failed copy round trip test"); + Assert.ErrorWriteLine("Original array and round trip partially copied arrays do not match."); + } + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed copy round trip test."); + Assert.ErrorWriteLine("Exception occurred: {0}", ex); + } + + Marshal.FreeCoTaskMem(ptr); + } + + public bool RunTests() + { + NullValueTests(); + OutOfRangeTests(); + CopyRoundTripTests(); + return true; + } + + public bool Initialize() + { + TestArray = new IntPtr[10]; + for (int i = 0; i < TestArray.Length; i++) + TestArray[i] = new IntPtr(i); + return true; + } + + public static int Main(String[] unusedArgs) + { + CopyIntPtrArrayTest test = new CopyIntPtrArrayTest(); + test.Initialize(); + + if (test.RunTests()) + return 100; + + return 99; + } + +} diff --git a/tests/src/Interop/MarshalAPI/Copy/CopyIntPtrArray.csproj b/tests/src/Interop/MarshalAPI/Copy/CopyIntPtrArray.csproj new file mode 100644 index 0000000..2959a99 --- /dev/null +++ b/tests/src/Interop/MarshalAPI/Copy/CopyIntPtrArray.csproj @@ -0,0 +1,47 @@ + + + + + Debug + AnyCPU + CopyIntPtrArray + 2.0 + {F1E66554-8C8E-4141-85CF-D0CD6A0CD0B0} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages + ..\..\ + + 7a9bfb7d + $(DefineConstants);STATIC + + + + + + + + + False + + + + + + + + + + + + + + + {c8c0dc74-fac4-45b1-81fe-70c4808366e0} + CoreCLRTestLibrary + + + + diff --git a/tests/src/Interop/MarshalAPI/Copy/CopySingleArray.cs b/tests/src/Interop/MarshalAPI/Copy/CopySingleArray.cs new file mode 100644 index 0000000..5262f09 --- /dev/null +++ b/tests/src/Interop/MarshalAPI/Copy/CopySingleArray.cs @@ -0,0 +1,206 @@ +using System; +using System.IO; +using System.Reflection; +using System.Security; +using System.Runtime.InteropServices; +using System.Runtime.InteropServices.ComTypes; +using CoreFXTestLibrary; + + +public class CopySingleArrayTest +{ + private float[] TestArray = { 0.0F, 1.0F, 2.0F, 3.0F, 4.0F, 5.0F, 6.0F, 7.0F, 8.0F, 9.0F }; + + private bool IsArrayEqual(float[] array1, float[] array2) + { + if (array1.Length != array2.Length) + { + return false; + } + + for (int i = 0; i < array1.Length; i++) + if (!array1[i].Equals(array2[i])) + { + + return false; + } + + return true; + } + + private bool IsSubArrayEqual(float[] array1, float[] array2, int startIndex, int Length) + { + if (startIndex + Length > array1.Length) + { + + return false; + } + + if (startIndex + Length > array2.Length) + { + return false; + } + + for (int i = 0; i < Length; i++) + if (!array1[startIndex + i].Equals(array2[startIndex + i])) + { + return false; + } + + return true; + } + + private void NullValueTests() + { + float[] array = null; + + try + { + Marshal.Copy(array, 0, IntPtr.Zero, 0); + + Assert.ErrorWriteLine("Failed null values test."); + Assert.ErrorWriteLine("No exception from Copy when passed null as parameter."); + } + catch (ArgumentNullException) + { + + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed null values test."); + Assert.ErrorWriteLine("Exception occurred: {0}", ex); + } + + try + { + Marshal.Copy(IntPtr.Zero, array, 0, 0); + Assert.ErrorWriteLine("Failed null values test."); + } + catch (ArgumentNullException) + { + + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed null values test."); + } + } + + private void OutOfRangeTests() + { + int sizeOfArray = Marshal.SizeOf(TestArray[0]) * TestArray.Length; + + IntPtr ptr = Marshal.AllocCoTaskMem(sizeOfArray); + + try //try to copy more elements than the TestArray has + { + Marshal.Copy(TestArray, 0, ptr, TestArray.Length + 1); + Assert.ErrorWriteLine("Failed out of range values test."); + + } + catch (ArgumentOutOfRangeException) + { + + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed out of range values test."); + Assert.ErrorWriteLine("Exception occurred: {0}", ex); + } + + try //try to copy from an out of bound startIndex + { + Marshal.Copy(TestArray, TestArray.Length + 1, ptr, 1); + Assert.ErrorWriteLine("Failed out of range values test."); + } + catch (ArgumentOutOfRangeException) + { + + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed out of range values test."); + } + + try //try to copy from a positive startIndex, with length taking it out of bounds + { + Marshal.Copy(TestArray, 2, ptr, TestArray.Length); + Assert.ErrorWriteLine("Failed out of range values test."); + + } + catch (ArgumentOutOfRangeException) + { + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed out of range values test."); + } + + Marshal.FreeCoTaskMem(ptr); + } + + private void CopyRoundTripTests() + { + int sizeOfArray = Marshal.SizeOf(TestArray[0]) * TestArray.Length; + + IntPtr ptr = Marshal.AllocCoTaskMem(sizeOfArray); + + try //try to copy the entire array + { + Marshal.Copy(TestArray, 0, ptr, TestArray.Length); + + float[] array = new float[TestArray.Length]; + + Marshal.Copy(ptr, array, 0, TestArray.Length); + + if (!IsArrayEqual(TestArray, array)) + { + Assert.ErrorWriteLine("Failed copy round trip test"); + Assert.ErrorWriteLine("Original array and round trip copied arrays do not match."); + } + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed copy round trip test."); + Assert.ErrorWriteLine("Exception occurred: {0}", ex); + } + + try //try to copy part of the array + { + Marshal.Copy(TestArray, 2, ptr, TestArray.Length - 4); + + float[] array = new float[TestArray.Length]; + + Marshal.Copy(ptr, array, 2, TestArray.Length - 4); + + if (!IsSubArrayEqual(TestArray, array, 2, TestArray.Length - 4)) + { + Assert.ErrorWriteLine("Failed copy round trip test"); + Assert.ErrorWriteLine("Original array and round trip partially copied arrays do not match."); + } + } + catch (Exception ex) + { + Assert.ErrorWriteLine("Failed copy round trip test."); + } + + Marshal.FreeCoTaskMem(ptr); + } + + public bool RunTests() + { + NullValueTests(); + OutOfRangeTests(); + CopyRoundTripTests(); + return true; + } + + public static int Main(String[] unusedArgs) + { + if (new CopySingleArrayTest().RunTests()) + return 100; + + return 99; + } + +} diff --git a/tests/src/Interop/MarshalAPI/Copy/CopySingleArray.csproj b/tests/src/Interop/MarshalAPI/Copy/CopySingleArray.csproj new file mode 100644 index 0000000..8ae20ac --- /dev/null +++ b/tests/src/Interop/MarshalAPI/Copy/CopySingleArray.csproj @@ -0,0 +1,47 @@ + + + + + Debug + AnyCPU + CopySingleArray + 2.0 + {F1E66554-8C8E-4141-85CF-D0CD6A0CD0B0} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages + ..\..\ + + 7a9bfb7d + $(DefineConstants);STATIC + + + + + + + + + False + + + + + + + + + + + + + + + {c8c0dc74-fac4-45b1-81fe-70c4808366e0} + CoreCLRTestLibrary + + + + diff --git a/tests/src/Interop/MarshalAPI/Copy/project.json b/tests/src/Interop/MarshalAPI/Copy/project.json new file mode 100644 index 0000000..a2e84dc --- /dev/null +++ b/tests/src/Interop/MarshalAPI/Copy/project.json @@ -0,0 +1,35 @@ +{ + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1-rc2-23816", + "System.Collections": "4.0.10", + "System.Collections.NonGeneric": "4.0.1-rc2-23816", + "System.Collections.Specialized": "4.0.1-rc2-23816", + "System.ComponentModel": "4.0.1-rc2-23816", + "System.Console": "4.0.0-rc2-23816", + "System.Diagnostics.Process": "4.1.0-rc2-23816", + "System.Globalization": "4.0.10", + "System.Globalization.Calendars": "4.0.0", + "System.IO": "4.0.10", + "System.IO.FileSystem": "4.0.0", + "System.IO.FileSystem.Primitives": "4.0.0", + "System.Linq": "4.0.1-rc2-23816", + "System.Linq.Queryable": "4.0.1-rc2-23816", + "System.Reflection": "4.0.10", + "System.Reflection.Primitives": "4.0.0", + "System.Runtime": "4.1.0-rc2-23816", + "System.Runtime.Extensions": "4.0.10", + "System.Runtime.Handles": "4.0.0", + "System.Runtime.InteropServices": "4.1.0-rc2-23816", + "System.Runtime.Loader": "4.0.0-rc2-23816", + "System.Text.Encoding": "4.0.10", + "System.Threading": "4.0.10", + "System.Threading.Thread": "4.0.0-rc2-23816", + "System.Xml.ReaderWriter": "4.0.11-rc2-23816", + "System.Xml.XDocument": "4.0.11-rc2-23816", + "System.Xml.XmlDocument": "4.0.1-rc2-23816", + "System.Xml.XmlSerializer": "4.0.11-rc2-23816" + }, + "frameworks": { + "dnxcore50": {} + } +} diff --git a/tests/src/Interop/MarshalAPI/FunctionPointer/project.json b/tests/src/Interop/MarshalAPI/FunctionPointer/project.json index 0976b60..a2e84dc 100644 --- a/tests/src/Interop/MarshalAPI/FunctionPointer/project.json +++ b/tests/src/Interop/MarshalAPI/FunctionPointer/project.json @@ -1,32 +1,33 @@ { "dependencies": { "Microsoft.NETCore.Platforms": "1.0.1-rc2-23816", - "System.Collections": "4.0.10-beta-23302", - "System.Collections.NonGeneric": "4.0.1-beta-23302", - "System.Collections.Specialized": "4.0.1-beta-23302", - "System.ComponentModel": "4.0.1-beta-23302", - "System.Console": "4.0.0-beta-23302", - "System.Diagnostics.Process": "4.0.0-beta-23302", - "System.Globalization": "4.0.10-beta-23302", - "System.Globalization.Calendars": "4.0.0-beta-23302", - "System.IO": "4.0.10-beta-23302", - "System.IO.FileSystem": "4.0.0-beta-23302", - "System.IO.FileSystem.Primitives": "4.0.0-beta-23302", - "System.Linq": "4.0.1-beta-23302", - "System.Linq.Queryable": "4.0.1-beta-23302", - "System.Reflection": "4.0.10-beta-23302", - "System.Reflection.Primitives": "4.0.0-beta-23302", - "System.Runtime": "4.0.20-beta-23302", - "System.Runtime.Extensions": "4.0.10-beta-23302", - "System.Runtime.Handles": "4.0.0-beta-23302", - "System.Runtime.InteropServices": "4.0.20-beta-23302", - "System.Runtime.Loader": "4.0.0-beta-23302", - "System.Text.Encoding": "4.0.10-beta-23302", - "System.Threading": "4.0.10-beta-23302", - "System.Xml.ReaderWriter": "4.0.11-beta-23302", - "System.Xml.XDocument": "4.0.11-beta-23302", - "System.Xml.XmlDocument": "4.0.1-beta-23302", - "System.Xml.XmlSerializer": "4.0.11-beta-23302" + "System.Collections": "4.0.10", + "System.Collections.NonGeneric": "4.0.1-rc2-23816", + "System.Collections.Specialized": "4.0.1-rc2-23816", + "System.ComponentModel": "4.0.1-rc2-23816", + "System.Console": "4.0.0-rc2-23816", + "System.Diagnostics.Process": "4.1.0-rc2-23816", + "System.Globalization": "4.0.10", + "System.Globalization.Calendars": "4.0.0", + "System.IO": "4.0.10", + "System.IO.FileSystem": "4.0.0", + "System.IO.FileSystem.Primitives": "4.0.0", + "System.Linq": "4.0.1-rc2-23816", + "System.Linq.Queryable": "4.0.1-rc2-23816", + "System.Reflection": "4.0.10", + "System.Reflection.Primitives": "4.0.0", + "System.Runtime": "4.1.0-rc2-23816", + "System.Runtime.Extensions": "4.0.10", + "System.Runtime.Handles": "4.0.0", + "System.Runtime.InteropServices": "4.1.0-rc2-23816", + "System.Runtime.Loader": "4.0.0-rc2-23816", + "System.Text.Encoding": "4.0.10", + "System.Threading": "4.0.10", + "System.Threading.Thread": "4.0.0-rc2-23816", + "System.Xml.ReaderWriter": "4.0.11-rc2-23816", + "System.Xml.XDocument": "4.0.11-rc2-23816", + "System.Xml.XmlDocument": "4.0.1-rc2-23816", + "System.Xml.XmlSerializer": "4.0.11-rc2-23816" }, "frameworks": { "dnxcore50": {} diff --git a/tests/src/Interop/MarshalAPI/GetExceptionForHR/GetExceptionForHR.cs b/tests/src/Interop/MarshalAPI/GetExceptionForHR/GetExceptionForHR.cs new file mode 100644 index 0000000..5280a06 --- /dev/null +++ b/tests/src/Interop/MarshalAPI/GetExceptionForHR/GetExceptionForHR.cs @@ -0,0 +1,41 @@ +using System; +using System.IO; +using System.Reflection; +using System.Security; +using System.Runtime.InteropServices; +using System.Diagnostics; + +public class GetExceptionForHRTest +{ + //HR:0x80020006 + void RunTests1() + { + + int err = unchecked((int)0x80020006); + Exception ex = Marshal.GetExceptionForHR(err); + if(ex.HResult != err) throw new Exception(); + } + + //0x80020101 + void RunTest2() + { + int err = unchecked((int)0x80020101); + Exception ex = Marshal.GetExceptionForHR(err); + if(ex.HResult != err) throw new Exception(); + } + + public bool RunTests() + { + RunTests1(); + RunTest2(); + return true; + } + + public static int Main(String[] unusedArgs) + { + if (new GetExceptionForHRTest().RunTests()) + return 100; + return 99; + } + +} diff --git a/tests/src/Interop/MarshalAPI/GetExceptionForHR/GetExceptionForHR.csproj b/tests/src/Interop/MarshalAPI/GetExceptionForHR/GetExceptionForHR.csproj new file mode 100644 index 0000000..20a1a07 --- /dev/null +++ b/tests/src/Interop/MarshalAPI/GetExceptionForHR/GetExceptionForHR.csproj @@ -0,0 +1,47 @@ + + + + + Debug + AnyCPU + GetExceptionForHR + 2.0 + {F1E66554-8C8E-4141-85CF-D0CD6A0CD0B0} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages + ..\..\ + + 7a9bfb7d + $(DefineConstants);STATIC + + + + + + + + + False + + + + + + + + + + + + + + + {c8c0dc74-fac4-45b1-81fe-70c4808366e0} + CoreCLRTestLibrary + + + + diff --git a/tests/src/Interop/MarshalAPI/GetExceptionForHR/project.json b/tests/src/Interop/MarshalAPI/GetExceptionForHR/project.json new file mode 100644 index 0000000..a2e84dc --- /dev/null +++ b/tests/src/Interop/MarshalAPI/GetExceptionForHR/project.json @@ -0,0 +1,35 @@ +{ + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1-rc2-23816", + "System.Collections": "4.0.10", + "System.Collections.NonGeneric": "4.0.1-rc2-23816", + "System.Collections.Specialized": "4.0.1-rc2-23816", + "System.ComponentModel": "4.0.1-rc2-23816", + "System.Console": "4.0.0-rc2-23816", + "System.Diagnostics.Process": "4.1.0-rc2-23816", + "System.Globalization": "4.0.10", + "System.Globalization.Calendars": "4.0.0", + "System.IO": "4.0.10", + "System.IO.FileSystem": "4.0.0", + "System.IO.FileSystem.Primitives": "4.0.0", + "System.Linq": "4.0.1-rc2-23816", + "System.Linq.Queryable": "4.0.1-rc2-23816", + "System.Reflection": "4.0.10", + "System.Reflection.Primitives": "4.0.0", + "System.Runtime": "4.1.0-rc2-23816", + "System.Runtime.Extensions": "4.0.10", + "System.Runtime.Handles": "4.0.0", + "System.Runtime.InteropServices": "4.1.0-rc2-23816", + "System.Runtime.Loader": "4.0.0-rc2-23816", + "System.Text.Encoding": "4.0.10", + "System.Threading": "4.0.10", + "System.Threading.Thread": "4.0.0-rc2-23816", + "System.Xml.ReaderWriter": "4.0.11-rc2-23816", + "System.Xml.XDocument": "4.0.11-rc2-23816", + "System.Xml.XmlDocument": "4.0.1-rc2-23816", + "System.Xml.XmlSerializer": "4.0.11-rc2-23816" + }, + "frameworks": { + "dnxcore50": {} + } +} diff --git a/tests/src/Interop/MarshalAPI/IUnknown/IUnknownNative.cpp b/tests/src/Interop/MarshalAPI/IUnknown/IUnknownNative.cpp index 3e2a76d..674c3fb 100644 --- a/tests/src/Interop/MarshalAPI/IUnknown/IUnknownNative.cpp +++ b/tests/src/Interop/MarshalAPI/IUnknown/IUnknownNative.cpp @@ -8,11 +8,8 @@ extern "C" DLL_EXPORT BOOL __stdcall Marshal_IUnknown(/*[in]*/IUnknown *o) { //Call AddRef and Release on the passed IUnknown //test if the ref counts get updated as expected - - ULONG refCount = o->AddRef(); - + unsigned long refCount = o->AddRef(); if((refCount-1) != o->Release()) return FALSE; - return TRUE; } diff --git a/tests/src/Interop/MarshalAPI/IUnknown/IUnknownTest.cs b/tests/src/Interop/MarshalAPI/IUnknown/IUnknownTest.cs index 9c23cb6..83ffad3 100644 --- a/tests/src/Interop/MarshalAPI/IUnknown/IUnknownTest.cs +++ b/tests/src/Interop/MarshalAPI/IUnknown/IUnknownTest.cs @@ -7,7 +7,7 @@ using System.Reflection; using System.Security; using System.Runtime.InteropServices; using System.Collections.Generic; - +using CoreFXTestLibrary; public class TestClass { diff --git a/tests/src/Interop/MarshalAPI/IUnknown/project.json b/tests/src/Interop/MarshalAPI/IUnknown/project.json index 0976b60..f1fce28 100644 --- a/tests/src/Interop/MarshalAPI/IUnknown/project.json +++ b/tests/src/Interop/MarshalAPI/IUnknown/project.json @@ -1,32 +1,33 @@ { "dependencies": { - "Microsoft.NETCore.Platforms": "1.0.1-rc2-23816", - "System.Collections": "4.0.10-beta-23302", - "System.Collections.NonGeneric": "4.0.1-beta-23302", - "System.Collections.Specialized": "4.0.1-beta-23302", - "System.ComponentModel": "4.0.1-beta-23302", - "System.Console": "4.0.0-beta-23302", - "System.Diagnostics.Process": "4.0.0-beta-23302", - "System.Globalization": "4.0.10-beta-23302", - "System.Globalization.Calendars": "4.0.0-beta-23302", - "System.IO": "4.0.10-beta-23302", - "System.IO.FileSystem": "4.0.0-beta-23302", - "System.IO.FileSystem.Primitives": "4.0.0-beta-23302", - "System.Linq": "4.0.1-beta-23302", - "System.Linq.Queryable": "4.0.1-beta-23302", - "System.Reflection": "4.0.10-beta-23302", - "System.Reflection.Primitives": "4.0.0-beta-23302", - "System.Runtime": "4.0.20-beta-23302", - "System.Runtime.Extensions": "4.0.10-beta-23302", - "System.Runtime.Handles": "4.0.0-beta-23302", - "System.Runtime.InteropServices": "4.0.20-beta-23302", - "System.Runtime.Loader": "4.0.0-beta-23302", - "System.Text.Encoding": "4.0.10-beta-23302", - "System.Threading": "4.0.10-beta-23302", - "System.Xml.ReaderWriter": "4.0.11-beta-23302", - "System.Xml.XDocument": "4.0.11-beta-23302", - "System.Xml.XmlDocument": "4.0.1-beta-23302", - "System.Xml.XmlSerializer": "4.0.11-beta-23302" + "Microsoft.NETCore.Platforms": "1.0.1-rc2-23816", + "System.Collections": "4.0.10", + "System.Collections.NonGeneric": "4.0.1-rc2-23816", + "System.Collections.Specialized": "4.0.1-rc2-23816", + "System.ComponentModel": "4.0.1-rc2-23816", + "System.Console": "4.0.0-rc2-23816", + "System.Diagnostics.Process": "4.1.0-rc2-23816", + "System.Globalization": "4.0.10", + "System.Globalization.Calendars": "4.0.0", + "System.IO": "4.0.10", + "System.IO.FileSystem": "4.0.0", + "System.IO.FileSystem.Primitives": "4.0.0", + "System.Linq": "4.0.1-rc2-23816", + "System.Linq.Queryable": "4.0.1-rc2-23816", + "System.Reflection": "4.0.10", + "System.Reflection.Primitives": "4.0.0", + "System.Runtime": "4.1.0-rc2-23816", + "System.Runtime.Extensions": "4.0.10", + "System.Runtime.Handles": "4.0.0", + "System.Runtime.InteropServices": "4.1.0-rc2-23816", + "System.Runtime.Loader": "4.0.0-rc2-23816", + "System.Text.Encoding": "4.0.10", + "System.Threading": "4.0.10", + "System.Threading.Thread": "4.0.0-rc2-23816", + "System.Xml.ReaderWriter": "4.0.11-rc2-23816", + "System.Xml.XDocument": "4.0.11-rc2-23816", + "System.Xml.XmlDocument": "4.0.1-rc2-23816", + "System.Xml.XmlSerializer": "4.0.11-rc2-23816" }, "frameworks": { "dnxcore50": {} diff --git a/tests/src/Interop/MarshalAPI/Miscellaneous/AutoLayoutStructure.cs b/tests/src/Interop/MarshalAPI/Miscellaneous/AutoLayoutStructure.cs new file mode 100644 index 0000000..b701a01 --- /dev/null +++ b/tests/src/Interop/MarshalAPI/Miscellaneous/AutoLayoutStructure.cs @@ -0,0 +1,45 @@ +using System; +using System.Reflection; +using System.Threading; +using System.Runtime.InteropServices; +using CoreFXTestLibrary; + +class MarshalClassTests +{ + [StructLayout(LayoutKind.Auto)] + public struct SomeTestStruct_Auto + { + public int i; + } + + [STAThread] + static int Main() + { + SomeTestStruct_Auto someTs_Auto = new SomeTestStruct_Auto(); + try + { + Marshal.StructureToPtr(someTs_Auto, new IntPtr(123), true); + } + catch (ArgumentException ex) + { + if (ex.ParamName != "structure") + { + Console.WriteLine("Thrown ArgumentException is incorrect."); + return 103; + } + if (!ex.Message.Contains("The specified structure must be blittable or have layout information.")) + { + Console.WriteLine("Thrown ArgumentException is incorrect."); + return 104; + } + return 100; + } + catch (Exception e) + { + Console.WriteLine("Marshal.StructureToPtr threw unexpected exception {0}.", e); + return 102; + } + Console.WriteLine("Marshal.StructureToPtr did not throw an exception."); + return 101; + } +} diff --git a/tests/src/Interop/MarshalAPI/Miscellaneous/AutoLayoutStructure.csproj b/tests/src/Interop/MarshalAPI/Miscellaneous/AutoLayoutStructure.csproj new file mode 100644 index 0000000..166c6d8 --- /dev/null +++ b/tests/src/Interop/MarshalAPI/Miscellaneous/AutoLayoutStructure.csproj @@ -0,0 +1,47 @@ + + + + + Debug + AnyCPU + AutoLayoutStructure + 2.0 + {F1E66554-8C8E-4141-85CF-D0CD6A0CD0B0} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages + ..\..\ + + 7a9bfb7d + $(DefineConstants);STATIC + + + + + + + + + False + + + + + + + + + + + + + + + {c8c0dc74-fac4-45b1-81fe-70c4808366e0} + CoreCLRTestLibrary + + + + diff --git a/tests/src/Interop/MarshalAPI/Miscellaneous/MarshalClassTests.cs b/tests/src/Interop/MarshalAPI/Miscellaneous/MarshalClassTests.cs new file mode 100644 index 0000000..30ae04e --- /dev/null +++ b/tests/src/Interop/MarshalAPI/Miscellaneous/MarshalClassTests.cs @@ -0,0 +1,827 @@ +using System; +using System.Reflection; +using System.Threading; +using System.Runtime.InteropServices; +using CoreFXTestLibrary; + +class MarshalClassTests +{ + //definition of structure that will be used in testing of structs with Fixed BSTR Safearray fields + internal struct Variant + { + public ushort vt; + public ushort wReserved1; + public ushort wReserved2; + public ushort wReserved3; + public IntPtr bstrVal; + public IntPtr pRecInfo; + } + + [StructLayout(LayoutKind.Sequential)] + public struct StructWithFxdLPSTRSAFld + { + [MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.LPStr, SizeConst = 0)] + public String[] Arr; + } + + [StructLayout(LayoutKind.Sequential)] + public struct SomeTestStruct + { + public int i; + [MarshalAs(UnmanagedType.BStr)] + public String s; + } + + public enum TestEnum + { + red, + green, + blue + } + +#if BUG_876976 + public struct TestStructWithEnumArray + { + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] + public TestEnum[] ArrayOfEnum; + } +#endif + + [STAThread] + static int Main() + { + int retVal = 100; + + IntPtr ip; + Object o; + SomeTestStruct someTs = new SomeTestStruct(); + StructWithFxdLPSTRSAFld someTs_FxdLPSTR = new StructWithFxdLPSTRSAFld(); + +#if BUG_876976 + Console.WriteLine("Testing SizeOf..."); + try + { + TestStructWithEnumArray s = new TestStructWithEnumArray(); + s.ArrayOfEnum = new TestEnum[3]; + s.ArrayOfEnum[0] = TestEnum.red; + s.ArrayOfEnum[1] = TestEnum.green; + s.ArrayOfEnum[2] = TestEnum.blue; + Console.WriteLine("\tFirst call to SizeOf with TestStructWithEnumArray..."); + int retsize = Marshal.SizeOf(s.GetType()); + if (retsize != 12) + { + retVal = 0; + Console.WriteLine("\t\tSize returned != 12"); + Console.WriteLine("\t\tReturned size = " + retsize); + } + + retsize = 0; + Console.WriteLine("\tSecond call to SizeOf with TestStructWithEnumArray..."); + retsize = Marshal.SizeOf(typeof(TestStructWithEnumArray)); + int genericRetsize = Marshal.SizeOf(); + + if (retsize != genericRetsize) + { + retVal = 0; + Console.WriteLine("\t\tERROR: Generic and non generic versions of the API did not return the same size!"); + } + + if (retsize != 12) + { + retVal = 0; + Console.WriteLine("\t\tSize returned != 12"); + Console.WriteLine("\t\tReturned size = " + retsize); + } + } + catch (Exception e) + { + retVal = 0; + Console.WriteLine("\t\tUNEXPECTED EXCEPTION:\n\t\t\t" + e.ToString()); + } +#endif + +#if BUG_879268 + ////////////////////////////////////////////////////////////// + //StructureToPtr + ///////////////////////////////////////////////////////////// + Console.WriteLine("Testing StructureToPtr..."); + Console.WriteLine("\tPassing IntPtr=IntPtr.Zero"); + ip = IntPtr.Zero; + try + { + Marshal.StructureToPtr(someTs, ip, true); + retVal = 0; + Console.WriteLine("\t\tNO EXCEPTION THROWN! FAILED!"); + } + catch (ArgumentNullException ane) + { + Console.WriteLine("\t\tCaught Expected Exception:\n\t\t\t" + ane.ToString()); + } + catch (Exception e) + { + retVal = 0; + Console.WriteLine("\t\tUNEXPECTED EXCEPTION:\n\t\t\t" + e.ToString()); + } + + Console.WriteLine("\n\tPassing structure=null"); + ip = new IntPtr(123); + try + { + Marshal.StructureToPtr(null, ip, true); + retVal = 0; + Console.WriteLine("\t\tNO EXCEPTION THROWN! FAILED!"); + } + catch (ArgumentNullException ane) + { + Console.WriteLine("\t\tCaught Expected Exception:\n\t\t\t" + ane.ToString()); + } + catch (Exception e) + { + retVal = 0; + Console.WriteLine("\t\tUNEXPECTED EXCEPTION:\n\t\t\t" + e.ToString()); + } +#endif + Console.WriteLine("\n\tPassing proper structure, proper IntPtr and fDeleteOld=true to hit remaining code paths"); + ip = Marshal.AllocHGlobal(Marshal.SizeOf(someTs)); + someTs.s = "something"; + Marshal.StructureToPtr(someTs, ip, false); +#if BUG_879268 + Marshal.StructureToPtr(someTs, ip, true); +#endif + Console.WriteLine("DONE testing StructureToPtr."); + + + ////////////////////////////////////////////////////////////// + //PtrToStructure + ///////////////////////////////////////////////////////////// + Console.WriteLine("\nTesting PtrToStructure..."); +#if BUG_878933 + Console.WriteLine("\tPassing IntPtr=IntPtr.Zero"); + ip = IntPtr.Zero; + try + { + Marshal.PtrToStructure(ip, someTs); + retVal = 0; + Console.WriteLine("\t\tNO EXCEPTION THROWN! FAILED!"); + } + catch (ArgumentNullException ane) + { + Console.WriteLine("\t\tCaught Expected Exception:\n\t\t\t" + ane.ToString()); + } + catch (Exception e) + { + retVal = 0; + Console.WriteLine("\t\tUNEXPECTED EXCEPTION:\n\t\t\t" + e.ToString()); + } + + Console.WriteLine("\n\tPassing structure=null"); + ip = new IntPtr(123); + try + { + Marshal.PtrToStructure(ip, null); + retVal = 0; + Console.WriteLine("\t\tNO EXCEPTION THROWN! FAILED!"); + } + catch (ArgumentNullException ane) + { + Console.WriteLine("\t\tCaught Expected Exception:\n\t\t\t" + ane.ToString()); + } + catch (Exception e) + { + retVal = 0; + Console.WriteLine("\t\tUNEXPECTED EXCEPTION:\n\t\t\t" + e.ToString()); + } +#endif + + Console.WriteLine("\n\tPassing a value class to method override that expects a class and returns void"); + try + { + ip = new IntPtr(123); + Marshal.PtrToStructure(ip, someTs); + retVal = 0; + Console.WriteLine("\t\tNO EXCEPTION THROWN! FAILED!"); + } + catch (ArgumentException ae) + { + Console.WriteLine("\t\tCaught Expected Exception:\n\t\t\t" + ae.ToString()); + } + catch (Exception e) + { + retVal = 0; + Console.WriteLine("\t\tUNEXPECTED EXCEPTION:\n\t\t\t" + e.ToString()); + } + + Console.WriteLine("DONE testing PtrToStructure."); + +#if BUG_879277 + ////////////////////////////////////////////////////////////// + //DestroyStructure + ///////////////////////////////////////////////////////////// + Console.WriteLine("\nTesting DestroyStructure..."); + Console.WriteLine("\tPassing IntPtr=IntPtr.Zero"); + ip = IntPtr.Zero; + try + { + Marshal.DestroyStructure(ip); + retVal = 0; + Console.WriteLine("\t\tNO EXCEPTION THROWN! FAILED!"); + } + catch (ArgumentNullException ane) + { + Console.WriteLine("\t\tCaught Expected Exception:\n\t\t\t" + ane.ToString()); + } + catch (Exception e) + { + retVal = 0; + Console.WriteLine("\t\tUNEXPECTED EXCEPTION:\n\t\t\t" + e.ToString()); + } + + Console.WriteLine("\n\tPassing structuretype=null"); + ip = new IntPtr(123); + try + { + Marshal.DestroyStructure(ip, null); + retVal = 0; + Console.WriteLine("\t\tNO EXCEPTION THROWN! FAILED!"); + } + catch (ArgumentNullException ane) + { + Console.WriteLine("\t\tCaught Expected Exception:\n\t\t\t" + ane.ToString()); + } + catch (Exception e) + { + retVal = 0; + Console.WriteLine("\t\tUNEXPECTED EXCEPTION:\n\t\t\t" + e.ToString()); + } + + Console.WriteLine("\n\tPassing structuretype that does not have layout i.e. it has AUTO layout"); + try + { + Marshal.DestroyStructure(ip, someTs_Auto.GetType()); + retVal = 0; + Console.WriteLine("\t\tNO EXCEPTION THROWN! FAILED!"); + } + catch (ArgumentException ae) + { + Console.WriteLine("\t\tCaught Expected Exception:\n\t\t\t" + ae.ToString()); + } + catch (Exception e) + { + retVal = 0; + Console.WriteLine("\t\tUNEXPECTED EXCEPTION:\n\t\t\t" + e.ToString()); + } + + Console.WriteLine("\n\tPassing structuretype that does have layout i.e. the positive test case"); + ip = Marshal.AllocHGlobal(Marshal.SizeOf(someTs)); + someTs.s = null; + Marshal.StructureToPtr(someTs, ip, false); + Marshal.DestroyStructure(ip); + + Console.WriteLine("DONE testing DestroyStructure."); +#endif + + ////////////////////////////////////////////////////////////// + //SizeOf + ///////////////////////////////////////////////////////////// + Console.WriteLine("\nTesting SizeOf..."); + Console.WriteLine("\n\tPassing structure=null"); + try + { + Marshal.SizeOf(null); + retVal = 0; + Console.WriteLine("\t\tNO EXCEPTION THROWN! FAILED!"); + } + catch (ArgumentNullException ane) + { + Console.WriteLine("\t\tCaught Expected Exception:\n\t\t\t" + ane.ToString()); + } + catch (Exception e) + { + retVal = 0; + Console.WriteLine("\t\tUNEXPECTED EXCEPTION:\n\t\t\t" + e.ToString()); + } + +#if BUG_879234 + Console.WriteLine("\n\tPassing structure that has no layout and CANNOT be marshaled"); + try + { + Marshal.SizeOf(someTs_FxdLPSTR.GetType()); + retVal = 0; + Console.WriteLine("\t\tNO EXCEPTION THROWN! FAILED!"); + } + catch (ArgumentException ae) + { + Console.WriteLine("\t\tCaught Expected Exception:\n\t\t\t" + ae.ToString()); + } + catch (Exception e) + { + retVal = 0; + Console.WriteLine("\t\tUNEXPECTED EXCEPTION:\n\t\t\t" + e.ToString()); + } +#endif + + Console.WriteLine("\n\tPassing structure that has layout and can be marshaled"); + Marshal.SizeOf(someTs.GetType()); + + Console.WriteLine("DONE testing SizeOf."); + +#if BUG_879276 + ////////////////////////////////////////////////////////////// + //UnsafeAddrOfPinnedArrayElement + ///////////////////////////////////////////////////////////// + Console.WriteLine("\nTesting UnsafeAddrOfPinnedArrayElement..."); + Console.WriteLine("\tPassing arr=null"); + try + { + Marshal.UnsafeAddrOfPinnedArrayElement(null, 123); + retVal = 0; + Console.WriteLine("\t\tNO EXCEPTION THROWN! FAILED!"); + } + catch (ArgumentNullException ane) + { + Console.WriteLine("\t\tCaught Expected Exception:\n\t\t\t" + ane.ToString()); + } + catch (Exception e) + { + retVal = 0; + Console.WriteLine("\t\tUNEXPECTED EXCEPTION:\n\t\t\t" + e.ToString()); + } + + Console.WriteLine("DONE testing UnsafeAddrOfPinnedArrayElement."); +#endif + +#if BUG_879276 + ////////////////////////////////////////////////////////////// + //OffsetOf + ///////////////////////////////////////////////////////////// + Console.WriteLine("\nTesting OffsetOf..."); + + Console.WriteLine("\n\tMake sure that generic and non generic versions of the API returns the same offset."); + IntPtr nonGenericOffsetCall = Marshal.OffsetOf(typeof(SomeTestStruct), "i"); + IntPtr genericOffsetCall = Marshal.OffsetOf("i"); + if (nonGenericOffsetCall != genericOffsetCall) + { + retVal = 0; + Console.WriteLine("\t\tERROR: Generic and non generic versions of the API did not return the same offset!"); + } + + Console.WriteLine("\n\tPassing structure that has no layout and CANNOT be marshaled"); + try + { + Marshal.OffsetOf(someTs_FxdLPSTR.GetType(), "Arr"); + retVal = 0; + Console.WriteLine("\t\tNO EXCEPTION THROWN! FAILED!"); + } + catch (ArgumentException ae) + { + Console.WriteLine("\t\tCaught Expected Exception:\n\t\t\t" + ae.ToString()); + } + catch (Exception e) + { + retVal = 0; + Console.WriteLine("\t\tUNEXPECTED EXCEPTION:\n\t\t\t" + e.ToString()); + } + + Console.WriteLine("DONE testing OffsetOf."); +#endif + + ////////////////////////////////////////////////////////////// + //PtrToStringAnsi + ///////////////////////////////////////////////////////////// + Console.WriteLine("\nTesting PtrToStringAnsi..."); + Console.WriteLine("\n\tPassing ptr = null"); + try + { + Marshal.PtrToStringAnsi(IntPtr.Zero, 123); + retVal = 0; + Console.WriteLine("\t\tNO EXCEPTION THROWN! FAILED!"); + } + catch (ArgumentNullException ane) + { + Console.WriteLine("\t\tCaught Expected Exception:\n\t\t\t" + ane.ToString()); + } + catch (Exception e) + { + retVal = 0; + Console.WriteLine("\t\tUNEXPECTED EXCEPTION:\n\t\t\t" + e.ToString()); + } + + Console.WriteLine("\n\tPassing len < 0 "); + try + { + Marshal.PtrToStringAnsi(new IntPtr(123), -77); + retVal = 0; + Console.WriteLine("\t\tNO EXCEPTION THROWN! FAILED!"); + } + catch (ArgumentException ae) + { + Console.WriteLine("\t\tCaught Expected Exception:\n\t\t\t" + ae.ToString()); + } + catch (Exception e) + { + retVal = 0; + Console.WriteLine("\t\tUNEXPECTED EXCEPTION:\n\t\t\t" + e.ToString()); + } + + Console.WriteLine("DONE testing PtrToStringAnsi."); + + ////////////////////////////////////////////////////////////// + //PtrToStringUni + ///////////////////////////////////////////////////////////// + Console.WriteLine("\nTesting PtrToStringUni..."); + Console.WriteLine("\n\tPassing len < 0 "); + try + { + Marshal.PtrToStringUni(new IntPtr(123), -77); + retVal = 0; + Console.WriteLine("\t\tNO EXCEPTION THROWN! FAILED!"); + } + catch (ArgumentException ae) + { + Console.WriteLine("\t\tCaught Expected Exception:\n\t\t\t" + ae.ToString()); + } + catch (Exception e) + { + retVal = 0; + Console.WriteLine("\t\tUNEXPECTED EXCEPTION:\n\t\t\t" + e.ToString()); + } + + Console.WriteLine("DONE testing PtrToStringUni."); + + ////////////////////////////////////////////////////////////// + //Copy + ///////////////////////////////////////////////////////////// + Console.WriteLine("\nTesting Copy..."); + Console.WriteLine("\n\tPassing psrc = null "); + try + { + byte[] barr = null; + Marshal.Copy(barr, 0, new IntPtr(123), 10); + retVal = 0; + Console.WriteLine("\t\tNO EXCEPTION THROWN! FAILED!"); + } + catch (ArgumentNullException ane) + { + Console.WriteLine("\t\tCaught Expected Exception:\n\t\t\t" + ane.ToString()); + } + catch (Exception e) + { + retVal = 0; + Console.WriteLine("\t\tUNEXPECTED EXCEPTION:\n\t\t\t" + e.ToString()); + } + + Console.WriteLine("\n\tPassing startindex > numelem "); + try + { + byte[] barr = new byte[2]; + Marshal.Copy(barr, 100, new IntPtr(123), 2); + retVal = 0; + Console.WriteLine("\t\tNO EXCEPTION THROWN! FAILED!"); + } + catch (ArgumentOutOfRangeException ae) + { + Console.WriteLine("\t\tCaught Expected Exception:\n\t\t\t" + ae.ToString()); + } + catch (Exception e) + { + retVal = 0; + Console.WriteLine("\t\tUNEXPECTED EXCEPTION:\n\t\t\t" + e.ToString()); + } + + Console.WriteLine("DONE testing Copy."); + + ////////////////////////////////////////////////////////////// + //GetComInterfaceForObject + ///////////////////////////////////////////////////////////// + Console.WriteLine("\nTesting GetComInterfaceForObject..."); +#if BUG_878933 + Console.WriteLine("\n\tPassing Object = null "); + try + { + Marshal.GetComInterfaceForObject(null, null); + retVal = 0; + Console.WriteLine("\t\tNO EXCEPTION THROWN! FAILED!"); + } + catch (ArgumentNullException ane) + { + Console.WriteLine("\t\tCaught Expected Exception:\n\t\t\t" + ane.ToString()); + } + catch (Exception e) + { + retVal = 0; + Console.WriteLine("\t\tUNEXPECTED EXCEPTION:\n\t\t\t" + e.ToString()); + } + + Console.WriteLine("DONE testing GetComInterfaceForObject."); +#endif + + ////////////////////////////////////////////////////////////// + //GetObjectForIUnknown + ///////////////////////////////////////////////////////////// + Console.WriteLine("\nTesting GetObjectForIUnknown..."); +#if BUG_879254 + Console.WriteLine("\n\tPassing IntPtr = IntPtr.Zero "); + try + { + Marshal.GetObjectForIUnknown(IntPtr.Zero); + retVal = 0; + Console.WriteLine("\t\tNO EXCEPTION THROWN! FAILED!"); + } + catch (ArgumentNullException ane) + { + Console.WriteLine("\t\tCaught Expected Exception:\n\t\t\t" + ane.ToString()); + } + catch (Exception e) + { + retVal = 0; + Console.WriteLine("\t\tUNEXPECTED EXCEPTION:\n\t\t\t" + e.ToString()); + } + + Console.WriteLine("DONE testing GetObjectForIUnknown."); +#endif + ////////////////////////////////////////////////////////////// + //IsComObject + ///////////////////////////////////////////////////////////// + Console.WriteLine("\nTesting IsComObject..."); + Console.WriteLine("\n\tPassing Object = null "); + try + { + Marshal.IsComObject(null); + retVal = 0; + Console.WriteLine("\t\tNO EXCEPTION THROWN! FAILED!"); + } + catch (ArgumentNullException ane) + { + Console.WriteLine("\t\tCaught Expected Exception:\n\t\t\t" + ane.ToString()); + } + catch (Exception e) + { + retVal = 0; + Console.WriteLine("\t\tUNEXPECTED EXCEPTION:\n\t\t\t" + e.ToString()); + } + + Console.WriteLine("DONE testing IsComObject."); + + ////////////////////////////////////////////////////////////// + //QueryInterface + ///////////////////////////////////////////////////////////// + Console.WriteLine("\nTesting QueryInterface..."); +#if BUG_878933 + Console.WriteLine("\n\tPassing IUnkn = IntPtr.Zero"); + try + { + IntPtr temp = IntPtr.Zero; + Guid g = Guid.Empty; + Marshal.QueryInterface(IntPtr.Zero, ref g, out temp); + retVal = 0; + Console.WriteLine("\t\tNO EXCEPTION THROWN! FAILED!"); + } + catch (ArgumentNullException ane) + { + Console.WriteLine("\t\tCaught Expected Exception:\n\t\t\t" + ane.ToString()); + } + catch (Exception e) + { + retVal = 0; + Console.WriteLine("\t\tUNEXPECTED EXCEPTION:\n\t\t\t" + e.ToString()); + } +#endif + + Console.WriteLine("DONE testing QueryInterface."); + + ////////////////////////////////////////////////////////////// + //AddRef + ///////////////////////////////////////////////////////////// + Console.WriteLine("\nTesting AddRef..."); + Console.WriteLine("\n\tPassing IUnkn = IntPtr.Zero"); + try + { + Marshal.AddRef(IntPtr.Zero); + retVal = 0; + Console.WriteLine("\t\tNO EXCEPTION THROWN! FAILED!"); + } + catch (ArgumentNullException ane) + { + Console.WriteLine("\t\tCaught Expected Exception:\n\t\t\t" + ane.ToString()); + } + catch (Exception e) + { + retVal = 0; + Console.WriteLine("\t\tUNEXPECTED EXCEPTION:\n\t\t\t" + e.ToString()); + } + + Console.WriteLine("DONE testing AddRef."); + + ////////////////////////////////////////////////////////////// + //Release + ///////////////////////////////////////////////////////////// + Console.WriteLine("\nTesting Release..."); + Console.WriteLine("\n\tPassing IUnkn = IntPtr.Zero"); + try + { + Marshal.Release(IntPtr.Zero); + retVal = 0; + Console.WriteLine("\t\tNO EXCEPTION THROWN! FAILED!"); + } + catch (ArgumentNullException ane) + { + Console.WriteLine("\t\tCaught Expected Exception:\n\t\t\t" + ane.ToString()); + } + catch (Exception e) + { + retVal = 0; + Console.WriteLine("\t\tUNEXPECTED EXCEPTION:\n\t\t\t" + e.ToString()); + } + + Console.WriteLine("DONE testing Release."); + +#if BUG_879276 + ////////////////////////////////////////////////////////////// + //GetNativeVariantForObject + ///////////////////////////////////////////////////////////// + Console.WriteLine("\nTesting GetNativeVariantForObject..."); + Console.WriteLine("\n\tPassing pDstNativeVariant = IntPtr.Zero"); + try + { + Marshal.GetNativeVariantForObject("Some Object", IntPtr.Zero); + retVal = 0; + Console.WriteLine("\t\tNO EXCEPTION THROWN! FAILED!"); + } + catch (ArgumentNullException ane) + { + Console.WriteLine("\t\tCaught Expected Exception:\n\t\t\t" + ane.ToString()); + } + catch (Exception e) + { + retVal = 0; + Console.WriteLine("\t\tUNEXPECTED EXCEPTION:\n\t\t\t" + e.ToString()); + } + + Console.WriteLine("DONE testing GetNativeVariantForObject."); + + ////////////////////////////////////////////////////////////// + //GetObjectForNativeVariant + ///////////////////////////////////////////////////////////// + Console.WriteLine("\nTesting GetObjectForNativeVariant..."); + Console.WriteLine("\n\tPassing pSrcNativeVariant = IntPtr.Zero"); + try + { + Marshal.GetObjectForNativeVariant(IntPtr.Zero); + retVal = 0; + Console.WriteLine("\t\tNO EXCEPTION THROWN! FAILED!"); + } + catch (ArgumentNullException ane) + { + Console.WriteLine("\t\tCaught Expected Exception:\n\t\t\t" + ane.ToString()); + } + catch (Exception e) + { + retVal = 0; + Console.WriteLine("\t\tUNEXPECTED EXCEPTION:\n\t\t\t" + e.ToString()); + } + + Console.WriteLine("DONE testing GetObjectForNativeVariant."); +#endif + +#if BUG_879277 + ////////////////////////////////////////////////////////////// + //GetObjectsForNativeVariants + ///////////////////////////////////////////////////////////// + Console.WriteLine("\nTesting GetObjectsForNativeVariants..."); + Console.WriteLine("\n\tPassing aSrcNativeVariant = IntPtr.Zero"); + try + { + Marshal.GetObjectsForNativeVariants(IntPtr.Zero, 0); + retVal = 0; + Console.WriteLine("\t\tNO EXCEPTION THROWN! FAILED!"); + } + catch (ArgumentNullException ane) + { + Console.WriteLine("\t\tCaught Expected Exception:\n\t\t\t" + ane.ToString()); + } + catch (Exception e) + { + retVal = 0; + Console.WriteLine("\t\tUNEXPECTED EXCEPTION:\n\t\t\t" + e.ToString()); + } + + Console.WriteLine("\n\tPassing cVars < 0"); + try + { + Marshal.GetObjectsForNativeVariants(new IntPtr(123), -77); + retVal = 0; + Console.WriteLine("\t\tNO EXCEPTION THROWN! FAILED!"); + } + catch (ArgumentOutOfRangeException ae) + { + Console.WriteLine("\t\tCaught Expected Exception:\n\t\t\t" + ae.ToString()); + } + catch (Exception e) + { + retVal = 0; + Console.WriteLine("\t\tUNEXPECTED EXCEPTION:\n\t\t\t" + e.ToString()); + } + + Console.WriteLine("\n\tTesting the generic version of the API"); + Variant v = new Variant(); + v.vt = 0; + v.wReserved1 = 0; + v.wReserved2 = 0; + v.wReserved3 = 0; + v.bstrVal = IntPtr.Zero; + v.pRecInfo = IntPtr.Zero; + IntPtr parray = Marshal.AllocHGlobal(1 * Marshal.SizeOf(v)); + Marshal.GetNativeVariantForObject(0, parray); + + ushort[] variantsArrayGeneric = Marshal.GetObjectsForNativeVariants(parray, 1); + Object[] variantsArray = Marshal.GetObjectsForNativeVariants(parray, 1); + + if (variantsArrayGeneric.Length != variantsArray.Length) + { + retVal = 0; + Console.WriteLine("\t\tGeneric and non generic version calls returned different sized arrays\n\t\t\t"); + } + + for (int i = 0; i < variantsArray.Length; i++) + { + if ((ushort)variantsArray[i] != variantsArrayGeneric[i]) + { + retVal = 0; + Console.WriteLine("\t\tGeneric and non generic version calls returned different arrays\n\t\t\t"); + } + } + + bool thrown = false; + try + { + String[] marray = Marshal.GetObjectsForNativeVariants(parray, 1); + } + catch (InvalidCastException e) + { + thrown = true; + Console.WriteLine("Expected invalid cast exception was thrown."); + } + catch (Exception e) + { + retVal = 0; + Console.WriteLine("\t\tUNEXPECTED EXCEPTION:\n\t\t\t" + e.ToString()); + } + if (thrown != true) + { + Console.WriteLine("Expected invalid cast exception was NOT thrown."); + retVal = 0; + } + + thrown = false; + try + { + int[] marray = Marshal.GetObjectsForNativeVariants(parray, 1); + } + catch (InvalidCastException e) + { + thrown = true; + Console.WriteLine("Expected invalid cast exception was thrown."); + } + catch (Exception e) + { + retVal = 0; + Console.WriteLine("\t\tUNEXPECTED EXCEPTION:\n\t\t\t" + e.ToString()); + } + if (thrown != true) + { + Console.WriteLine("Expected invalid cast exception was NOT thrown."); + retVal = 0; + } + + Console.WriteLine("DONE testing GetObjectsForNativeVariants."); +#endif + +#if BUG_879277 + ////////////////////////////////////////////////////////////// + //GetStartComSlot + ///////////////////////////////////////////////////////////// + Console.WriteLine("\nTesting GetStartComSlot..."); + Console.WriteLine("\n\tPassing t = null"); + try + { + Marshal.GetStartComSlot(null); + retVal = 0; + Console.WriteLine("\t\tNO EXCEPTION THROWN! FAILED!"); + } + catch (ArgumentNullException ane) + { + Console.WriteLine("\t\tCaught Expected Exception:\n\t\t\t" + ane.ToString()); + } + catch (Exception e) + { + retVal = 0; + Console.WriteLine("\t\tUNEXPECTED EXCEPTION:\n\t\t\t" + e.ToString()); + } + + Console.WriteLine("DONE testing GetStartComSlot."); +#endif + + Console.WriteLine((retVal == 0) ? "\nFAILED!" : "\nPASSED!"); + return retVal; + } +} \ No newline at end of file diff --git a/tests/src/Interop/MarshalAPI/Miscellaneous/MarshalClassTests.csproj b/tests/src/Interop/MarshalAPI/Miscellaneous/MarshalClassTests.csproj new file mode 100644 index 0000000..1919b56 --- /dev/null +++ b/tests/src/Interop/MarshalAPI/Miscellaneous/MarshalClassTests.csproj @@ -0,0 +1,47 @@ + + + + + Debug + AnyCPU + MarshalClassTests + 2.0 + {F1E66554-8C8E-4141-85CF-D0CD6A0CD0B0} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages + ..\..\ + + 7a9bfb7d + $(DefineConstants);STATIC + + + + + + + + + False + + + + + + + + + + + + + + + {c8c0dc74-fac4-45b1-81fe-70c4808366e0} + CoreCLRTestLibrary + + + + diff --git a/tests/src/Interop/MarshalAPI/Miscellaneous/project.json b/tests/src/Interop/MarshalAPI/Miscellaneous/project.json new file mode 100644 index 0000000..f1fce28 --- /dev/null +++ b/tests/src/Interop/MarshalAPI/Miscellaneous/project.json @@ -0,0 +1,35 @@ +{ + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1-rc2-23816", + "System.Collections": "4.0.10", + "System.Collections.NonGeneric": "4.0.1-rc2-23816", + "System.Collections.Specialized": "4.0.1-rc2-23816", + "System.ComponentModel": "4.0.1-rc2-23816", + "System.Console": "4.0.0-rc2-23816", + "System.Diagnostics.Process": "4.1.0-rc2-23816", + "System.Globalization": "4.0.10", + "System.Globalization.Calendars": "4.0.0", + "System.IO": "4.0.10", + "System.IO.FileSystem": "4.0.0", + "System.IO.FileSystem.Primitives": "4.0.0", + "System.Linq": "4.0.1-rc2-23816", + "System.Linq.Queryable": "4.0.1-rc2-23816", + "System.Reflection": "4.0.10", + "System.Reflection.Primitives": "4.0.0", + "System.Runtime": "4.1.0-rc2-23816", + "System.Runtime.Extensions": "4.0.10", + "System.Runtime.Handles": "4.0.0", + "System.Runtime.InteropServices": "4.1.0-rc2-23816", + "System.Runtime.Loader": "4.0.0-rc2-23816", + "System.Text.Encoding": "4.0.10", + "System.Threading": "4.0.10", + "System.Threading.Thread": "4.0.0-rc2-23816", + "System.Xml.ReaderWriter": "4.0.11-rc2-23816", + "System.Xml.XDocument": "4.0.11-rc2-23816", + "System.Xml.XmlDocument": "4.0.1-rc2-23816", + "System.Xml.XmlSerializer": "4.0.11-rc2-23816" + }, + "frameworks": { + "dnxcore50": {} + } +} diff --git a/tests/src/Interop/MarshalAPI/OffsetOf/project.json b/tests/src/Interop/MarshalAPI/OffsetOf/project.json index 0976b60..a2e84dc 100644 --- a/tests/src/Interop/MarshalAPI/OffsetOf/project.json +++ b/tests/src/Interop/MarshalAPI/OffsetOf/project.json @@ -1,32 +1,33 @@ { "dependencies": { "Microsoft.NETCore.Platforms": "1.0.1-rc2-23816", - "System.Collections": "4.0.10-beta-23302", - "System.Collections.NonGeneric": "4.0.1-beta-23302", - "System.Collections.Specialized": "4.0.1-beta-23302", - "System.ComponentModel": "4.0.1-beta-23302", - "System.Console": "4.0.0-beta-23302", - "System.Diagnostics.Process": "4.0.0-beta-23302", - "System.Globalization": "4.0.10-beta-23302", - "System.Globalization.Calendars": "4.0.0-beta-23302", - "System.IO": "4.0.10-beta-23302", - "System.IO.FileSystem": "4.0.0-beta-23302", - "System.IO.FileSystem.Primitives": "4.0.0-beta-23302", - "System.Linq": "4.0.1-beta-23302", - "System.Linq.Queryable": "4.0.1-beta-23302", - "System.Reflection": "4.0.10-beta-23302", - "System.Reflection.Primitives": "4.0.0-beta-23302", - "System.Runtime": "4.0.20-beta-23302", - "System.Runtime.Extensions": "4.0.10-beta-23302", - "System.Runtime.Handles": "4.0.0-beta-23302", - "System.Runtime.InteropServices": "4.0.20-beta-23302", - "System.Runtime.Loader": "4.0.0-beta-23302", - "System.Text.Encoding": "4.0.10-beta-23302", - "System.Threading": "4.0.10-beta-23302", - "System.Xml.ReaderWriter": "4.0.11-beta-23302", - "System.Xml.XDocument": "4.0.11-beta-23302", - "System.Xml.XmlDocument": "4.0.1-beta-23302", - "System.Xml.XmlSerializer": "4.0.11-beta-23302" + "System.Collections": "4.0.10", + "System.Collections.NonGeneric": "4.0.1-rc2-23816", + "System.Collections.Specialized": "4.0.1-rc2-23816", + "System.ComponentModel": "4.0.1-rc2-23816", + "System.Console": "4.0.0-rc2-23816", + "System.Diagnostics.Process": "4.1.0-rc2-23816", + "System.Globalization": "4.0.10", + "System.Globalization.Calendars": "4.0.0", + "System.IO": "4.0.10", + "System.IO.FileSystem": "4.0.0", + "System.IO.FileSystem.Primitives": "4.0.0", + "System.Linq": "4.0.1-rc2-23816", + "System.Linq.Queryable": "4.0.1-rc2-23816", + "System.Reflection": "4.0.10", + "System.Reflection.Primitives": "4.0.0", + "System.Runtime": "4.1.0-rc2-23816", + "System.Runtime.Extensions": "4.0.10", + "System.Runtime.Handles": "4.0.0", + "System.Runtime.InteropServices": "4.1.0-rc2-23816", + "System.Runtime.Loader": "4.0.0-rc2-23816", + "System.Text.Encoding": "4.0.10", + "System.Threading": "4.0.10", + "System.Threading.Thread": "4.0.0-rc2-23816", + "System.Xml.ReaderWriter": "4.0.11-rc2-23816", + "System.Xml.XDocument": "4.0.11-rc2-23816", + "System.Xml.XmlDocument": "4.0.1-rc2-23816", + "System.Xml.XmlSerializer": "4.0.11-rc2-23816" }, "frameworks": { "dnxcore50": {} diff --git a/tests/src/Interop/MarshalAPI/String/project.json b/tests/src/Interop/MarshalAPI/String/project.json index 0976b60..a2e84dc 100644 --- a/tests/src/Interop/MarshalAPI/String/project.json +++ b/tests/src/Interop/MarshalAPI/String/project.json @@ -1,32 +1,33 @@ { "dependencies": { "Microsoft.NETCore.Platforms": "1.0.1-rc2-23816", - "System.Collections": "4.0.10-beta-23302", - "System.Collections.NonGeneric": "4.0.1-beta-23302", - "System.Collections.Specialized": "4.0.1-beta-23302", - "System.ComponentModel": "4.0.1-beta-23302", - "System.Console": "4.0.0-beta-23302", - "System.Diagnostics.Process": "4.0.0-beta-23302", - "System.Globalization": "4.0.10-beta-23302", - "System.Globalization.Calendars": "4.0.0-beta-23302", - "System.IO": "4.0.10-beta-23302", - "System.IO.FileSystem": "4.0.0-beta-23302", - "System.IO.FileSystem.Primitives": "4.0.0-beta-23302", - "System.Linq": "4.0.1-beta-23302", - "System.Linq.Queryable": "4.0.1-beta-23302", - "System.Reflection": "4.0.10-beta-23302", - "System.Reflection.Primitives": "4.0.0-beta-23302", - "System.Runtime": "4.0.20-beta-23302", - "System.Runtime.Extensions": "4.0.10-beta-23302", - "System.Runtime.Handles": "4.0.0-beta-23302", - "System.Runtime.InteropServices": "4.0.20-beta-23302", - "System.Runtime.Loader": "4.0.0-beta-23302", - "System.Text.Encoding": "4.0.10-beta-23302", - "System.Threading": "4.0.10-beta-23302", - "System.Xml.ReaderWriter": "4.0.11-beta-23302", - "System.Xml.XDocument": "4.0.11-beta-23302", - "System.Xml.XmlDocument": "4.0.1-beta-23302", - "System.Xml.XmlSerializer": "4.0.11-beta-23302" + "System.Collections": "4.0.10", + "System.Collections.NonGeneric": "4.0.1-rc2-23816", + "System.Collections.Specialized": "4.0.1-rc2-23816", + "System.ComponentModel": "4.0.1-rc2-23816", + "System.Console": "4.0.0-rc2-23816", + "System.Diagnostics.Process": "4.1.0-rc2-23816", + "System.Globalization": "4.0.10", + "System.Globalization.Calendars": "4.0.0", + "System.IO": "4.0.10", + "System.IO.FileSystem": "4.0.0", + "System.IO.FileSystem.Primitives": "4.0.0", + "System.Linq": "4.0.1-rc2-23816", + "System.Linq.Queryable": "4.0.1-rc2-23816", + "System.Reflection": "4.0.10", + "System.Reflection.Primitives": "4.0.0", + "System.Runtime": "4.1.0-rc2-23816", + "System.Runtime.Extensions": "4.0.10", + "System.Runtime.Handles": "4.0.0", + "System.Runtime.InteropServices": "4.1.0-rc2-23816", + "System.Runtime.Loader": "4.0.0-rc2-23816", + "System.Text.Encoding": "4.0.10", + "System.Threading": "4.0.10", + "System.Threading.Thread": "4.0.0-rc2-23816", + "System.Xml.ReaderWriter": "4.0.11-rc2-23816", + "System.Xml.XDocument": "4.0.11-rc2-23816", + "System.Xml.XmlDocument": "4.0.1-rc2-23816", + "System.Xml.XmlSerializer": "4.0.11-rc2-23816" }, "frameworks": { "dnxcore50": {} diff --git a/tests/src/Interop/MarshalAPI/UnsafeAddrOfPinnedArrayElement/project.json b/tests/src/Interop/MarshalAPI/UnsafeAddrOfPinnedArrayElement/project.json index 0976b60..a2e84dc 100644 --- a/tests/src/Interop/MarshalAPI/UnsafeAddrOfPinnedArrayElement/project.json +++ b/tests/src/Interop/MarshalAPI/UnsafeAddrOfPinnedArrayElement/project.json @@ -1,32 +1,33 @@ { "dependencies": { "Microsoft.NETCore.Platforms": "1.0.1-rc2-23816", - "System.Collections": "4.0.10-beta-23302", - "System.Collections.NonGeneric": "4.0.1-beta-23302", - "System.Collections.Specialized": "4.0.1-beta-23302", - "System.ComponentModel": "4.0.1-beta-23302", - "System.Console": "4.0.0-beta-23302", - "System.Diagnostics.Process": "4.0.0-beta-23302", - "System.Globalization": "4.0.10-beta-23302", - "System.Globalization.Calendars": "4.0.0-beta-23302", - "System.IO": "4.0.10-beta-23302", - "System.IO.FileSystem": "4.0.0-beta-23302", - "System.IO.FileSystem.Primitives": "4.0.0-beta-23302", - "System.Linq": "4.0.1-beta-23302", - "System.Linq.Queryable": "4.0.1-beta-23302", - "System.Reflection": "4.0.10-beta-23302", - "System.Reflection.Primitives": "4.0.0-beta-23302", - "System.Runtime": "4.0.20-beta-23302", - "System.Runtime.Extensions": "4.0.10-beta-23302", - "System.Runtime.Handles": "4.0.0-beta-23302", - "System.Runtime.InteropServices": "4.0.20-beta-23302", - "System.Runtime.Loader": "4.0.0-beta-23302", - "System.Text.Encoding": "4.0.10-beta-23302", - "System.Threading": "4.0.10-beta-23302", - "System.Xml.ReaderWriter": "4.0.11-beta-23302", - "System.Xml.XDocument": "4.0.11-beta-23302", - "System.Xml.XmlDocument": "4.0.1-beta-23302", - "System.Xml.XmlSerializer": "4.0.11-beta-23302" + "System.Collections": "4.0.10", + "System.Collections.NonGeneric": "4.0.1-rc2-23816", + "System.Collections.Specialized": "4.0.1-rc2-23816", + "System.ComponentModel": "4.0.1-rc2-23816", + "System.Console": "4.0.0-rc2-23816", + "System.Diagnostics.Process": "4.1.0-rc2-23816", + "System.Globalization": "4.0.10", + "System.Globalization.Calendars": "4.0.0", + "System.IO": "4.0.10", + "System.IO.FileSystem": "4.0.0", + "System.IO.FileSystem.Primitives": "4.0.0", + "System.Linq": "4.0.1-rc2-23816", + "System.Linq.Queryable": "4.0.1-rc2-23816", + "System.Reflection": "4.0.10", + "System.Reflection.Primitives": "4.0.0", + "System.Runtime": "4.1.0-rc2-23816", + "System.Runtime.Extensions": "4.0.10", + "System.Runtime.Handles": "4.0.0", + "System.Runtime.InteropServices": "4.1.0-rc2-23816", + "System.Runtime.Loader": "4.0.0-rc2-23816", + "System.Text.Encoding": "4.0.10", + "System.Threading": "4.0.10", + "System.Threading.Thread": "4.0.0-rc2-23816", + "System.Xml.ReaderWriter": "4.0.11-rc2-23816", + "System.Xml.XDocument": "4.0.11-rc2-23816", + "System.Xml.XmlDocument": "4.0.1-rc2-23816", + "System.Xml.XmlSerializer": "4.0.11-rc2-23816" }, "frameworks": { "dnxcore50": {} diff --git a/tests/src/Interop/common/Assertion.cs b/tests/src/Interop/common/Assertion.cs index 30dd072..3fd03f7 100644 --- a/tests/src/Interop/common/Assertion.cs +++ b/tests/src/Interop/common/Assertion.cs @@ -17,6 +17,18 @@ namespace CoreFXTestLibrary /// public static class Assert { + + + public static void ErrorWriteLine(string message) + { + throw new Exception(message); + } + + public static void ErrorWriteLine(string message,Exception ex) + { + throw new Exception(message,ex); + } + /// /// Asserts that the given delegate throws an with the given parameter name. /// diff --git a/tests/src/Interop/common/xplatform.h b/tests/src/Interop/common/xplatform.h index 0d358bd..e37e8ab 100644 --- a/tests/src/Interop/common/xplatform.h +++ b/tests/src/Interop/common/xplatform.h @@ -93,6 +93,15 @@ typedef union tagCY { long int64; } CY, CURRENCY; + +class IUnknown +{ +public: + virtual int QueryInterface(void* riid,void** ppvObject); + virtual unsigned long AddRef(); + virtual unsigned long Release(); +}; + #define CoTaskMemAlloc(p) malloc(p) #define CoTaskMemFree(p) free(p)