<CLRTestTargetUnsupported Condition="'$(TargetsWindows)' != 'true'">true</CLRTestTargetUnsupported>
</PropertyGroup>
<ItemGroup>
- <Compile Include="$(MSBuildProjectName).cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CMakeLists.txt" />
+ <Compile Include="*.cs" />
</ItemGroup>
</Project>
--- /dev/null
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+namespace Char
+{
+ public partial class PInvoke_Default
+ {
+ public static void RunTest()
+ {
+ RunTest(bestFitMapping: true, throwOnUnmappableChar: false);
+ }
+ }
+}
+
+namespace LPStr
+{
+ public partial class PInvoke_Default
+ {
+ public static void RunTest()
+ {
+ RunTest(bestFitMapping: true, throwOnUnmappableChar: false);
+ }
+ }
+}
--- /dev/null
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Runtime.InteropServices;
+
+[assembly: BestFitMapping(false, ThrowOnUnmappableChar = false)]
<CLRTestTargetUnsupported Condition="'$(TargetsWindows)' != 'true'">true</CLRTestTargetUnsupported>
</PropertyGroup>
<ItemGroup>
- <Compile Include="$(MSBuildProjectName).cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CMakeLists.txt" />
+ <Compile Include="*.cs" />
</ItemGroup>
</Project>
--- /dev/null
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+namespace Char
+{
+ public partial class PInvoke_Default
+ {
+ public static void RunTest()
+ {
+ RunTest(bestFitMapping: false, throwOnUnmappableChar: false);
+ }
+ }
+}
+
+namespace LPStr
+{
+ public partial class PInvoke_Default
+ {
+ public static void RunTest()
+ {
+ RunTest(bestFitMapping: false, throwOnUnmappableChar: false);
+ }
+ }
+}
--- /dev/null
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Runtime.InteropServices;
+
+[assembly: BestFitMapping(false, ThrowOnUnmappableChar = true)]
<CLRTestTargetUnsupported Condition="'$(TargetsWindows)' != 'true'">true</CLRTestTargetUnsupported>
</PropertyGroup>
<ItemGroup>
- <Compile Include="$(MSBuildProjectName).cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CMakeLists.txt" />
+ <Compile Include="*.cs" />
</ItemGroup>
</Project>
--- /dev/null
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+namespace Char
+{
+ public partial class PInvoke_Default
+ {
+ public static void RunTest()
+ {
+ RunTest(bestFitMapping: false, throwOnUnmappableChar: true);
+ }
+ }
+}
+
+namespace LPStr
+{
+ public partial class PInvoke_Default
+ {
+ public static void RunTest()
+ {
+ RunTest(bestFitMapping: false, throwOnUnmappableChar: true);
+ }
+ }
+}
--- /dev/null
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Runtime.InteropServices;
+
+[assembly: BestFitMapping(true, ThrowOnUnmappableChar = false)]
<CLRTestTargetUnsupported Condition="'$(TargetsWindows)' != 'true'">true</CLRTestTargetUnsupported>
</PropertyGroup>
<ItemGroup>
- <Compile Include="$(MSBuildProjectName).cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CMakeLists.txt" />
+ <Compile Include="*.cs" />
</ItemGroup>
</Project>
--- /dev/null
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+namespace Char
+{
+ public partial class PInvoke_Default
+ {
+ public static void RunTest()
+ {
+ RunTest(bestFitMapping: true, throwOnUnmappableChar: false);
+ }
+ }
+}
+
+namespace LPStr
+{
+ public partial class PInvoke_Default
+ {
+ public static void RunTest()
+ {
+ RunTest(bestFitMapping: true, throwOnUnmappableChar: false);
+ }
+ }
+}
--- /dev/null
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Runtime.InteropServices;
+
+[assembly: BestFitMapping(true, ThrowOnUnmappableChar = true)]
<CLRTestTargetUnsupported Condition="'$(TargetsWindows)' != 'true'">true</CLRTestTargetUnsupported>
</PropertyGroup>
<ItemGroup>
- <Compile Include="$(MSBuildProjectName).cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CMakeLists.txt" />
+ <Compile Include="*.cs" />
</ItemGroup>
</Project>
--- /dev/null
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+namespace Char
+{
+ public partial class PInvoke_Default
+ {
+ public static void RunTest()
+ {
+ RunTest(bestFitMapping: true, throwOnUnmappableChar: true);
+ }
+ }
+}
+
+namespace LPStr
+{
+ public partial class PInvoke_Default
+ {
+ public static void RunTest()
+ {
+ RunTest(bestFitMapping: true, throwOnUnmappableChar: true);
+ }
+ }
+}
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Text;
-using System.Runtime.InteropServices;
-using Xunit;
-
-[assembly: BestFitMapping(false, ThrowOnUnmappableChar = false)]
-
-public class BFM_CharMarshaler
-{
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool Char_In([In]char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool Char_InByRef([In]ref char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool Char_InOutByRef([In, Out]ref char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_In_String([In]String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_InByRef_String([In]ref String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_InOutByRef_String([In, Out]ref String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_In_StringBuilder([In]StringBuilder s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_InByRef_StringBuilder([In]ref StringBuilder s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_InOutByRef_StringBuilder([In, Out]ref StringBuilder s);
-
- static String GetValidString()
- {
- return "This is the initial test string.";
- }
-
- static String GetInvalidString()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl.ToString();
- }
-
- static StringBuilder GetValidStringBuilder()
- {
- StringBuilder sb = new StringBuilder("test string.");
- return sb;
- }
-
- static StringBuilder GetInvalidStringBuilder()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl;
- }
-
- static char GetInvalidChar()
- {
- return (char)0x2216;
- }
-
- static char GetValidChar()
- {
- return 'c';
- }
-
- static void testChar()
- {
- Assert.True(Char_In(GetInvalidChar()));
-
- Assert.True(Char_In(GetValidChar()));
-
- char cTemp = GetInvalidChar();
- Assert.True(Char_InByRef(ref cTemp));
-
- cTemp = GetValidChar();
- Assert.True(Char_InByRef(ref cTemp));
-
- cTemp = GetInvalidChar();
- Assert.True(Char_InOutByRef(ref cTemp));
- Assert.Equal('?', cTemp);
-
- cTemp = GetValidChar();
- char cTempClone = cTemp;
- Assert.True(Char_InOutByRef(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
- }
-
- static void testCharBufferString()
- {
- Assert.True(CharBuffer_In_String(GetInvalidString()));
-
- Assert.True(CharBuffer_In_String(GetValidString()));
-
- String cTemp = GetInvalidString();
- Assert.True(CharBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- Assert.True(CharBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetInvalidString();
- String cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_String(ref cTemp));
- Assert.NotEqual(cTempClone, cTemp);
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
- }
-
- static void testCharBufferStringBuilder()
- {
- StringBuilder sb = GetInvalidStringBuilder();
- Assert.True(CharBuffer_In_StringBuilder(sb));
-
- Assert.True(CharBuffer_In_StringBuilder(GetValidStringBuilder()));
-
- StringBuilder cTemp = GetInvalidStringBuilder();
- Assert.True(CharBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- Assert.True(CharBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetInvalidStringBuilder();
- StringBuilder cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.NotEqual(cTempClone.ToString(), cTemp.ToString());
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
- }
-
- static void runTest()
- {
- testChar();
- testCharBufferString();
- testCharBufferStringBuilder();
- }
-
- public static int Main()
- {
- if (System.Globalization.CultureInfo.CurrentCulture.Name != "en-US")
- {
- Console.WriteLine("Non-US English platforms are not supported.\nPassing without running tests");
-
- Console.WriteLine("--- Success");
- return 100;
- }
-
- try
- {
- runTest();
- return 100;
- } catch (Exception e){
- Console.WriteLine($"Test Failure: {e}");
- return 101;
- }
- }
-}
+++ /dev/null
-<Project Sdk="Microsoft.NET.Sdk">
- <PropertyGroup>
- <OutputType>Exe</OutputType>
- <!-- Test unsupported outside of windows -->
- <CLRTestTargetUnsupported Condition="'$(TargetsWindows)' != 'true'">true</CLRTestTargetUnsupported>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="$(MSBuildProjectName).cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CMakeLists.txt" />
- </ItemGroup>
-</Project>
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Text;
-using System.Runtime.InteropServices;
-using Xunit;
-
-[assembly: BestFitMapping(false, ThrowOnUnmappableChar = false)]
-
-public class BFM_CharMarshaler
-{
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool Char_In([In]char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool Char_InByRef([In]ref char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool Char_InOutByRef([In, Out]ref char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_In_String([In]String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_InByRef_String([In]ref String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_InOutByRef_String([In, Out]ref String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_In_StringBuilder([In]StringBuilder s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_InByRef_StringBuilder([In]ref StringBuilder s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_InOutByRef_StringBuilder([In, Out]ref StringBuilder s);
-
- static String GetValidString()
- {
- return "This is the initial test string.";
- }
-
- static String GetInvalidString()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl.ToString();
- }
-
- static StringBuilder GetValidStringBuilder()
- {
- StringBuilder sb = new StringBuilder("test string.");
- return sb;
- }
-
- static StringBuilder GetInvalidStringBuilder()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl;
- }
-
- static char GetInvalidChar()
- {
- return (char)0x2216;
- }
-
- static char GetValidChar()
- {
- return 'c';
- }
-
- static void testChar()
- {
- Assert.Throws<ArgumentException>(() => Char_In(GetInvalidChar()));
-
- Assert.True(Char_In(GetValidChar()));
-
- char cTemp = GetInvalidChar();
- Assert.Throws<ArgumentException>(() => Char_InByRef(ref cTemp));
-
- cTemp = GetValidChar();
- Assert.True(Char_InByRef(ref cTemp));
-
- cTemp = GetInvalidChar();
- Assert.Throws<ArgumentException>(() => Char_InOutByRef(ref cTemp));
-
- cTemp = GetValidChar();
- char cTempClone = cTemp;
- Assert.True(Char_InOutByRef(ref cTemp));
- }
-
- static void testCharBufferString()
- {
- Assert.Throws<ArgumentException>(() => CharBuffer_In_String(GetInvalidString()));
-
- Assert.True(CharBuffer_In_String(GetValidString()));
-
- String cTemp = GetInvalidString();
- Assert.Throws<ArgumentException>(() => CharBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- Assert.True(CharBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetInvalidString();
- Assert.Throws<ArgumentException>(() => CharBuffer_InOutByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- String cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_String(ref cTemp));
- }
-
- static void testCharBufferStringBuilder()
- {
- Assert.Throws<ArgumentException>(() => CharBuffer_In_StringBuilder(GetInvalidStringBuilder()));
-
- Assert.True(CharBuffer_In_StringBuilder(GetValidStringBuilder()));
-
- StringBuilder cTemp = GetInvalidStringBuilder();
- Assert.Throws<ArgumentException>(() => CharBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- Assert.True(CharBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetInvalidStringBuilder();
- Assert.Throws<ArgumentException>(() => CharBuffer_InOutByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- StringBuilder cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
- }
-
- static void runTest()
- {
- testChar();
- testCharBufferString();
- testCharBufferStringBuilder();
- }
-
- public static int Main()
- {
- if (System.Globalization.CultureInfo.CurrentCulture.Name != "en-US")
- {
- Console.WriteLine("Non-US English platforms are not supported.\nPassing without running tests");
-
- Console.WriteLine("--- Success");
- return 100;
- }
-
- try
- {
- runTest();
- return 100;
- } catch (Exception e){
- Console.WriteLine($"Test Failure: {e}");
- return 101;
- }
- }
-}
+++ /dev/null
-<Project Sdk="Microsoft.NET.Sdk">
- <PropertyGroup>
- <OutputType>Exe</OutputType>
- <!-- Test unsupported outside of windows -->
- <CLRTestTargetUnsupported Condition="'$(TargetsWindows)' != 'true'">true</CLRTestTargetUnsupported>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="$(MSBuildProjectName).cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CMakeLists.txt" />
- </ItemGroup>
-</Project>
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Text;
-using System.Runtime.InteropServices;
-using Xunit;
-
-[assembly: BestFitMapping(false, ThrowOnUnmappableChar = false)]
-
-public class BFM_CharMarshaler
-{
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool Char_In([In]char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool Char_InByRef([In]ref char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool Char_InOutByRef([In, Out]ref char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_In_String([In]String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_InByRef_String([In]ref String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_InOutByRef_String([In, Out]ref String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_In_StringBuilder([In]StringBuilder s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_InByRef_StringBuilder([In]ref StringBuilder s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_InOutByRef_StringBuilder([In, Out]ref StringBuilder s);
-
- static String GetValidString()
- {
- return "This is the initial test string.";
- }
-
- static String GetInvalidString()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl.ToString();
- }
-
- static StringBuilder GetValidStringBuilder()
- {
- StringBuilder sb = new StringBuilder("test string.");
- return sb;
- }
-
- static StringBuilder GetInvalidStringBuilder()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl;
- }
-
- static char GetInvalidChar()
- {
- return (char)0x2216;
- }
-
- static char GetValidChar()
- {
- return 'c';
- }
-
- static void testChar()
- {
- Assert.True(Char_In(GetInvalidChar()));
- Assert.True(Char_In(GetValidChar()));
-
- char cTemp = GetInvalidChar();
- char cTempClone = cTemp;
- Assert.True(Char_InByRef(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
-
- cTemp = GetValidChar();
- cTempClone = cTemp;
- Assert.True(Char_InByRef(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
-
- cTemp = GetInvalidChar();
- cTempClone = cTemp;
- Assert.True(Char_InOutByRef(ref cTemp));
- Assert.NotEqual(cTempClone, cTemp);
-
- cTemp = GetValidChar();
- cTempClone = cTemp;
- Assert.True(Char_InOutByRef(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
- }
-
- static void testCharBufferString()
- {
- Assert.True(CharBuffer_In_String(GetInvalidString()));
-
- Assert.True(CharBuffer_In_String(GetValidString()));
-
- String cTemp = GetInvalidString();
- String cTempClone = cTemp;
- Assert.True(CharBuffer_InByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
-
- cTemp = GetInvalidString();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_String(ref cTemp));
- Assert.NotEqual(cTempClone, cTemp);
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
- }
-
- static void testCharBufferStringBuilder()
- {
- Assert.True(CharBuffer_In_StringBuilder(GetInvalidStringBuilder()));
-
- Assert.True(CharBuffer_In_StringBuilder(GetValidStringBuilder()));
-
- StringBuilder cTemp = GetInvalidStringBuilder();
- StringBuilder cTempClone = cTemp;
- Assert.True(CharBuffer_InByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
-
- cTemp = GetInvalidStringBuilder();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.NotEqual(cTempClone.ToString(), cTemp.ToString());
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
- }
-
- static void runTest()
- {
- testChar();
- testCharBufferString();
- testCharBufferStringBuilder();
- }
-
- public static int Main()
- {
- if (System.Globalization.CultureInfo.CurrentCulture.Name != "en-US")
- {
- Console.WriteLine("Non-US English platforms are not supported.\nPassing without running tests");
-
- Console.WriteLine("--- Success");
- return 100;
- }
-
- try
- {
- runTest();
- return 100;
- } catch (Exception e){
- Console.WriteLine($"Test Failure: {e}");
- return 101;
- }
- }
-}
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Text;
-using System.Runtime.InteropServices;
-using Xunit;
-
-[assembly: BestFitMapping(false, ThrowOnUnmappableChar = false)]
-
-public class BFM_CharMarshaler
-{
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool Char_In([In]char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool Char_InByRef([In]ref char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool Char_InOutByRef([In, Out]ref char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_In_String([In]String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_InByRef_String([In]ref String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_InOutByRef_String([In, Out]ref String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_In_StringBuilder([In]StringBuilder s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_InByRef_StringBuilder([In]ref StringBuilder s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_InOutByRef_StringBuilder([In, Out]ref StringBuilder s);
-
- static String GetValidString()
- {
- return "This is the initial test string.";
- }
-
- static String GetInvalidString()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- //sbl.Append ('乀');
- return sbl.ToString();
- }
-
- static StringBuilder GetValidStringBuilder()
- {
- StringBuilder sb = new StringBuilder("test string.");
- return sb;
- }
-
- static StringBuilder GetInvalidStringBuilder()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- //sbl.Append ('乀');
- return sbl;
- }
-
- static char GetInvalidChar()
- {
- return (char)0x2216;
- }
-
- static char GetValidChar()
- {
- return 'c';
- }
-
- static void testChar()
- {
- Assert.True(Char_In(GetInvalidChar()));
-
- Assert.True(Char_In(GetValidChar()));
-
- char cTemp = GetInvalidChar();
- char cTempClone = GetInvalidChar();
- Assert.True(Char_InByRef(ref cTemp));
-
- cTemp = GetValidChar();
- cTempClone = cTemp;
- Assert.True(Char_InByRef(ref cTemp));
-
- cTemp = GetInvalidChar();
- cTempClone = cTemp;
- Assert.True(Char_InOutByRef(ref cTemp));
-
- cTemp = GetValidChar();
- cTempClone = cTemp;
- Assert.True(Char_InOutByRef(ref cTemp));
- }
-
- static void testCharBufferString()
- {
- Assert.True(CharBuffer_In_String(GetInvalidString()));
-
- Assert.True(CharBuffer_In_String(GetValidString()));
-
- String cTemp = GetInvalidString();
- String cTempClone = GetInvalidString();
- Assert.True(CharBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetInvalidString();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_String(ref cTemp));
- }
-
- static void testCharBufferStringBuilder()
- {
- Assert.True(CharBuffer_In_StringBuilder(GetInvalidStringBuilder()));
-
- Assert.True(CharBuffer_In_StringBuilder(GetValidStringBuilder()));
-
- StringBuilder cTemp = GetInvalidStringBuilder();
- StringBuilder cTempClone = cTemp;
- Assert.True(CharBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetInvalidStringBuilder();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_StringBuilder(ref cTemp));
- }
-
- static void runTest()
- {
- testChar();
- testCharBufferString();
- testCharBufferStringBuilder();
- }
-
- public static int Main()
- {
- if (System.Globalization.CultureInfo.CurrentCulture.Name != "en-US")
- {
- Console.WriteLine("Non-US English platforms are not supported.\nPassing without running tests");
-
- Console.WriteLine("--- Success");
- return 100;
- }
-
- try
- {
- runTest();
- return 100;
- } catch (Exception e){
- Console.WriteLine($"Test Failure: {e}");
- return 101;
- }
- }
-}
+++ /dev/null
-<Project Sdk="Microsoft.NET.Sdk">
- <PropertyGroup>
- <OutputType>Exe</OutputType>
- <!-- Test unsupported outside of windows -->
- <CLRTestTargetUnsupported Condition="'$(TargetsWindows)' != 'true'">true</CLRTestTargetUnsupported>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="$(MSBuildProjectName).cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CMakeLists.txt" />
- </ItemGroup>
-</Project>
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Text;
-using System.Runtime.InteropServices;
-using Xunit;
-
-[assembly: BestFitMapping(false, ThrowOnUnmappableChar = true)]
-
-public class BFM_CharMarshaler
-{
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool Char_In([In]char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool Char_InByRef([In]ref char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool Char_InOutByRef([In, Out]ref char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_In_String([In]String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_InByRef_String([In]ref String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_InOutByRef_String([In, Out]ref String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_In_StringBuilder([In]StringBuilder s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_InByRef_StringBuilder([In]ref StringBuilder s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_InOutByRef_StringBuilder([In, Out]ref StringBuilder s);
-
- static String GetValidString()
- {
- return "This is the initial test string.";
- }
-
- static String GetInvalidString()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl.ToString();
- }
-
- static StringBuilder GetValidStringBuilder()
- {
- StringBuilder sb = new StringBuilder("test string.");
- return sb;
- }
-
- static StringBuilder GetInvalidStringBuilder()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl;
- }
-
- static char GetInvalidChar()
- {
- return (char)0x2216;
- }
-
- static char GetValidChar()
- {
- return 'c';
- }
-
- static void testChar()
- {
- Assert.True(Char_In(GetInvalidChar()));
-
- Assert.True(Char_In(GetValidChar()));
-
- char cTemp = GetInvalidChar();
- Assert.True(Char_InByRef(ref cTemp));
-
- cTemp = GetValidChar();
- Assert.True(Char_InByRef(ref cTemp));
-
- cTemp = GetInvalidChar();
- Assert.True(Char_InOutByRef(ref cTemp));
- Assert.Equal('?', cTemp);
-
- cTemp = GetValidChar();
- char cTempClone = cTemp;
- Assert.True(Char_InOutByRef(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
- }
-
- static void testCharBufferString()
- {
- Assert.True(CharBuffer_In_String(GetInvalidString()));
-
- Assert.True(CharBuffer_In_String(GetValidString()));
-
- String cTemp = GetInvalidString();
- Assert.True(CharBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- Assert.True(CharBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetInvalidString();
- String cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_String(ref cTemp));
- Assert.NotEqual(cTempClone, cTemp);
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
- }
-
- static void testCharBufferStringBuilder()
- {
- StringBuilder sb = GetInvalidStringBuilder();
- Assert.True(CharBuffer_In_StringBuilder(sb));
-
- Assert.True(CharBuffer_In_StringBuilder(GetValidStringBuilder()));
-
- StringBuilder cTemp = GetInvalidStringBuilder();
- Assert.True(CharBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- Assert.True(CharBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetInvalidStringBuilder();
- StringBuilder cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.NotEqual(cTempClone.ToString(), cTemp.ToString());
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
- }
-
- static void runTest()
- {
- testChar();
- testCharBufferString();
- testCharBufferStringBuilder();
- }
-
- public static int Main()
- {
- if (System.Globalization.CultureInfo.CurrentCulture.Name != "en-US")
- {
- Console.WriteLine("Non-US English platforms are not supported.\nPassing without running tests");
-
- Console.WriteLine("--- Success");
- return 100;
- }
-
- try
- {
- runTest();
- return 100;
- } catch (Exception e){
- Console.WriteLine($"Test Failure: {e}");
- return 101;
- }
- }
-}
+++ /dev/null
-<Project Sdk="Microsoft.NET.Sdk">
- <PropertyGroup>
- <OutputType>Exe</OutputType>
- <!-- Test unsupported outside of windows -->
- <CLRTestTargetUnsupported Condition="'$(TargetsWindows)' != 'true'">true</CLRTestTargetUnsupported>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="$(MSBuildProjectName).cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CMakeLists.txt" />
- </ItemGroup>
-</Project>
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Text;
-using System.Runtime.InteropServices;
-using Xunit;
-
-[assembly: BestFitMapping(false, ThrowOnUnmappableChar = true)]
-
-public class BFM_CharMarshaler
-{
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool Char_In([In]char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool Char_InByRef([In]ref char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool Char_InOutByRef([In, Out]ref char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_In_String([In]String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_InByRef_String([In]ref String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_InOutByRef_String([In, Out]ref String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_In_StringBuilder([In]StringBuilder s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_InByRef_StringBuilder([In]ref StringBuilder s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_InOutByRef_StringBuilder([In, Out]ref StringBuilder s);
-
- static String GetValidString()
- {
- return "This is the initial test string.";
- }
-
- static String GetInvalidString()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl.ToString();
- }
-
- static StringBuilder GetValidStringBuilder()
- {
- StringBuilder sb = new StringBuilder("test string.");
- return sb;
- }
-
- static StringBuilder GetInvalidStringBuilder()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl;
- }
-
- static char GetInvalidChar()
- {
- return (char)0x2216;
- }
-
- static char GetValidChar()
- {
- return 'c';
- }
-
- static void testChar()
- {
- Assert.Throws<ArgumentException>(() => Char_In(GetInvalidChar()));
-
- Assert.True(Char_In(GetValidChar()));
-
- char cTemp = GetInvalidChar();
- Assert.Throws<ArgumentException>(() => Char_InByRef(ref cTemp));
-
- cTemp = GetValidChar();
- Assert.True(Char_InByRef(ref cTemp));
-
- cTemp = GetInvalidChar();
- Assert.Throws<ArgumentException>(() => Char_InOutByRef(ref cTemp));
-
- cTemp = GetValidChar();
- char cTempClone = cTemp;
- Assert.True(Char_InOutByRef(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
- }
-
- static void testCharBufferString()
- {
- Assert.Throws<ArgumentException>(() => CharBuffer_In_String(GetInvalidString()));
-
- Assert.True(CharBuffer_In_String(GetValidString()));
-
- String cTemp = GetInvalidString();
- Assert.Throws<ArgumentException>(() => CharBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- Assert.True(CharBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetInvalidString();
- Assert.Throws<ArgumentException>(() => CharBuffer_InOutByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- String cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
- }
-
- static void testCharBufferStringBuilder()
- {
- Assert.Throws<ArgumentException>(() => CharBuffer_In_StringBuilder(GetInvalidStringBuilder()));
-
- Assert.True(CharBuffer_In_StringBuilder(GetValidStringBuilder()));
-
- StringBuilder cTemp = GetInvalidStringBuilder();
- Assert.Throws<ArgumentException>(() => CharBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- Assert.True(CharBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetInvalidStringBuilder();
- Assert.Throws<ArgumentException>(() => CharBuffer_InOutByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- StringBuilder cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
- }
-
- static void runTest()
- {
- testChar();
- testCharBufferString();
- testCharBufferStringBuilder();
- }
-
- public static int Main()
- {
- if (System.Globalization.CultureInfo.CurrentCulture.Name != "en-US")
- {
- Console.WriteLine("Non-US English platforms are not supported.\nPassing without running tests");
-
- Console.WriteLine("--- Success");
- return 100;
- }
-
- try
- {
- runTest();
- return 100;
- } catch (Exception e){
- Console.WriteLine($"Test Failure: {e}");
- return 101;
- }
- }
-}
+++ /dev/null
-<Project Sdk="Microsoft.NET.Sdk">
- <PropertyGroup>
- <OutputType>Exe</OutputType>
- <!-- Test unsupported outside of windows -->
- <CLRTestTargetUnsupported Condition="'$(TargetsWindows)' != 'true'">true</CLRTestTargetUnsupported>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="$(MSBuildProjectName).cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CMakeLists.txt" />
- </ItemGroup>
-</Project>
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Text;
-using System.Runtime.InteropServices;
-using Xunit;
-
-[assembly: BestFitMapping(false, ThrowOnUnmappableChar = true)]
-
-public class BFM_CharMarshaler
-{
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool Char_In([In]char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool Char_InByRef([In]ref char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool Char_InOutByRef([In, Out]ref char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_In_String([In]String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_InByRef_String([In]ref String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_InOutByRef_String([In, Out]ref String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_In_StringBuilder([In]StringBuilder s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_InByRef_StringBuilder([In]ref StringBuilder s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_InOutByRef_StringBuilder([In, Out]ref StringBuilder s);
-
- static String GetValidString()
- {
- return "This is the initial test string.";
- }
-
- static String GetInvalidString()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl.ToString();
- }
-
- static StringBuilder GetValidStringBuilder()
- {
- StringBuilder sb = new StringBuilder("test string.");
- return sb;
- }
-
- static StringBuilder GetInvalidStringBuilder()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl;
- }
-
- static char GetInvalidChar()
- {
- return (char)0x2216;
- }
-
- static char GetValidChar()
- {
- return 'c';
- }
-
- static void testChar()
- {
- Assert.True(Char_In(GetInvalidChar()));
-
- Assert.True(Char_In(GetValidChar()));
-
- char cTemp = GetInvalidChar();
- char cTempClone = cTemp;
- Assert.True(Char_InByRef(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
-
- cTemp = GetValidChar();
- cTempClone = cTemp;
- Assert.True(Char_InByRef(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
-
- cTemp = GetInvalidChar();
- cTempClone = cTemp;
- Assert.True(Char_InOutByRef(ref cTemp));
- Assert.NotEqual(cTempClone, cTemp);
-
- cTemp = GetValidChar();
- cTempClone = cTemp;
- Assert.True(Char_InOutByRef(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
- }
-
- static void testCharBufferString()
- {
- Assert.True(CharBuffer_In_String(GetInvalidString()));
-
- Assert.True(CharBuffer_In_String(GetValidString()));
-
- String cTemp = GetInvalidString();
- String cTempClone = cTemp;
- Assert.True(CharBuffer_InByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
-
- cTemp = GetInvalidString();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_String(ref cTemp));
- Assert.NotEqual(cTempClone, cTemp);
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
- }
-
- static void testCharBufferStringBuilder()
- {
- Assert.True(CharBuffer_In_StringBuilder(GetInvalidStringBuilder()));
-
- Assert.True(CharBuffer_In_StringBuilder(GetValidStringBuilder()));
-
- StringBuilder cTemp = GetInvalidStringBuilder();
- StringBuilder cTempClone = cTemp;
- Assert.True(CharBuffer_InByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
-
- cTemp = GetInvalidStringBuilder();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.NotEqual(cTempClone.ToString(), cTemp.ToString());
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
- }
-
- static void runTest()
- {
- testChar();
- testCharBufferString();
- testCharBufferStringBuilder();
- }
-
- public static int Main()
- {
- if (System.Globalization.CultureInfo.CurrentCulture.Name != "en-US")
- {
- Console.WriteLine("Non-US English platforms are not supported.\nPassing without running tests");
-
- Console.WriteLine("--- Success");
- return 100;
- }
-
- try
- {
- runTest();
- return 100;
- } catch (Exception e){
- Console.WriteLine($"Test Failure: {e}");
- return 101;
- }
- }
-}
+++ /dev/null
-<Project Sdk="Microsoft.NET.Sdk">
- <PropertyGroup>
- <OutputType>Exe</OutputType>
- <!-- Test unsupported outside of windows -->
- <CLRTestTargetUnsupported Condition="'$(TargetsWindows)' != 'true'">true</CLRTestTargetUnsupported>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="$(MSBuildProjectName).cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CMakeLists.txt" />
- </ItemGroup>
-</Project>
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Text;
-using System.Runtime.InteropServices;
-using Xunit;
-
-[assembly: BestFitMapping(false, ThrowOnUnmappableChar = true)]
-
-public class BFM_CharMarshaler
-{
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool Char_In([In]char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool Char_InByRef([In]ref char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool Char_InOutByRef([In, Out]ref char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_In_String([In]String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_InByRef_String([In]ref String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_InOutByRef_String([In, Out]ref String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_In_StringBuilder([In]StringBuilder s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_InByRef_StringBuilder([In]ref StringBuilder s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_InOutByRef_StringBuilder([In, Out]ref StringBuilder s);
-
- static String GetValidString()
- {
- return "This is the initial test string.";
- }
-
- static String GetInvalidString()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- //sbl.Append ('乀');
- return sbl.ToString();
- }
-
- static StringBuilder GetValidStringBuilder()
- {
- StringBuilder sb = new StringBuilder("test string.");
- return sb;
- }
-
- static StringBuilder GetInvalidStringBuilder()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- //sbl.Append ('乀');
- return sbl;
- }
-
- static char GetInvalidChar()
- {
- return (char)0x2216;
- }
-
- static char GetValidChar()
- {
- return 'c';
- }
-
- static void testChar()
- {
- Assert.True(Char_In(GetInvalidChar()));
-
- Assert.True(Char_In(GetValidChar()));
-
- char cTemp = GetInvalidChar();
- char cTempClone = GetInvalidChar();
- Assert.True(Char_InByRef(ref cTemp));
-
- cTemp = GetValidChar();
- cTempClone = cTemp;
- Assert.True(Char_InByRef(ref cTemp));
-
- cTemp = GetInvalidChar();
- cTempClone = cTemp;
- Assert.True(Char_InOutByRef(ref cTemp));
-
- cTemp = GetValidChar();
- cTempClone = cTemp;
- Assert.True(Char_InOutByRef(ref cTemp));
- }
-
- static void testCharBufferString()
- {
- Assert.True(CharBuffer_In_String(GetInvalidString()));
-
- Assert.True(CharBuffer_In_String(GetValidString()));
-
- String cTemp = GetInvalidString();
- String cTempClone = GetInvalidString();
- Assert.True(CharBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetInvalidString();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_String(ref cTemp));
- }
-
- static void testCharBufferStringBuilder()
- {
- Assert.True(CharBuffer_In_StringBuilder(GetInvalidStringBuilder()));
-
- Assert.True(CharBuffer_In_StringBuilder(GetValidStringBuilder()));
-
- StringBuilder cTemp = GetInvalidStringBuilder();
- StringBuilder cTempClone = cTemp;
- Assert.True(CharBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetInvalidStringBuilder();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_StringBuilder(ref cTemp));
- }
-
- static void runTest()
- {
- testChar();
- testCharBufferString();
- testCharBufferStringBuilder();
- }
-
- public static int Main()
- {
- if (System.Globalization.CultureInfo.CurrentCulture.Name != "en-US")
- {
- Console.WriteLine("Non-US English platforms are not supported.\nPassing without running tests");
-
- Console.WriteLine("--- Success");
- return 100;
- }
-
- try
- {
- runTest();
- return 100;
- } catch (Exception e){
- Console.WriteLine($"Test Failure: {e}");
- return 101;
- }
- }
-}
+++ /dev/null
-<Project Sdk="Microsoft.NET.Sdk">
- <PropertyGroup>
- <OutputType>Exe</OutputType>
- <!-- Test unsupported outside of windows -->
- <CLRTestTargetUnsupported Condition="'$(TargetsWindows)' != 'true'">true</CLRTestTargetUnsupported>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="$(MSBuildProjectName).cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CMakeLists.txt" />
- </ItemGroup>
-</Project>
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Text;
-using System.Runtime.InteropServices;
-using Xunit;
-
-[assembly: BestFitMapping(true, ThrowOnUnmappableChar = false)]
-
-public class BFM_CharMarshaler
-{
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool Char_In([In]char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool Char_InByRef([In]ref char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool Char_InOutByRef([In, Out]ref char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_In_String([In]String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_InByRef_String([In]ref String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_InOutByRef_String([In, Out]ref String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_In_StringBuilder([In]StringBuilder s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_InByRef_StringBuilder([In]ref StringBuilder s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_InOutByRef_StringBuilder([In, Out]ref StringBuilder s);
-
- static String GetValidString()
- {
- return "This is the initial test string.";
- }
-
- static String GetInvalidString()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl.ToString();
- }
-
- static StringBuilder GetValidStringBuilder()
- {
- StringBuilder sb = new StringBuilder("test string.");
- return sb;
- }
-
- static StringBuilder GetInvalidStringBuilder()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl;
- }
-
- static char GetInvalidChar()
- {
- return (char)0x2216;
- }
-
- static char GetValidChar()
- {
- return 'c';
- }
-
- static void testChar()
- {
- Assert.True(Char_In(GetInvalidChar()));
-
- Assert.True(Char_In(GetValidChar()));
-
- char cTemp = GetInvalidChar();
- Assert.True(Char_InByRef(ref cTemp));
-
- cTemp = GetValidChar();
- Assert.True(Char_InByRef(ref cTemp));
-
- cTemp = GetInvalidChar();
- Assert.True(Char_InOutByRef(ref cTemp));
- Assert.Equal('?', cTemp);
-
- cTemp = GetValidChar();
- char cTempClone = cTemp;
- Assert.True(Char_InOutByRef(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
- }
-
- static void testCharBufferString()
- {
- Assert.True(CharBuffer_In_String(GetInvalidString()));
-
- Assert.True(CharBuffer_In_String(GetValidString()));
-
- String cTemp = GetInvalidString();
- Assert.True(CharBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- Assert.True(CharBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetInvalidString();
- String cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_String(ref cTemp));
- Assert.NotEqual(cTempClone, cTemp);
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
- }
-
- static void testCharBufferStringBuilder()
- {
- StringBuilder sb = GetInvalidStringBuilder();
- Assert.True(CharBuffer_In_StringBuilder(sb));
-
- Assert.True(CharBuffer_In_StringBuilder(GetValidStringBuilder()));
-
- StringBuilder cTemp = GetInvalidStringBuilder();
- Assert.True(CharBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- Assert.True(CharBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetInvalidStringBuilder();
- StringBuilder cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.NotEqual(cTempClone.ToString(), cTemp.ToString());
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
- }
-
- static void runTest()
- {
- testChar();
- testCharBufferString();
- testCharBufferStringBuilder();
- }
-
- public static int Main()
- {
- if (System.Globalization.CultureInfo.CurrentCulture.Name != "en-US")
- {
- Console.WriteLine("Non-US English platforms are not supported.\nPassing without running tests");
-
- Console.WriteLine("--- Success");
- return 100;
- }
-
- try
- {
- runTest();
- return 100;
- } catch (Exception e){
- Console.WriteLine($"Test Failure: {e}");
- return 101;
- }
- }
-}
+++ /dev/null
-<Project Sdk="Microsoft.NET.Sdk">
- <PropertyGroup>
- <OutputType>Exe</OutputType>
- <!-- Test unsupported outside of windows -->
- <CLRTestTargetUnsupported Condition="'$(TargetsWindows)' != 'true'">true</CLRTestTargetUnsupported>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="$(MSBuildProjectName).cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CMakeLists.txt" />
- </ItemGroup>
-</Project>
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Text;
-using System.Runtime.InteropServices;
-using Xunit;
-
-[assembly: BestFitMapping(true, ThrowOnUnmappableChar = false)]
-
-public class BFM_CharMarshaler
-{
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool Char_In([In]char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool Char_InByRef([In]ref char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool Char_InOutByRef([In, Out]ref char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_In_String([In]String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_InByRef_String([In]ref String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_InOutByRef_String([In, Out]ref String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_In_StringBuilder([In]StringBuilder s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_InByRef_StringBuilder([In]ref StringBuilder s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_InOutByRef_StringBuilder([In, Out]ref StringBuilder s);
-
- static String GetValidString()
- {
- return "This is the initial test string.";
- }
-
- static String GetInvalidString()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl.ToString();
- }
-
- static StringBuilder GetValidStringBuilder()
- {
- StringBuilder sb = new StringBuilder("test string.");
- return sb;
- }
-
- static StringBuilder GetInvalidStringBuilder()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl;
- }
-
- static char GetInvalidChar()
- {
- return (char)0x2216;
- }
-
- static char GetValidChar()
- {
- return 'c';
- }
-
- static void testChar()
- {
- Assert.Throws<ArgumentException>(() => Char_In(GetInvalidChar()));
-
- Assert.True(Char_In(GetValidChar()));
-
- char cTemp = GetInvalidChar();
- Assert.Throws<ArgumentException>(() => Char_InByRef(ref cTemp));
-
- cTemp = GetValidChar();
- Assert.True(Char_InByRef(ref cTemp));
-
- cTemp = GetInvalidChar();
- Assert.Throws<ArgumentException>(() => Char_InOutByRef(ref cTemp));
-
- cTemp = GetValidChar();
- char cTempClone = cTemp;
- Assert.True(Char_InOutByRef(ref cTemp));
- }
-
- static void testCharBufferString()
- {
- Assert.Throws<ArgumentException>(() => CharBuffer_In_String(GetInvalidString()));
-
- Assert.True(CharBuffer_In_String(GetValidString()));
-
- String cTemp = GetInvalidString();
- Assert.Throws<ArgumentException>(() => CharBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- Assert.True(CharBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetInvalidString();
- Assert.Throws<ArgumentException>(() => CharBuffer_InOutByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- String cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_String(ref cTemp));
- }
-
- static void testCharBufferStringBuilder()
- {
- Assert.Throws<ArgumentException>(() => CharBuffer_In_StringBuilder(GetInvalidStringBuilder()));
-
- Assert.True(CharBuffer_In_StringBuilder(GetValidStringBuilder()));
-
- StringBuilder cTemp = GetInvalidStringBuilder();
- Assert.Throws<ArgumentException>(() => CharBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- Assert.True(CharBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetInvalidStringBuilder();
- Assert.Throws<ArgumentException>(() => CharBuffer_InOutByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- StringBuilder cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_StringBuilder(ref cTemp));
-
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
- }
-
- static void runTest()
- {
- testChar();
- testCharBufferString();
- testCharBufferStringBuilder();
- }
-
- public static int Main()
- {
- if (System.Globalization.CultureInfo.CurrentCulture.Name != "en-US")
- {
- Console.WriteLine("Non-US English platforms are not supported.\nPassing without running tests");
-
- Console.WriteLine("--- Success");
- return 100;
- }
-
- try
- {
- runTest();
- return 100;
- } catch (Exception e){
- Console.WriteLine($"Test Failure: {e}");
- return 101;
- }
- }
-}
+++ /dev/null
-<Project Sdk="Microsoft.NET.Sdk">
- <PropertyGroup>
- <OutputType>Exe</OutputType>
- <!-- Test unsupported outside of windows -->
- <CLRTestTargetUnsupported Condition="'$(TargetsWindows)' != 'true'">true</CLRTestTargetUnsupported>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="$(MSBuildProjectName).cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CMakeLists.txt" />
- </ItemGroup>
-</Project>
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Text;
-using System.Runtime.InteropServices;
-using Xunit;
-
-[assembly: BestFitMapping(true, ThrowOnUnmappableChar = false)]
-
-public class BFM_CharMarshaler
-{
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool Char_In([In]char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool Char_InByRef([In]ref char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool Char_InOutByRef([In, Out]ref char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_In_String([In]String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_InByRef_String([In]ref String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_InOutByRef_String([In, Out]ref String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_In_StringBuilder([In]StringBuilder s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_InByRef_StringBuilder([In]ref StringBuilder s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_InOutByRef_StringBuilder([In, Out]ref StringBuilder s);
-
- static String GetValidString()
- {
- return "This is the initial test string.";
- }
-
- static String GetInvalidString()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl.ToString();
- }
-
- static StringBuilder GetValidStringBuilder()
- {
- StringBuilder sb = new StringBuilder("test string.");
- return sb;
- }
-
- static StringBuilder GetInvalidStringBuilder()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl;
- }
-
- static char GetInvalidChar()
- {
- return (char)0x2216;
- }
-
- static char GetValidChar()
- {
- return 'c';
- }
-
- static void testChar()
- {
- Assert.True(Char_In(GetInvalidChar()));
-
- Assert.True(Char_In(GetValidChar()));
-
- char cTemp = GetInvalidChar();
- char cTempClone = cTemp;
- Assert.True(Char_InByRef(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
-
- cTemp = GetValidChar();
- cTempClone = cTemp;
- Assert.True(Char_InByRef(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
-
- cTemp = GetInvalidChar();
- cTempClone = cTemp;
- Assert.True(Char_InOutByRef(ref cTemp));
- Assert.NotEqual(cTempClone, cTemp);
-
- cTemp = GetValidChar();
- cTempClone = cTemp;
- Assert.True(Char_InOutByRef(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
- }
-
- static void testCharBufferString()
- {
- Assert.True(CharBuffer_In_String(GetInvalidString()));
-
- Assert.True(CharBuffer_In_String(GetValidString()));
-
- String cTemp = GetInvalidString();
- String cTempClone = cTemp;
- Assert.True(CharBuffer_InByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
-
- cTemp = GetInvalidString();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_String(ref cTemp));
- Assert.NotEqual(cTempClone, cTemp);
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
- }
-
- static void testCharBufferStringBuilder()
- {
- Assert.True(CharBuffer_In_StringBuilder(GetInvalidStringBuilder()));
-
- Assert.True(CharBuffer_In_StringBuilder(GetValidStringBuilder()));
-
- StringBuilder cTemp = GetInvalidStringBuilder();
- StringBuilder cTempClone = cTemp;
- Assert.True(CharBuffer_InByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
-
- cTemp = GetInvalidStringBuilder();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.NotEqual(cTempClone.ToString(), cTemp.ToString());
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
- }
-
- static void runTest()
- {
- testChar();
- testCharBufferString();
- testCharBufferStringBuilder();
- }
-
- public static int Main()
- {
- if (System.Globalization.CultureInfo.CurrentCulture.Name != "en-US")
- {
- Console.WriteLine("Non-US English platforms are not supported.\nPassing without running tests");
-
- Console.WriteLine("--- Success");
- return 100;
- }
-
- try
- {
- runTest();
- return 100;
- } catch (Exception e){
- Console.WriteLine($"Test Failure: {e}");
- return 101;
- }
- }
-}
+++ /dev/null
-<Project Sdk="Microsoft.NET.Sdk">
- <PropertyGroup>
- <OutputType>Exe</OutputType>
- <!-- Test unsupported outside of windows -->
- <CLRTestTargetUnsupported Condition="'$(TargetsWindows)' != 'true'">true</CLRTestTargetUnsupported>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="$(MSBuildProjectName).cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CMakeLists.txt" />
- </ItemGroup>
-</Project>
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Text;
-using System.Runtime.InteropServices;
-using Xunit;
-
-[assembly: BestFitMapping(true, ThrowOnUnmappableChar = false)]
-
-public class BFM_CharMarshaler
-{
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool Char_In([In]char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool Char_InByRef([In]ref char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool Char_InOutByRef([In, Out]ref char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_In_String([In]String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_InByRef_String([In]ref String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_InOutByRef_String([In, Out]ref String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_In_StringBuilder([In]StringBuilder s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_InByRef_StringBuilder([In]ref StringBuilder s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_InOutByRef_StringBuilder([In, Out]ref StringBuilder s);
-
- static String GetValidString()
- {
- return "This is the initial test string.";
- }
-
- static String GetInvalidString()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- //sbl.Append ('乀');
- return sbl.ToString();
- }
-
- static StringBuilder GetValidStringBuilder()
- {
- StringBuilder sb = new StringBuilder("test string.");
- return sb;
- }
-
- static StringBuilder GetInvalidStringBuilder()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- //sbl.Append ('乀');
- return sbl;
- }
-
- static char GetInvalidChar()
- {
- return (char)0x2216;
- }
-
- static char GetValidChar()
- {
- return 'c';
- }
-
- static void testChar()
- {
- Assert.True(Char_In(GetInvalidChar()));
-
- Assert.True(Char_In(GetValidChar()));
-
- char cTemp = GetInvalidChar();
- char cTempClone = GetInvalidChar();
- Assert.True(Char_InByRef(ref cTemp));
-
- cTemp = GetValidChar();
- cTempClone = cTemp;
- Assert.True(Char_InByRef(ref cTemp));
-
- cTemp = GetInvalidChar();
- cTempClone = cTemp;
- Assert.True(Char_InOutByRef(ref cTemp));
-
- cTemp = GetValidChar();
- cTempClone = cTemp;
- Assert.True(Char_InOutByRef(ref cTemp));
- }
-
- static void testCharBufferString()
- {
- Assert.True(CharBuffer_In_String(GetInvalidString()));
-
- Assert.True(CharBuffer_In_String(GetValidString()));
-
- String cTemp = GetInvalidString();
- String cTempClone = GetInvalidString();
- Assert.True(CharBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetInvalidString();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_String(ref cTemp));
- }
-
- static void testCharBufferStringBuilder()
- {
- Assert.True(CharBuffer_In_StringBuilder(GetInvalidStringBuilder()));
-
- Assert.True(CharBuffer_In_StringBuilder(GetValidStringBuilder()));
-
- StringBuilder cTemp = GetInvalidStringBuilder();
- StringBuilder cTempClone = cTemp;
- Assert.True(CharBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetInvalidStringBuilder();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_StringBuilder(ref cTemp));
- }
-
- static void runTest()
- {
- testChar();
- testCharBufferString();
- testCharBufferStringBuilder();
- }
-
- public static int Main()
- {
- if (System.Globalization.CultureInfo.CurrentCulture.Name != "en-US")
- {
- Console.WriteLine("Non-US English platforms are not supported.\nPassing without running tests");
-
- Console.WriteLine("--- Success");
- return 100;
- }
-
- try
- {
- runTest();
- return 100;
- } catch (Exception e){
- Console.WriteLine($"Test Failure: {e}");
- return 101;
- }
- }
-}
+++ /dev/null
-<Project Sdk="Microsoft.NET.Sdk">
- <PropertyGroup>
- <OutputType>Exe</OutputType>
- <!-- Test unsupported outside of windows -->
- <CLRTestTargetUnsupported Condition="'$(TargetsWindows)' != 'true'">true</CLRTestTargetUnsupported>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="$(MSBuildProjectName).cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CMakeLists.txt" />
- </ItemGroup>
-</Project>
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Text;
-using System.Runtime.InteropServices;
-using Xunit;
-
-[assembly: BestFitMapping(true, ThrowOnUnmappableChar = true)]
-
-public class BFM_CharMarshaler
-{
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool Char_In([In]char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool Char_InByRef([In]ref char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool Char_InOutByRef([In, Out]ref char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_In_String([In]String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_InByRef_String([In]ref String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_InOutByRef_String([In, Out]ref String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_In_StringBuilder([In]StringBuilder s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_InByRef_StringBuilder([In]ref StringBuilder s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_InOutByRef_StringBuilder([In, Out]ref StringBuilder s);
-
- static String GetValidString()
- {
- return "This is the initial test string.";
- }
-
- static String GetInvalidString()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl.ToString();
- }
-
- static StringBuilder GetValidStringBuilder()
- {
- StringBuilder sb = new StringBuilder("test string.");
- return sb;
- }
-
- static StringBuilder GetInvalidStringBuilder()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl;
- }
-
- static char GetInvalidChar()
- {
- return (char)0x2216;
- }
-
- static char GetValidChar()
- {
- return 'c';
- }
-
- static void testChar()
- {
- Assert.True(Char_In(GetInvalidChar()));
-
- Assert.True(Char_In(GetValidChar()));
-
- char cTemp = GetInvalidChar();
- Assert.True(Char_InByRef(ref cTemp));
-
- cTemp = GetValidChar();
- Assert.True(Char_InByRef(ref cTemp));
-
- cTemp = GetInvalidChar();
- Assert.True(Char_InOutByRef(ref cTemp));
- Assert.Equal('?', cTemp);
-
- cTemp = GetValidChar();
- char cTempClone = cTemp;
- Assert.True(Char_InOutByRef(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
- }
-
- static void testCharBufferString()
- {
- Assert.True(CharBuffer_In_String(GetInvalidString()));
-
- Assert.True(CharBuffer_In_String(GetValidString()));
-
- String cTemp = GetInvalidString();
- Assert.True(CharBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- Assert.True(CharBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetInvalidString();
- String cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_String(ref cTemp));
- Assert.NotEqual(cTempClone, cTemp);
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
- }
-
- static void testCharBufferStringBuilder()
- {
- StringBuilder sb = GetInvalidStringBuilder();
- Assert.True(CharBuffer_In_StringBuilder(sb));
-
- Assert.True(CharBuffer_In_StringBuilder(GetValidStringBuilder()));
-
- StringBuilder cTemp = GetInvalidStringBuilder();
- Assert.True(CharBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- Assert.True(CharBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetInvalidStringBuilder();
- StringBuilder cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.NotEqual(cTempClone.ToString(), cTemp.ToString());
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
- }
-
- static void runTest()
- {
- testChar();
- testCharBufferString();
- testCharBufferStringBuilder();
- }
-
- public static int Main()
- {
- if (System.Globalization.CultureInfo.CurrentCulture.Name != "en-US")
- {
- Console.WriteLine("Non-US English platforms are not supported.\nPassing without running tests");
-
- Console.WriteLine("--- Success");
- return 100;
- }
-
- try
- {
- runTest();
- return 100;
- } catch (Exception e){
- Console.WriteLine($"Test Failure: {e}");
- return 101;
- }
- }
-}
+++ /dev/null
-<Project Sdk="Microsoft.NET.Sdk">
- <PropertyGroup>
- <OutputType>Exe</OutputType>
- <!-- Test unsupported outside of windows -->
- <CLRTestTargetUnsupported Condition="'$(TargetsWindows)' != 'true'">true</CLRTestTargetUnsupported>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="$(MSBuildProjectName).cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CMakeLists.txt" />
- </ItemGroup>
-</Project>
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Text;
-using System.Runtime.InteropServices;
-using Xunit;
-
-[assembly: BestFitMapping(true, ThrowOnUnmappableChar = true)]
-
-public class BFM_CharMarshaler
-{
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool Char_In([In]char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool Char_InByRef([In]ref char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool Char_InOutByRef([In, Out]ref char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_In_String([In]String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_InByRef_String([In]ref String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_InOutByRef_String([In, Out]ref String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_In_StringBuilder([In]StringBuilder s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_InByRef_StringBuilder([In]ref StringBuilder s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_InOutByRef_StringBuilder([In, Out]ref StringBuilder s);
-
- static String GetValidString()
- {
- return "This is the initial test string.";
- }
-
- static String GetInvalidString()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl.ToString();
- }
-
- static StringBuilder GetValidStringBuilder()
- {
- StringBuilder sb = new StringBuilder("test string.");
- return sb;
- }
-
- static StringBuilder GetInvalidStringBuilder()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl;
- }
-
- static char GetInvalidChar()
- {
- return (char)0x2216;
- }
-
- static char GetValidChar()
- {
- return 'c';
- }
-
- static void testChar()
- {
- Assert.Throws<ArgumentException>(() => Char_In(GetInvalidChar()));
-
- Assert.True(Char_In(GetValidChar()));
-
- char cTemp = GetInvalidChar();
- Assert.Throws<ArgumentException>(() => Char_InByRef(ref cTemp));
-
- cTemp = GetValidChar();
- Assert.True(Char_InByRef(ref cTemp));
-
- cTemp = GetInvalidChar();
- Assert.Throws<ArgumentException>(() => Char_InOutByRef(ref cTemp));
-
- cTemp = GetValidChar();
- char cTempClone = cTemp;
- Assert.True(Char_InOutByRef(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
- }
-
- static void testCharBufferString()
- {
- Assert.Throws<ArgumentException>(() => CharBuffer_In_String(GetInvalidString()));
-
- Assert.True(CharBuffer_In_String(GetValidString()));
-
- String cTemp = GetInvalidString();
- Assert.Throws<ArgumentException>(() => CharBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- Assert.True(CharBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetInvalidString();
- Assert.Throws<ArgumentException>(() => CharBuffer_InOutByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- String cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
- }
-
- static void testCharBufferStringBuilder()
- {
- Assert.Throws<ArgumentException>(() => CharBuffer_In_StringBuilder(GetInvalidStringBuilder()));
-
- Assert.True(CharBuffer_In_StringBuilder(GetValidStringBuilder()));
-
- StringBuilder cTemp = GetInvalidStringBuilder();
- Assert.Throws<ArgumentException>(() => CharBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- Assert.True(CharBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetInvalidStringBuilder();
- Assert.Throws<ArgumentException>(() => CharBuffer_InOutByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- StringBuilder cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
- }
-
- static void runTest()
- {
- testChar();
- testCharBufferString();
- testCharBufferStringBuilder();
- }
-
- public static int Main()
- {
- if (System.Globalization.CultureInfo.CurrentCulture.Name != "en-US")
- {
- Console.WriteLine("Non-US English platforms are not supported.\nPassing without running tests");
-
- Console.WriteLine("--- Success");
- return 100;
- }
-
- try
- {
- runTest();
- return 100;
- } catch (Exception e){
- Console.WriteLine($"Test Failure: {e}");
- return 101;
- }
- }
-}
+++ /dev/null
-<Project Sdk="Microsoft.NET.Sdk">
- <PropertyGroup>
- <OutputType>Exe</OutputType>
- <!-- Test unsupported outside of windows -->
- <CLRTestTargetUnsupported Condition="'$(TargetsWindows)' != 'true'">true</CLRTestTargetUnsupported>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="$(MSBuildProjectName).cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CMakeLists.txt" />
- </ItemGroup>
-</Project>
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Text;
-using System.Runtime.InteropServices;
-using Xunit;
-
-[assembly: BestFitMapping(true, ThrowOnUnmappableChar = true)]
-
-public class BFM_CharMarshaler
-{
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool Char_In([In]char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool Char_InByRef([In]ref char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool Char_InOutByRef([In, Out]ref char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_In_String([In]String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_InByRef_String([In]ref String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_InOutByRef_String([In, Out]ref String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_In_StringBuilder([In]StringBuilder s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_InByRef_StringBuilder([In]ref StringBuilder s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_InOutByRef_StringBuilder([In, Out]ref StringBuilder s);
-
- static String GetValidString()
- {
- return "This is the initial test string.";
- }
-
- static String GetInvalidString()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl.ToString();
- }
-
- static StringBuilder GetValidStringBuilder()
- {
- StringBuilder sb = new StringBuilder("test string.");
- return sb;
- }
-
- static StringBuilder GetInvalidStringBuilder()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl;
- }
-
- static char GetInvalidChar()
- {
- return (char)0x2216;
- }
-
- static char GetValidChar()
- {
- return 'c';
- }
-
- static void testChar()
- {
- Assert.True(Char_In(GetInvalidChar()));
-
- Assert.True(Char_In(GetValidChar()));
-
- char cTemp = GetInvalidChar();
- char cTempClone = cTemp;
- Assert.True(Char_InByRef(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
-
- cTemp = GetValidChar();
- cTempClone = cTemp;
- Assert.True(Char_InByRef(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
-
- cTemp = GetInvalidChar();
- cTempClone = cTemp;
- Assert.True(Char_InOutByRef(ref cTemp));
- Assert.NotEqual(cTempClone, cTemp);
-
- cTemp = GetValidChar();
- cTempClone = cTemp;
- Assert.True(Char_InOutByRef(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
- }
-
- static void testCharBufferString()
- {
- Assert.True(CharBuffer_In_String(GetInvalidString()));
-
- Assert.True(CharBuffer_In_String(GetValidString()));
-
- String cTemp = GetInvalidString();
- String cTempClone = cTemp;
- Assert.True(CharBuffer_InByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
-
- cTemp = GetInvalidString();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_String(ref cTemp));
- Assert.NotEqual(cTempClone, cTemp);
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
- }
-
- static void testCharBufferStringBuilder()
- {
- Assert.True(CharBuffer_In_StringBuilder(GetInvalidStringBuilder()));
-
- Assert.True(CharBuffer_In_StringBuilder(GetValidStringBuilder()));
-
- StringBuilder cTemp = GetInvalidStringBuilder();
- StringBuilder cTempClone = cTemp;
- Assert.True(CharBuffer_InByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
-
- cTemp = GetInvalidStringBuilder();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.NotEqual(cTempClone.ToString(), cTemp.ToString());
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
- }
-
- static void runTest()
- {
- testChar();
- testCharBufferString();
- testCharBufferStringBuilder();
- }
-
- public static int Main()
- {
- if (System.Globalization.CultureInfo.CurrentCulture.Name != "en-US")
- {
- Console.WriteLine("Non-US English platforms are not supported.\nPassing without running tests");
-
- Console.WriteLine("--- Success");
- return 100;
- }
-
- try
- {
- runTest();
- return 100;
- } catch (Exception e){
- Console.WriteLine($"Test Failure: {e}");
- return 101;
- }
- }
-}
+++ /dev/null
-<Project Sdk="Microsoft.NET.Sdk">
- <PropertyGroup>
- <OutputType>Exe</OutputType>
- <!-- Test unsupported outside of windows -->
- <CLRTestTargetUnsupported Condition="'$(TargetsWindows)' != 'true'">true</CLRTestTargetUnsupported>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="$(MSBuildProjectName).cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CMakeLists.txt" />
- </ItemGroup>
-</Project>
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Text;
-using System.Runtime.InteropServices;
-using Xunit;
-
-[assembly: BestFitMapping(true, ThrowOnUnmappableChar = true)]
-
-public class BFM_CharMarshaler
-{
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool Char_In([In]char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool Char_InByRef([In]ref char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool Char_InOutByRef([In, Out]ref char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_In_String([In]String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_InByRef_String([In]ref String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_InOutByRef_String([In, Out]ref String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_In_StringBuilder([In]StringBuilder s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_InByRef_StringBuilder([In]ref StringBuilder s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_InOutByRef_StringBuilder([In, Out]ref StringBuilder s);
-
- static String GetValidString()
- {
- return "This is the initial test string.";
- }
-
- static String GetInvalidString()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- //sbl.Append ('乀');
- return sbl.ToString();
- }
-
- static StringBuilder GetValidStringBuilder()
- {
- StringBuilder sb = new StringBuilder("test string.");
- return sb;
- }
-
- static StringBuilder GetInvalidStringBuilder()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- //sbl.Append ('乀');
- return sbl;
- }
-
- static char GetInvalidChar()
- {
- return (char)0x2216;
- }
-
- static char GetValidChar()
- {
- return 'c';
- }
-
- static void testChar()
- {
- Assert.True(Char_In(GetInvalidChar()));
-
- Assert.True(Char_In(GetValidChar()));
-
- char cTemp = GetInvalidChar();
- char cTempClone = GetInvalidChar();
- Assert.True(Char_InByRef(ref cTemp));
-
- cTemp = GetValidChar();
- cTempClone = cTemp;
- Assert.True(Char_InByRef(ref cTemp));
-
- cTemp = GetInvalidChar();
- cTempClone = cTemp;
- Assert.True(Char_InOutByRef(ref cTemp));
-
- cTemp = GetValidChar();
- cTempClone = cTemp;
- Assert.True(Char_InOutByRef(ref cTemp));
- }
-
- static void testCharBufferString()
- {
- Assert.True(CharBuffer_In_String(GetInvalidString()));
-
- Assert.True(CharBuffer_In_String(GetValidString()));
-
- String cTemp = GetInvalidString();
- String cTempClone = GetInvalidString();
- Assert.True(CharBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetInvalidString();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_String(ref cTemp));
- }
-
- static void testCharBufferStringBuilder()
- {
- Assert.True(CharBuffer_In_StringBuilder(GetInvalidStringBuilder()));
-
- Assert.True(CharBuffer_In_StringBuilder(GetValidStringBuilder()));
-
- StringBuilder cTemp = GetInvalidStringBuilder();
- StringBuilder cTempClone = cTemp;
- Assert.True(CharBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetInvalidStringBuilder();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_StringBuilder(ref cTemp));
- }
-
- static void runTest()
- {
- testChar();
- testCharBufferString();
- testCharBufferStringBuilder();
- }
-
- public static int Main()
- {
- if (System.Globalization.CultureInfo.CurrentCulture.Name != "en-US")
- {
- Console.WriteLine("Non-US English platforms are not supported.\nPassing without running tests");
-
- Console.WriteLine("--- Success");
- return 100;
- }
-
- try
- {
- runTest();
- return 100;
- } catch (Exception e){
- Console.WriteLine($"Test Failure: {e}");
- return 101;
- }
- }
-}
+++ /dev/null
-<Project Sdk="Microsoft.NET.Sdk">
- <PropertyGroup>
- <OutputType>Exe</OutputType>
- <!-- Test unsupported outside of windows -->
- <CLRTestTargetUnsupported Condition="'$(TargetsWindows)' != 'true'">true</CLRTestTargetUnsupported>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="$(MSBuildProjectName).cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CMakeLists.txt" />
- </ItemGroup>
-</Project>
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Text;
-using System.Runtime.InteropServices;
-using Xunit;
-
-[assembly: BestFitMapping(false, ThrowOnUnmappableChar = false)]
-
-public class BFM_CharMarshaler
-{
- [DllImport("Char_BestFitMappingNative")]
- public static extern bool Char_In([In]char c);
-
- [DllImport("Char_BestFitMappingNative")]
- public static extern bool Char_InByRef([In]ref char c);
-
- [DllImport("Char_BestFitMappingNative")]
- public static extern bool Char_InOutByRef([In, Out]ref char c);
-
- [DllImport("Char_BestFitMappingNative")]
- public static extern bool CharBuffer_In_String([In]String s);
-
- [DllImport("Char_BestFitMappingNative")]
- public static extern bool CharBuffer_InByRef_String([In]ref String s);
-
- [DllImport("Char_BestFitMappingNative")]
- public static extern bool CharBuffer_InOutByRef_String([In, Out]ref String s);
-
- [DllImport("Char_BestFitMappingNative")]
- public static extern bool CharBuffer_In_StringBuilder([In]StringBuilder s);
-
- [DllImport("Char_BestFitMappingNative")]
- public static extern bool CharBuffer_InByRef_StringBuilder([In]ref StringBuilder s);
-
- [DllImport("Char_BestFitMappingNative")]
- public static extern bool CharBuffer_InOutByRef_StringBuilder([In, Out]ref StringBuilder s);
-
- static String GetValidString()
- {
- return "This is the initial test string.";
- }
-
- static String GetInvalidString()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl.ToString();
- }
-
- static StringBuilder GetValidStringBuilder()
- {
- StringBuilder sb = new StringBuilder("test string.");
- return sb;
- }
-
- static StringBuilder GetInvalidStringBuilder()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl;
- }
-
- static char GetInvalidChar()
- {
- return (char)0x2216;
- }
-
- static char GetValidChar()
- {
- return 'c';
- }
-
- static void testChar()
- {
- Assert.True(Char_In(GetInvalidChar()));
-
- Assert.True(Char_In(GetValidChar()));
-
- char cTemp = GetInvalidChar();
- Assert.True(Char_InByRef(ref cTemp));
-
- cTemp = GetValidChar();
- Assert.True(Char_InByRef(ref cTemp));
-
- cTemp = GetInvalidChar();
- Assert.True(Char_InOutByRef(ref cTemp));
- Assert.Equal('?', cTemp);
-
- cTemp = GetValidChar();
- char cTempClone = cTemp;
- Assert.True(Char_InOutByRef(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
- }
-
- static void testCharBufferString()
- {
- Assert.True(CharBuffer_In_String(GetInvalidString()));
-
- Assert.True(CharBuffer_In_String(GetValidString()));
-
- String cTemp = GetInvalidString();
- Assert.True(CharBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- Assert.True(CharBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetInvalidString();
- String cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_String(ref cTemp));
- Assert.NotEqual(cTempClone, cTemp);
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
- }
-
- static void testCharBufferStringBuilder()
- {
- StringBuilder sb = GetInvalidStringBuilder();
- Assert.True(CharBuffer_In_StringBuilder(sb));
-
- Assert.True(CharBuffer_In_StringBuilder(GetValidStringBuilder()));
-
- StringBuilder cTemp = GetInvalidStringBuilder();
- Assert.True(CharBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- Assert.True(CharBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetInvalidStringBuilder();
- StringBuilder cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.NotEqual(cTempClone.ToString(), cTemp.ToString());
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
- }
-
- static void runTest()
- {
- testChar();
- testCharBufferString();
- testCharBufferStringBuilder();
- }
-
- public static int Main()
- {
- if (System.Globalization.CultureInfo.CurrentCulture.Name != "en-US")
- {
- Console.WriteLine("Non-US English platforms are not supported.\nPassing without running tests");
-
- Console.WriteLine("--- Success");
- return 100;
- }
-
- try
- {
- runTest();
- return 100;
- } catch (Exception e){
- Console.WriteLine($"Test Failure: {e}");
- return 101;
- }
- }
-}
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Text;
-using System.Runtime.InteropServices;
-using Xunit;
-
-[assembly: BestFitMapping(false, ThrowOnUnmappableChar = true)]
-
-public class BFM_CharMarshaler
-{
- [DllImport("Char_BestFitMappingNative")]
- public static extern bool Char_In([In]char c);
-
- [DllImport("Char_BestFitMappingNative")]
- public static extern bool Char_InByRef([In]ref char c);
-
- [DllImport("Char_BestFitMappingNative")]
- public static extern bool Char_InOutByRef([In, Out]ref char c);
-
- [DllImport("Char_BestFitMappingNative")]
- public static extern bool CharBuffer_In_String([In]String s);
-
- [DllImport("Char_BestFitMappingNative")]
- public static extern bool CharBuffer_InByRef_String([In]ref String s);
-
- [DllImport("Char_BestFitMappingNative")]
- public static extern bool CharBuffer_InOutByRef_String([In, Out]ref String s);
-
- [DllImport("Char_BestFitMappingNative")]
- public static extern bool CharBuffer_In_StringBuilder([In]StringBuilder s);
-
- [DllImport("Char_BestFitMappingNative")]
- public static extern bool CharBuffer_InByRef_StringBuilder([In]ref StringBuilder s);
-
- [DllImport("Char_BestFitMappingNative")]
- public static extern bool CharBuffer_InOutByRef_StringBuilder([In, Out]ref StringBuilder s);
-
- static String GetValidString()
- {
- return "This is the initial test string.";
- }
-
- static String GetInvalidString()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl.ToString();
- }
-
- static StringBuilder GetValidStringBuilder()
- {
- StringBuilder sb = new StringBuilder("test string.");
- return sb;
- }
-
- static StringBuilder GetInvalidStringBuilder()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl;
- }
-
- static char GetInvalidChar()
- {
- return (char)0x2216;
- }
-
- static char GetValidChar()
- {
- return 'c';
- }
-
- static void testChar()
- {
- Assert.Throws<ArgumentException>(() => Char_In(GetInvalidChar()));
-
- Assert.True(Char_In(GetValidChar()));
-
- char cTemp = GetInvalidChar();
- Assert.Throws<ArgumentException>(() => Char_InByRef(ref cTemp));
-
- cTemp = GetValidChar();
- Assert.True(Char_InByRef(ref cTemp));
-
- cTemp = GetInvalidChar();
- Assert.Throws<ArgumentException>(() => Char_InOutByRef(ref cTemp));
-
- cTemp = GetValidChar();
- char cTempClone = cTemp;
- Assert.True(Char_InOutByRef(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
- }
-
- static void testCharBufferString()
- {
- Assert.Throws<ArgumentException>(() => CharBuffer_In_String(GetInvalidString()));
-
- Assert.True(CharBuffer_In_String(GetValidString()));
-
- String cTemp = GetInvalidString();
- Assert.Throws<ArgumentException>(() => CharBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- Assert.True(CharBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetInvalidString();
- Assert.Throws<ArgumentException>(() => CharBuffer_InOutByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- String cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
- }
-
- static void testCharBufferStringBuilder()
- {
- Assert.Throws<ArgumentException>(() => CharBuffer_In_StringBuilder(GetInvalidStringBuilder()));
-
- Assert.True(CharBuffer_In_StringBuilder(GetValidStringBuilder()));
-
- StringBuilder cTemp = GetInvalidStringBuilder();
- Assert.Throws<ArgumentException>(() => CharBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- Assert.True(CharBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetInvalidStringBuilder();
- Assert.Throws<ArgumentException>(() => CharBuffer_InOutByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- StringBuilder cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
- }
-
- static void runTest()
- {
- testChar();
- testCharBufferString();
- testCharBufferStringBuilder();
- }
-
- public static int Main()
- {
- if (System.Globalization.CultureInfo.CurrentCulture.Name != "en-US")
- {
- Console.WriteLine("Non-US English platforms are not supported.\nPassing without running tests");
-
- Console.WriteLine("--- Success");
- return 100;
- }
-
- try
- {
- runTest();
- return 100;
- } catch (Exception e){
- Console.WriteLine($"Test Failure: {e}");
- return 101;
- }
- }
-}
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Text;
-using System.Runtime.InteropServices;
-using Xunit;
-
-[assembly: BestFitMapping(true, ThrowOnUnmappableChar = false)]
-
-public class BFM_CharMarshaler
-{
- [DllImport("Char_BestFitMappingNative")]
- public static extern bool Char_In([In]char c);
-
- [DllImport("Char_BestFitMappingNative")]
- public static extern bool Char_InByRef([In]ref char c);
-
- [DllImport("Char_BestFitMappingNative")]
- public static extern bool Char_InOutByRef([In, Out]ref char c);
-
- [DllImport("Char_BestFitMappingNative")]
- public static extern bool CharBuffer_In_String([In]String s);
-
- [DllImport("Char_BestFitMappingNative")]
- public static extern bool CharBuffer_InByRef_String([In]ref String s);
-
- [DllImport("Char_BestFitMappingNative")]
- public static extern bool CharBuffer_InOutByRef_String([In, Out]ref String s);
-
- [DllImport("Char_BestFitMappingNative")]
- public static extern bool CharBuffer_In_StringBuilder([In]StringBuilder s);
-
- [DllImport("Char_BestFitMappingNative")]
- public static extern bool CharBuffer_InByRef_StringBuilder([In]ref StringBuilder s);
-
- [DllImport("Char_BestFitMappingNative")]
- public static extern bool CharBuffer_InOutByRef_StringBuilder([In, Out]ref StringBuilder s);
-
- [DllImport("Char_BestFitMappingNative")]
- public static extern bool Char_InOut_ArrayWithOffset([In, Out]ArrayWithOffset charArrayWithOffset);
-
- static String GetValidString()
- {
- return "This is the initial test string.";
- }
-
- static String GetInvalidString()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl.ToString();
- }
-
- static StringBuilder GetValidStringBuilder()
- {
- StringBuilder sb = new StringBuilder("test string.");
- return sb;
- }
-
- static StringBuilder GetInvalidStringBuilder()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl;
- }
-
- static char GetInvalidChar()
- {
- return (char)0x2216;
- }
-
- static char GetValidChar()
- {
- return 'c';
- }
-
- static void testChar()
- {
- Assert.True(Char_In(GetInvalidChar()));
-
- Assert.True(Char_In(GetValidChar()));
-
- char cTemp = GetInvalidChar();
- char cTempClone = cTemp;
- Assert.True(Char_InByRef(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
-
- cTemp = GetValidChar();
- cTempClone = cTemp;
- Assert.True(Char_InByRef(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
-
- cTemp = GetInvalidChar();
- cTempClone = cTemp;
- Assert.True(Char_InOutByRef(ref cTemp));
- Assert.NotEqual(cTempClone, cTemp);
-
- cTemp = GetValidChar();
- cTempClone = cTemp;
- Assert.True(Char_InOutByRef(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
- }
-
- static void testCharBufferString()
- {
- Assert.True(CharBuffer_In_String(GetInvalidString()));
-
- Assert.True(CharBuffer_In_String(GetValidString()));
-
- String cTemp = GetInvalidString();
- String cTempClone = cTemp;
- Assert.True(CharBuffer_InByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
-
- cTemp = GetInvalidString();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_String(ref cTemp));
- Assert.NotEqual(cTempClone, cTemp);
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
- }
-
- static void testCharBufferStringBuilder()
- {
- Assert.True(CharBuffer_In_StringBuilder(GetInvalidStringBuilder()));
-
- Assert.True(CharBuffer_In_StringBuilder(GetValidStringBuilder()));
-
- StringBuilder cTemp = GetInvalidStringBuilder();
- StringBuilder cTempClone = cTemp;
- Assert.True(CharBuffer_InByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
-
- cTemp = GetInvalidStringBuilder();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.NotEqual(cTempClone.ToString(), cTemp.ToString());
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
- }
-
- static char[] GetInvalidArray()
- {
- char[] c = new char[3];
-
- c[0] = (char)0x2216;
- c[1] = (char)0x2216;
- c[2] = (char)0x2216;
-
- return c;
- }
-
- static char[] GetValidArray()
- {
- char[] c = new char[3];
-
- c[0] = 'a';
- c[1] = 'b';
- c[2] = 'c';
-
- return c;
- }
-
- static void testCharArrayWithOffset()
- {
- char[] c = GetInvalidArray();
- ArrayWithOffset arrWOff_0 = new ArrayWithOffset(c, 0);
- Assert.True(Char_InOut_ArrayWithOffset(arrWOff_0));
-
- c = GetValidArray();
- ArrayWithOffset arrWOff_1 = new ArrayWithOffset(c, 1);
- Assert.True(Char_InOut_ArrayWithOffset(arrWOff_1));
- }
-
- static void runTest()
- {
- testChar();
- testCharBufferString();
- testCharBufferStringBuilder();
- testCharArrayWithOffset();
- }
-
- public static int Main()
- {
- if (System.Globalization.CultureInfo.CurrentCulture.Name != "en-US")
- {
- Console.WriteLine("Non-US English platforms are not supported.\nPassing without running tests");
-
- Console.WriteLine("--- Success");
- return 100;
- }
-
- try
- {
- runTest();
- return 100;
- } catch (Exception e){
- Console.WriteLine($"Test Failure: {e}");
- return 101;
- }
- }
-}
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Text;
-using System.Runtime.InteropServices;
-using Xunit;
-
-[assembly: BestFitMapping(true, ThrowOnUnmappableChar = true)]
-
-public class BFM_CharMarshaler
-{
- [DllImport("Char_BestFitMappingNative")]
- public static extern bool Char_In([In]char c);
-
- [DllImport("Char_BestFitMappingNative")]
- public static extern bool Char_InByRef([In]ref char c);
-
- [DllImport("Char_BestFitMappingNative")]
- public static extern bool Char_InOutByRef([In, Out]ref char c);
-
- [DllImport("Char_BestFitMappingNative")]
- public static extern bool CharBuffer_In_String([In]String s);
-
- [DllImport("Char_BestFitMappingNative")]
- public static extern bool CharBuffer_InByRef_String([In]ref String s);
-
- [DllImport("Char_BestFitMappingNative")]
- public static extern bool CharBuffer_InOutByRef_String([In, Out]ref String s);
-
- [DllImport("Char_BestFitMappingNative")]
- public static extern bool CharBuffer_In_StringBuilder([In]StringBuilder s);
-
- [DllImport("Char_BestFitMappingNative")]
- public static extern bool CharBuffer_InByRef_StringBuilder([In]ref StringBuilder s);
-
- [DllImport("Char_BestFitMappingNative")]
- public static extern bool CharBuffer_InOutByRef_StringBuilder([In, Out]ref StringBuilder s);
-
- static String GetValidString()
- {
- return "This is the initial test string.";
- }
-
- static String GetInvalidString()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- //sbl.Append ('乀');
-
- return sbl.ToString();
- }
-
- static StringBuilder GetValidStringBuilder()
- {
- StringBuilder sb = new StringBuilder("test string.");
- return sb;
- }
-
- static StringBuilder GetInvalidStringBuilder()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- //sbl.Append ('乀');
- return sbl;
- }
-
- static char GetInvalidChar()
- {
- return (char)0x2216;
- }
-
- static char GetValidChar()
- {
- return 'c';
- }
-
- static void testChar()
- {
- Assert.True(Char_In(GetInvalidChar()));
-
- Assert.True(Char_In(GetValidChar()));
-
- char cTemp = GetInvalidChar();
- char cTempClone = GetInvalidChar();
- Assert.True(Char_InByRef(ref cTemp));
-
- cTemp = GetValidChar();
- cTempClone = cTemp;
- Assert.True(Char_InByRef(ref cTemp));
-
- cTemp = GetInvalidChar();
- cTempClone = cTemp;
- Assert.True(Char_InOutByRef(ref cTemp));
-
- cTemp = GetValidChar();
- cTempClone = cTemp;
- Assert.True(Char_InOutByRef(ref cTemp));
- }
-
- static void testCharBufferString()
- {
- Assert.True(CharBuffer_In_String(GetInvalidString()));
-
- Assert.True(CharBuffer_In_String(GetValidString()));
-
- String cTemp = GetInvalidString();
- String cTempClone = GetInvalidString();
- Assert.True(CharBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetInvalidString();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_String(ref cTemp));
- }
-
- static void testCharBufferStringBuilder()
- {
- Assert.True(CharBuffer_In_StringBuilder(GetInvalidStringBuilder()));
-
- Assert.True(CharBuffer_In_StringBuilder(GetValidStringBuilder()));
-
- StringBuilder cTemp = GetInvalidStringBuilder();
- StringBuilder cTempClone = cTemp;
- Assert.True(CharBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetInvalidStringBuilder();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_StringBuilder(ref cTemp));
- }
-
- static void runTest()
- {
- testChar();
- testCharBufferString();
- testCharBufferStringBuilder();
- }
-
- public static int Main()
- {
- if (System.Globalization.CultureInfo.CurrentCulture.Name != "en-US")
- {
- Console.WriteLine("Non-US English platforms are not supported.\nPassing without running tests");
-
- Console.WriteLine("--- Success");
- return 100;
- }
-
- try
- {
- runTest();
- return 100;
- } catch (Exception e){
- Console.WriteLine($"Test Failure: {e}");
- return 101;
- }
- }
-}
return TRUE;
}
-
-extern "C" bool DLL_EXPORT STDMETHODCALLTYPE Char_In_ArrayWithOffset (char* pArrayWithOffset)
-{
- return TRUE;
-}
-
-extern "C" bool DLL_EXPORT STDMETHODCALLTYPE Char_InOut_ArrayWithOffset (char* pArrayWithOffset)
-{
- return TRUE;
-}
-
-extern "C" bool DLL_EXPORT STDMETHODCALLTYPE Char_InByRef_ArrayWithOffset (char** ppArrayWithOffset)
-{
- return TRUE;
-}
-
-extern "C" bool DLL_EXPORT STDMETHODCALLTYPE Char_InOutByRef_ArrayWithOffset (char** ppArrayWithOffset)
-{
- return TRUE;
-}
--- /dev/null
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System;
+using System.Text;
+using System.Runtime.InteropServices;
+
+namespace Char;
+
+public partial class PInvoke_Default
+{
+ [DllImport("Char_BestFitMappingNative")]
+ public static extern bool Char_In([In]char c);
+
+ [DllImport("Char_BestFitMappingNative")]
+ public static extern bool Char_InByRef([In]ref char c);
+
+ [DllImport("Char_BestFitMappingNative")]
+ public static extern bool Char_InOutByRef([In, Out]ref char c);
+
+ [DllImport("Char_BestFitMappingNative")]
+ public static extern bool CharBuffer_In_String([In]String s);
+
+ [DllImport("Char_BestFitMappingNative")]
+ public static extern bool CharBuffer_InByRef_String([In]ref String s);
+
+ [DllImport("Char_BestFitMappingNative")]
+ public static extern bool CharBuffer_InOutByRef_String([In, Out]ref String s);
+
+ [DllImport("Char_BestFitMappingNative")]
+ public static extern bool CharBuffer_In_StringBuilder([In]StringBuilder s);
+
+ [DllImport("Char_BestFitMappingNative")]
+ public static extern bool CharBuffer_InByRef_StringBuilder([In]ref StringBuilder s);
+
+ [DllImport("Char_BestFitMappingNative")]
+ public static extern bool CharBuffer_InOutByRef_StringBuilder([In, Out]ref StringBuilder s);
+
+ private static unsafe void RunTest(bool bestFitMapping, bool throwOnUnmappableChar)
+ {
+ Console.WriteLine(" -- Validate P/Invokes: BestFitMapping not set, ThrowOnUnmappableChar not set");
+
+ Test.ValidateChar(
+ bestFitMapping,
+ throwOnUnmappableChar,
+ new Test.Functions<char>(
+ &Char_In,
+ &Char_InByRef,
+ &Char_InOutByRef));
+
+ Test.ValidateString(
+ bestFitMapping,
+ throwOnUnmappableChar,
+ new Test.Functions<string>(
+ &CharBuffer_In_String,
+ &CharBuffer_InByRef_String,
+ &CharBuffer_InOutByRef_String));
+
+ Test.ValidateStringBuilder(
+ bestFitMapping,
+ throwOnUnmappableChar,
+ new Test.Functions<StringBuilder>(
+ &CharBuffer_In_StringBuilder,
+ &CharBuffer_InByRef_StringBuilder,
+ &CharBuffer_InOutByRef_StringBuilder));
+ }
+}
--- /dev/null
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System;
+using System.Text;
+using System.Runtime.InteropServices;
+
+namespace Char;
+
+public class PInvoke_False_False
+{
+ [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
+ public static extern bool Char_In([In]char c);
+
+ [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
+ public static extern bool Char_InByRef([In]ref char c);
+
+ [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
+ public static extern bool Char_InOutByRef([In, Out]ref char c);
+
+ [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
+ public static extern bool CharBuffer_In_String([In]String s);
+
+ [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
+ public static extern bool CharBuffer_InByRef_String([In]ref String s);
+
+ [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
+ public static extern bool CharBuffer_InOutByRef_String([In, Out]ref String s);
+
+ [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
+ public static extern bool CharBuffer_In_StringBuilder([In]StringBuilder s);
+
+ [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
+ public static extern bool CharBuffer_InByRef_StringBuilder([In]ref StringBuilder s);
+
+ [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
+ public static extern bool CharBuffer_InOutByRef_StringBuilder([In, Out]ref StringBuilder s);
+
+ public static unsafe void RunTest()
+ {
+ Console.WriteLine(" -- Validate P/Invokes: BestFitMapping=false, ThrowOnUnmappableChar=false");
+
+ bool bestFitMapping = false;
+ bool throwOnUnmappableChar = false;
+
+ Test.ValidateChar(
+ bestFitMapping,
+ throwOnUnmappableChar,
+ new Test.Functions<char>(
+ &Char_In,
+ &Char_InByRef,
+ &Char_InOutByRef));
+
+ Test.ValidateString(
+ bestFitMapping,
+ throwOnUnmappableChar,
+ new Test.Functions<string>(
+ &CharBuffer_In_String,
+ &CharBuffer_InByRef_String,
+ &CharBuffer_InOutByRef_String));
+
+ Test.ValidateStringBuilder(
+ bestFitMapping,
+ throwOnUnmappableChar,
+ new Test.Functions<StringBuilder>(
+ &CharBuffer_In_StringBuilder,
+ &CharBuffer_InByRef_StringBuilder,
+ &CharBuffer_InOutByRef_StringBuilder));
+ }
+}
--- /dev/null
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System;
+using System.Text;
+using System.Runtime.InteropServices;
+
+namespace Char;
+
+public class PInvoke_False_True
+{
+ [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
+ public static extern bool Char_In([In]char c);
+
+ [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
+ public static extern bool Char_InByRef([In]ref char c);
+
+ [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
+ public static extern bool Char_InOutByRef([In, Out]ref char c);
+
+ [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
+ public static extern bool CharBuffer_In_String([In]String s);
+
+ [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
+ public static extern bool CharBuffer_InByRef_String([In]ref String s);
+
+ [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
+ public static extern bool CharBuffer_InOutByRef_String([In, Out]ref String s);
+
+ [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
+ public static extern bool CharBuffer_In_StringBuilder([In]StringBuilder s);
+
+ [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
+ public static extern bool CharBuffer_InByRef_StringBuilder([In]ref StringBuilder s);
+
+ [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
+ public static extern bool CharBuffer_InOutByRef_StringBuilder([In, Out]ref StringBuilder s);
+
+ public static unsafe void RunTest()
+ {
+ Console.WriteLine(" -- Validate P/Invokes: BestFitMapping=false, ThrowOnUnmappableChar=true");
+
+ bool bestFitMapping = false;
+ bool throwOnUnmappableChar = true;
+ Test.ValidateChar(
+ bestFitMapping,
+ throwOnUnmappableChar,
+ new Test.Functions<char>(
+ &Char_In,
+ &Char_InByRef,
+ &Char_InOutByRef));
+
+ Test.ValidateString(
+ bestFitMapping,
+ throwOnUnmappableChar,
+ new Test.Functions<string>(
+ &CharBuffer_In_String,
+ &CharBuffer_InByRef_String,
+ &CharBuffer_InOutByRef_String));
+
+ Test.ValidateStringBuilder(
+ bestFitMapping,
+ throwOnUnmappableChar,
+ new Test.Functions<StringBuilder>(
+ &CharBuffer_In_StringBuilder,
+ &CharBuffer_InByRef_StringBuilder,
+ &CharBuffer_InOutByRef_StringBuilder));
+ }
+}
--- /dev/null
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System;
+using System.Text;
+using System.Runtime.InteropServices;
+
+namespace Char;
+
+public class PInvoke_True_False
+{
+ [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
+ public static extern bool Char_In([In]char c);
+
+ [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
+ public static extern bool Char_InByRef([In]ref char c);
+
+ [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
+ public static extern bool Char_InOutByRef([In, Out]ref char c);
+
+ [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
+ public static extern bool CharBuffer_In_String([In]String s);
+
+ [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
+ public static extern bool CharBuffer_InByRef_String([In]ref String s);
+
+ [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
+ public static extern bool CharBuffer_InOutByRef_String([In, Out]ref String s);
+
+ [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
+ public static extern bool CharBuffer_In_StringBuilder([In]StringBuilder s);
+
+ [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
+ public static extern bool CharBuffer_InByRef_StringBuilder([In]ref StringBuilder s);
+
+ [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
+ public static extern bool CharBuffer_InOutByRef_StringBuilder([In, Out]ref StringBuilder s);
+
+ public static unsafe void RunTest()
+ {
+ Console.WriteLine(" -- Validate P/Invokes: BestFitMapping=true, ThrowOnUnmappableChar=false");
+
+ bool bestFitMapping = true;
+ bool throwOnUnmappableChar = false;
+
+ Test.ValidateChar(
+ bestFitMapping,
+ throwOnUnmappableChar,
+ new Test.Functions<char>(
+ &Char_In,
+ &Char_InByRef,
+ &Char_InOutByRef));
+
+ Test.ValidateString(
+ bestFitMapping,
+ throwOnUnmappableChar,
+ new Test.Functions<string>(
+ &CharBuffer_In_String,
+ &CharBuffer_InByRef_String,
+ &CharBuffer_InOutByRef_String));
+
+ Test.ValidateStringBuilder(
+ bestFitMapping,
+ throwOnUnmappableChar,
+ new Test.Functions<StringBuilder>(
+ &CharBuffer_In_StringBuilder,
+ &CharBuffer_InByRef_StringBuilder,
+ &CharBuffer_InOutByRef_StringBuilder));
+ }
+}
--- /dev/null
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System;
+using System.Text;
+using System.Runtime.InteropServices;
+
+namespace Char;
+
+public class PInvoke_True_True
+{
+ [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
+ public static extern bool Char_In([In]char c);
+
+ [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
+ public static extern bool Char_InByRef([In]ref char c);
+
+ [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
+ public static extern bool Char_InOutByRef([In, Out]ref char c);
+
+ [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
+ public static extern bool CharBuffer_In_String([In]String s);
+
+ [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
+ public static extern bool CharBuffer_InByRef_String([In]ref String s);
+
+ [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
+ public static extern bool CharBuffer_InOutByRef_String([In, Out]ref String s);
+
+ [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
+ public static extern bool CharBuffer_In_StringBuilder([In]StringBuilder s);
+
+ [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
+ public static extern bool CharBuffer_InByRef_StringBuilder([In]ref StringBuilder s);
+
+ [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
+ public static extern bool CharBuffer_InOutByRef_StringBuilder([In, Out]ref StringBuilder s);
+
+ public static unsafe void RunTest()
+ {
+ Console.WriteLine(" -- Validate P/Invokes: BestFitMapping=true, ThrowOnUnmappableChar=true");
+
+ bool bestFitMapping = true;
+ bool throwOnUnmappableChar = true;
+
+ Test.ValidateChar(
+ bestFitMapping,
+ throwOnUnmappableChar,
+ new Test.Functions<char>(
+ &Char_In,
+ &Char_InByRef,
+ &Char_InOutByRef));
+
+ Test.ValidateString(
+ bestFitMapping,
+ throwOnUnmappableChar,
+ new Test.Functions<string>(
+ &CharBuffer_In_String,
+ &CharBuffer_InByRef_String,
+ &CharBuffer_InOutByRef_String));
+
+ Test.ValidateStringBuilder(
+ bestFitMapping,
+ throwOnUnmappableChar,
+ new Test.Functions<StringBuilder>(
+ &CharBuffer_In_StringBuilder,
+ &CharBuffer_InByRef_StringBuilder,
+ &CharBuffer_InOutByRef_StringBuilder));
+ }
+}
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Text;
-using System.Runtime.InteropServices;
-using Xunit;
-
-public class BFM_CharMarshaler
-{
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool Char_In([In]char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool Char_InByRef([In]ref char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool Char_InOutByRef([In, Out]ref char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_In_String([In]String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_InByRef_String([In]ref String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_InOutByRef_String([In, Out]ref String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_In_StringBuilder([In]StringBuilder s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_InByRef_StringBuilder([In]ref StringBuilder s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_InOutByRef_StringBuilder([In, Out]ref StringBuilder s);
-
- static String GetValidString()
- {
- return "This is the initial test string.";
- }
-
- static String GetInvalidString()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl.ToString();
- }
-
- static StringBuilder GetValidStringBuilder()
- {
- StringBuilder sb = new StringBuilder("test string.");
- return sb;
- }
-
- static StringBuilder GetInvalidStringBuilder()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl;
- }
-
- static char GetInvalidChar()
- {
- return (char)0x2216;
- }
-
- static char GetValidChar()
- {
- return 'c';
- }
-
- static void testChar()
- {
- Assert.True(Char_In(GetInvalidChar()));
-
- Assert.True(Char_In(GetValidChar()));
-
- char cTemp = GetInvalidChar();
- Assert.True(Char_InByRef(ref cTemp));
-
- cTemp = GetValidChar();
- Assert.True(Char_InByRef(ref cTemp));
-
- cTemp = GetInvalidChar();
- Assert.True(Char_InOutByRef(ref cTemp));
- Assert.Equal('?', cTemp);
-
- cTemp = GetValidChar();
- char cTempClone = cTemp;
- Assert.True(Char_InOutByRef(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
- }
-
- static void testCharBufferString()
- {
- Assert.True(CharBuffer_In_String(GetInvalidString()));
-
- Assert.True(CharBuffer_In_String(GetValidString()));
-
- String cTemp = GetInvalidString();
- Assert.True(CharBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- Assert.True(CharBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetInvalidString();
- String cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_String(ref cTemp));
- Assert.NotEqual(cTempClone, cTemp);
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
- }
-
- static void testCharBufferStringBuilder()
- {
- StringBuilder sb = GetInvalidStringBuilder();
- Assert.True(CharBuffer_In_StringBuilder(sb));
-
- Assert.True(CharBuffer_In_StringBuilder(GetValidStringBuilder()));
-
- StringBuilder cTemp = GetInvalidStringBuilder();
- Assert.True(CharBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- Assert.True(CharBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetInvalidStringBuilder();
- StringBuilder cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.NotEqual(cTempClone.ToString(), cTemp.ToString());
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
- }
-
- static void runTest()
- {
- testChar();
- testCharBufferString();
- testCharBufferStringBuilder();
- }
-
- public static int Main()
- {
- if (System.Globalization.CultureInfo.CurrentCulture.Name != "en-US")
- {
- Console.WriteLine("Non-US English platforms are not supported.\nPassing without running tests");
-
- Console.WriteLine("--- Success");
- return 100;
- }
-
- try
- {
- runTest();
- return 100;
- } catch (Exception e){
- Console.WriteLine($"Test Failure: {e}");
- return 101;
- }
- }
-}
+++ /dev/null
-<Project Sdk="Microsoft.NET.Sdk">
- <PropertyGroup>
- <OutputType>Exe</OutputType>
- <!-- Test unsupported outside of windows -->
- <CLRTestTargetUnsupported Condition="'$(TargetsWindows)' != 'true'">true</CLRTestTargetUnsupported>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="$(MSBuildProjectName).cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CMakeLists.txt" />
- </ItemGroup>
-</Project>
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Text;
-using System.Runtime.InteropServices;
-using Xunit;
-
-public class BFM_CharMarshaler
-{
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool Char_In([In]char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool Char_InByRef([In]ref char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool Char_InOutByRef([In, Out]ref char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_In_String([In]String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_InByRef_String([In]ref String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_InOutByRef_String([In, Out]ref String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_In_StringBuilder([In]StringBuilder s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_InByRef_StringBuilder([In]ref StringBuilder s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_InOutByRef_StringBuilder([In, Out]ref StringBuilder s);
-
- static String GetValidString()
- {
- return "This is the initial test string.";
- }
-
- static String GetInvalidString()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl.ToString();
- }
-
- static StringBuilder GetValidStringBuilder()
- {
- StringBuilder sb = new StringBuilder("test string.");
- return sb;
- }
-
- static StringBuilder GetInvalidStringBuilder()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl;
- }
-
- static char GetInvalidChar()
- {
- return (char)0x2216;
- }
-
- static char GetValidChar()
- {
- return 'c';
- }
-
- static void testChar()
- {
- Assert.Throws<ArgumentException>(() => Char_In(GetInvalidChar()));
-
- Assert.True(Char_In(GetValidChar()));
-
- char cTemp = GetInvalidChar();
- Assert.Throws<ArgumentException>(() => Char_InByRef(ref cTemp));
-
- cTemp = GetValidChar();
- Assert.True(Char_InByRef(ref cTemp));
-
- cTemp = GetInvalidChar();
- Assert.Throws<ArgumentException>(() => Char_InOutByRef(ref cTemp));
-
- cTemp = GetValidChar();
- char cTempClone = cTemp;
- Assert.True(Char_InOutByRef(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
- }
-
- static void testCharBufferString()
- {
- Assert.Throws<ArgumentException>(() => CharBuffer_In_String(GetInvalidString()));
-
- Assert.True(CharBuffer_In_String(GetValidString()));
-
- String cTemp = GetInvalidString();
- Assert.Throws<ArgumentException>(() => CharBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- Assert.True(CharBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetInvalidString();
- Assert.Throws<ArgumentException>(() => CharBuffer_InOutByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- String cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
- }
-
- static void testCharBufferStringBuilder()
- {
- Assert.Throws<ArgumentException>(() => CharBuffer_In_StringBuilder(GetInvalidStringBuilder()));
-
- Assert.True(CharBuffer_In_StringBuilder(GetValidStringBuilder()));
-
- StringBuilder cTemp = GetInvalidStringBuilder();
- Assert.Throws<ArgumentException>(() => CharBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- Assert.True(CharBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetInvalidStringBuilder();
- Assert.Throws<ArgumentException>(() => CharBuffer_InOutByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- StringBuilder cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
- }
-
- static void runTest()
- {
- testChar();
- testCharBufferString();
- testCharBufferStringBuilder();
- }
-
- public static int Main()
- {
- if (System.Globalization.CultureInfo.CurrentCulture.Name != "en-US")
- {
- Console.WriteLine("Non-US English platforms are not supported.\nPassing without running tests");
-
- Console.WriteLine("--- Success");
- return 100;
- }
-
- try
- {
- runTest();
- return 100;
- } catch (Exception e){
- Console.WriteLine($"Test Failure: {e}");
- return 101;
- }
- }
-}
+++ /dev/null
-<Project Sdk="Microsoft.NET.Sdk">
- <PropertyGroup>
- <OutputType>Exe</OutputType>
- <!-- Test unsupported outside of windows -->
- <CLRTestTargetUnsupported Condition="'$(TargetsWindows)' != 'true'">true</CLRTestTargetUnsupported>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="$(MSBuildProjectName).cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CMakeLists.txt" />
- </ItemGroup>
-</Project>
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Text;
-using System.Runtime.InteropServices;
-using Xunit;
-
-public class BFM_CharMarshaler
-{
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool Char_In([In]char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool Char_InByRef([In]ref char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool Char_InOutByRef([In, Out]ref char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_In_String([In]String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_InByRef_String([In]ref String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_InOutByRef_String([In, Out]ref String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_In_StringBuilder([In]StringBuilder s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_InByRef_StringBuilder([In]ref StringBuilder s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool CharBuffer_InOutByRef_StringBuilder([In, Out]ref StringBuilder s);
-
- static String GetValidString()
- {
- return "This is the initial test string.";
- }
-
- static String GetInvalidString()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl.ToString();
- }
-
- static StringBuilder GetValidStringBuilder()
- {
- StringBuilder sb = new StringBuilder("test string.");
- return sb;
- }
-
- static StringBuilder GetInvalidStringBuilder()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl;
- }
-
- static char GetInvalidChar()
- {
- return (char)0x2216;
- }
-
- static char GetValidChar()
- {
- return 'c';
- }
-
- static void testChar()
- {
- Assert.True(Char_In(GetInvalidChar()));
-
- Assert.True(Char_In(GetValidChar()));
-
- char cTemp = GetInvalidChar();
- char cTempClone = cTemp;
- Assert.True(Char_InByRef(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
-
- cTemp = GetValidChar();
- cTempClone = cTemp;
- Assert.True(Char_InByRef(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
-
- cTemp = GetInvalidChar();
- cTempClone = cTemp;
- Assert.True(Char_InOutByRef(ref cTemp));
- Assert.NotEqual(cTempClone, cTemp);
-
- cTemp = GetValidChar();
- cTempClone = cTemp;
- Assert.True(Char_InOutByRef(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
- }
-
- static void testCharBufferString()
- {
- Assert.True(CharBuffer_In_String(GetInvalidString()));
-
- Assert.True(CharBuffer_In_String(GetValidString()));
-
- String cTemp = GetInvalidString();
- String cTempClone = cTemp;
- Assert.True(CharBuffer_InByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
-
- cTemp = GetInvalidString();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_String(ref cTemp));
- Assert.NotEqual(cTempClone, cTemp);
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
- }
-
- static void testCharBufferStringBuilder()
- {
- Assert.True(CharBuffer_In_StringBuilder(GetInvalidStringBuilder()));
-
- Assert.True(CharBuffer_In_StringBuilder(GetValidStringBuilder()));
-
- StringBuilder cTemp = GetInvalidStringBuilder();
- StringBuilder cTempClone = cTemp;
- Assert.True(CharBuffer_InByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
-
- cTemp = GetInvalidStringBuilder();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.NotEqual(cTempClone.ToString(), cTemp.ToString());
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
- }
-
- static void runTest()
- {
- testChar();
- testCharBufferString();
- testCharBufferStringBuilder();
- }
-
- public static int Main()
- {
- if (System.Globalization.CultureInfo.CurrentCulture.Name != "en-US")
- {
- Console.WriteLine("Non-US English platforms are not supported.\nPassing without running tests");
-
- Console.WriteLine("--- Success");
- return 100;
- }
-
- try
- {
- runTest();
- return 100;
- } catch (Exception e){
- Console.WriteLine($"Test Failure: {e}");
- return 101;
- }
- }
-}
+++ /dev/null
-<Project Sdk="Microsoft.NET.Sdk">
- <PropertyGroup>
- <OutputType>Exe</OutputType>
- <!-- Test unsupported outside of windows -->
- <CLRTestTargetUnsupported Condition="'$(TargetsWindows)' != 'true'">true</CLRTestTargetUnsupported>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="$(MSBuildProjectName).cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CMakeLists.txt" />
- </ItemGroup>
-</Project>
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Text;
-using System.Runtime.InteropServices;
-using Xunit;
-
-public class BFM_CharMarshaler
-{
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool Char_In([In]char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool Char_InByRef([In]ref char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool Char_InOutByRef([In, Out]ref char c);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_In_String([In]String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_InByRef_String([In]ref String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_InOutByRef_String([In, Out]ref String s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_In_StringBuilder([In]StringBuilder s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_InByRef_StringBuilder([In]ref StringBuilder s);
-
- [DllImport("Char_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool CharBuffer_InOutByRef_StringBuilder([In, Out]ref StringBuilder s);
-
- static String GetValidString()
- {
- return "This is the initial test string.";
- }
-
- static String GetInvalidString()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- //sbl.Append ('乀');
- return sbl.ToString();
- }
-
- static StringBuilder GetValidStringBuilder()
- {
- StringBuilder sb = new StringBuilder("test string.");
- return sb;
- }
-
- static StringBuilder GetInvalidStringBuilder()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- //sbl.Append ('乀');
- return sbl;
- }
-
- static char GetInvalidChar()
- {
- return (char)0x2216;
- }
-
- static char GetValidChar()
- {
- return 'c';
- }
-
- static void testChar()
- {
- Assert.True(Char_In(GetInvalidChar()));
-
- Assert.True(Char_In(GetValidChar()));
-
- char cTemp = GetInvalidChar();
- char cTempClone = GetInvalidChar();
- Assert.True(Char_InByRef(ref cTemp));
-
- cTemp = GetValidChar();
- cTempClone = cTemp;
- Assert.True(Char_InByRef(ref cTemp));
-
- cTemp = GetInvalidChar();
- cTempClone = cTemp;
- Assert.True(Char_InOutByRef(ref cTemp));
-
- cTemp = GetValidChar();
- cTempClone = cTemp;
- Assert.True(Char_InOutByRef(ref cTemp));
- }
-
- static void testCharBufferString()
- {
- Assert.True(CharBuffer_In_String(GetInvalidString()));
-
- Assert.True(CharBuffer_In_String(GetValidString()));
-
- String cTemp = GetInvalidString();
- String cTempClone = GetInvalidString();
- Assert.True(CharBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetInvalidString();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_String(ref cTemp));
- }
-
- static void testCharBufferStringBuilder()
- {
- Assert.True(CharBuffer_In_StringBuilder(GetInvalidStringBuilder()));
-
- Assert.True(CharBuffer_In_StringBuilder(GetValidStringBuilder()));
-
- StringBuilder cTemp = GetInvalidStringBuilder();
- StringBuilder cTempClone = cTemp;
- Assert.True(CharBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetInvalidStringBuilder();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(CharBuffer_InOutByRef_StringBuilder(ref cTemp));
- }
-
- static void runTest()
- {
- testChar();
- testCharBufferString();
- testCharBufferStringBuilder();
- }
-
- public static int Main()
- {
- if (System.Globalization.CultureInfo.CurrentCulture.Name != "en-US")
- {
- Console.WriteLine("Non-US English platforms are not supported.\nPassing without running tests");
-
- Console.WriteLine("--- Success");
- return 100;
- }
-
- try
- {
- runTest();
- return 100;
- } catch (Exception e){
- Console.WriteLine($"Test Failure: {e}");
- return 101;
- }
- }
-}
+++ /dev/null
-<Project Sdk="Microsoft.NET.Sdk">
- <PropertyGroup>
- <OutputType>Exe</OutputType>
- <!-- Test unsupported outside of windows -->
- <CLRTestTargetUnsupported Condition="'$(TargetsWindows)' != 'true'">true</CLRTestTargetUnsupported>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="$(MSBuildProjectName).cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CMakeLists.txt" />
- </ItemGroup>
-</Project>
--- /dev/null
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$([MSBuild]::GetPathOfFileAbove(Directory.Build.props, $(MSBuildThisFileDirectory)..))" />
+
+ <PropertyGroup>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <Compile Include="$(MSBuildThisFileDirectory)\Program.cs" />
+ <Compile Include="$(MSBuildThisFileDirectory)\Test.cs" />
+ <Compile Include="$(MSBuildThisFileDirectory)\TestData.cs" />
+
+ <Compile Include="$(MSBuildThisFileDirectory)\Char\PInvoke_Default.cs" />
+ <Compile Include="$(MSBuildThisFileDirectory)\Char\PInvoke_False_False.cs" />
+ <Compile Include="$(MSBuildThisFileDirectory)\Char\PInvoke_False_True.cs" />
+ <Compile Include="$(MSBuildThisFileDirectory)\Char\PInvoke_True_False.cs" />
+ <Compile Include="$(MSBuildThisFileDirectory)\Char\PInvoke_True_True.cs" />
+
+ <Compile Include="$(MSBuildThisFileDirectory)\LPStr\PInvoke_Default.cs" />
+ <Compile Include="$(MSBuildThisFileDirectory)\LPStr\PInvoke_False_False.cs" />
+ <Compile Include="$(MSBuildThisFileDirectory)\LPStr\PInvoke_False_True.cs" />
+ <Compile Include="$(MSBuildThisFileDirectory)\LPStr\PInvoke_True_False.cs" />
+ <Compile Include="$(MSBuildThisFileDirectory)\LPStr\PInvoke_True_True.cs" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <ProjectReference Include="$(MSBuildThisFileDirectory)\Char\CMakeLists.txt" />
+ <ProjectReference Include="$(MSBuildThisFileDirectory)\LPStr\CMakeLists.txt" />
+ </ItemGroup>
+</Project>
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Text;
-using System.Runtime.InteropServices;
-using Xunit;
-
-[assembly: BestFitMapping(false, ThrowOnUnmappableChar = false)]
-
-[StructLayout(LayoutKind.Sequential)]
-[BestFitMapping(false, ThrowOnUnmappableChar = false)]
-public struct LPStrTestStruct
-{
- [MarshalAs(UnmanagedType.LPStr)]
- public String str;
-}
-
-[StructLayout(LayoutKind.Sequential)]
-[BestFitMapping(false, ThrowOnUnmappableChar = false)]
-public class LPStrTestClass
-{
- [MarshalAs(UnmanagedType.LPStr)]
- public String str;
-}
-
-public class BFM_LPStrMarshaler
-{
-#pragma warning disable 618
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_String([In][MarshalAs(UnmanagedType.LPStr)]String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_String([In][MarshalAs(UnmanagedType.LPStr)]ref String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_String([In, Out][MarshalAs(UnmanagedType.LPStr)]ref String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_StringBuilder([In, Out][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_Struct_String([In][MarshalAs(UnmanagedType.Struct)]LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_Struct_String([In][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_Struct_String([In, Out][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_Array_String([In][MarshalAs(UnmanagedType.LPArray)]String[] strArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_Array_String([In][MarshalAs(UnmanagedType.LPArray)]ref String[] strArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_Array_String([In, Out][MarshalAs(UnmanagedType.LPArray)]ref String[] Array);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_Class_String([In, Out][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]LPStrTestStruct[] structArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_Array_Struct([In, Out][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
-#pragma warning restore 618
-
- static String GetValidString()
- {
- return "This is the initial test string.";
- }
-
- static String GetInvalidString()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl.ToString();
- }
-
- static StringBuilder GetValidStringBuilder()
- {
- StringBuilder sb = new StringBuilder("test string.");
- return sb;
- }
-
- static StringBuilder GetInvalidStringBuilder()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl;
- }
-
- static void testLPStrBufferString()
- {
- Assert.True(LPStrBuffer_In_String(GetInvalidString()));
-
- Assert.True(LPStrBuffer_In_String(GetValidString()));
-
- String cTemp = GetInvalidString();
- Assert.True(LPStrBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- Assert.True(LPStrBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetInvalidString();
- String cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_String(ref cTemp));
- Assert.NotEqual(cTempClone, cTemp);
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
- }
-
- static void testLPStrBufferStringBuilder()
- {
- StringBuilder sb = GetInvalidStringBuilder();
- Assert.True(LPStrBuffer_In_StringBuilder(sb));
-
- Assert.True(LPStrBuffer_In_StringBuilder(GetValidStringBuilder()));
-;
- StringBuilder cTemp = GetInvalidStringBuilder();
- Assert.True(LPStrBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- Assert.True(LPStrBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetInvalidStringBuilder();
- StringBuilder cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.NotEqual(cTempClone.ToString(), cTemp.ToString());
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
- }
-
- static LPStrTestStruct GetInvalidStruct()
- {
- LPStrTestStruct inValidStruct = new LPStrTestStruct();
- inValidStruct.str = GetInvalidString();
-
- return inValidStruct;
- }
-
- static LPStrTestStruct GetValidStruct()
- {
- LPStrTestStruct validStruct = new LPStrTestStruct();
- validStruct.str = GetValidString();
-
- return validStruct;
- }
-
- static String[] GetValidArray()
- {
- String[] s = new String[3];
-
- s[0] = GetValidString();
- s[1] = GetValidString();
- s[2] = GetValidString();
-
- return s;
- }
-
- static String[] GetInvalidArray()
- {
- String[] s = new String[3];
-
- s[0] = GetInvalidString();
- s[1] = GetInvalidString();
- s[2] = GetInvalidString();
-
- return s;
- }
-
- static void testLPStrBufferStruct()
- {
- LPStrTestStruct lpss = GetInvalidStruct();
- Assert.True(LPStrBuffer_In_Struct_String(lpss));
-
- Assert.True(LPStrBuffer_In_Struct_String(GetValidStruct()));
-
- LPStrTestStruct cTemp = GetInvalidStruct();
- Assert.True(LPStrBuffer_InByRef_Struct_String(ref cTemp));
-
- cTemp = GetValidStruct();
- Assert.True(LPStrBuffer_InByRef_Struct_String(ref cTemp));
-
- cTemp = GetInvalidStruct();
- LPStrTestStruct cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_Struct_String(ref cTemp));
- Assert.NotEqual(cTempClone.str, cTemp.str);
-
- cTemp = GetValidStruct();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_Struct_String(ref cTemp));
- Assert.Equal(cTempClone.str, cTemp.str);
- }
-
- static void testLPStrBufferClass()
- {
- LPStrTestClass lpss = new LPStrTestClass();
- lpss.str = GetInvalidString();
- Assert.True(LPStrBuffer_In_Class_String(lpss));
-
- lpss.str = GetValidString();
- Assert.True(LPStrBuffer_In_Class_String(lpss));
-
- LPStrTestClass cTemp = new LPStrTestClass();
- cTemp.str = GetInvalidString();
- Assert.True(LPStrBuffer_InByRef_Class_String(ref cTemp));
-
- cTemp.str = GetValidString();
- Assert.True(LPStrBuffer_InByRef_Class_String(ref cTemp));
-
- cTemp.str = GetInvalidString();
- LPStrTestClass cTempClone = new LPStrTestClass();
- cTempClone.str = cTemp.str;
- Assert.True(LPStrBuffer_InOutByRef_Class_String(ref cTemp));
- Assert.NotEqual(cTempClone.str, cTemp.str);
-
- cTemp.str = GetValidString();
- cTempClone.str = cTemp.str;
- Assert.True(LPStrBuffer_InOutByRef_Class_String(ref cTemp));
- Assert.Equal(cTempClone.str, cTemp.str);
- }
-
- static void testLPStrBufferArray()
- {
- String[] lpss = GetInvalidArray();
- Assert.True(LPStrBuffer_In_Array_String(lpss));
-
- Assert.True(LPStrBuffer_In_Array_String(GetValidArray()));
-
- String[] cTemp = GetInvalidArray();
- Assert.True(LPStrBuffer_InByRef_Array_String(ref cTemp));
-
- cTemp = GetValidArray();
- Assert.True(LPStrBuffer_InByRef_Array_String(ref cTemp));
-
- cTemp = GetInvalidArray();
- String[] cTempClone = new String[3];
- cTempClone[0] = cTemp[0];
- Assert.True(LPStrBuffer_InOutByRef_Array_String(ref cTemp));
- Assert.NotEqual(cTempClone[0], cTemp[0]);
-
- cTemp = GetValidArray();
- cTempClone[0] = cTemp[0];
- Assert.True(LPStrBuffer_InOutByRef_Array_String(ref cTemp));
- Assert.Equal(cTempClone[0], cTemp[0]);
- }
-
- static void testLPStrBufferArrayOfStructs()
- {
- LPStrTestStruct[] lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.True(LPStrBuffer_In_Array_Struct(lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_In_Array_Struct(lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.True(LPStrBuffer_InByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_InByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
-
- LPStrTestStruct[] lpssClone = new LPStrTestStruct[2];
- lpssClone[0].str = lpss[0].str;
- lpssClone[1].str = lpss[1].str;
-
- Assert.True(LPStrBuffer_InOutByRef_Array_Struct(ref lpss));
- Assert.NotEqual(lpssClone[0].str, lpss[0].str);
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
-
- lpssClone = new LPStrTestStruct[2];
- lpssClone[0].str = lpss[0].str;
- lpssClone[1].str = lpss[1].str;
-
- Assert.True(LPStrBuffer_InOutByRef_Array_Struct(ref lpss));
- Assert.Equal(lpssClone[0].str, lpss[0].str);
- }
-
- static void runTest()
- {
- testLPStrBufferString();
- testLPStrBufferStringBuilder();
- testLPStrBufferStruct();
- testLPStrBufferArray();
- testLPStrBufferClass();
- testLPStrBufferArrayOfStructs();
- }
-
- public static int Main()
- {
- if (System.Globalization.CultureInfo.CurrentCulture.Name != "en-US")
- {
- Console.WriteLine("Non-US English platforms are not supported.\nPassing without running tests");
-
- Console.WriteLine("--- Success");
- return 100;
- }
-
- try
- {
- runTest();
- return 100;
- } catch (Exception e){
- Console.WriteLine($"Test Failure: {e}");
- return 101;
- }
- }
-}
+++ /dev/null
-<Project Sdk="Microsoft.NET.Sdk">
- <PropertyGroup>
- <OutputType>Exe</OutputType>
- <!-- Test unsupported outside of windows -->
- <CLRTestTargetUnsupported Condition="'$(TargetsWindows)' != 'true'">true</CLRTestTargetUnsupported>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="$(MSBuildProjectName).cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CMakeLists.txt" />
- </ItemGroup>
-</Project>
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Text;
-using System.Runtime.InteropServices;
-using Xunit;
-
-[assembly: BestFitMapping(false, ThrowOnUnmappableChar = false)]
-
-[StructLayout(LayoutKind.Sequential)]
-[BestFitMapping(false, ThrowOnUnmappableChar = true)]
-public struct LPStrTestStruct
-{
- [MarshalAs(UnmanagedType.LPStr)]
- public String str;
-}
-
-[StructLayout(LayoutKind.Sequential)]
-[BestFitMapping(false, ThrowOnUnmappableChar = true)]
-public class LPStrTestClass
-{
- [MarshalAs(UnmanagedType.LPStr)]
- public String str;
-}
-
-public class BFM_LPStrMarshaler
-{
-#pragma warning disable 618
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_String([In][MarshalAs(UnmanagedType.LPStr)]String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_String([In][MarshalAs(UnmanagedType.LPStr)]ref String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_String([In, Out][MarshalAs(UnmanagedType.LPStr)]ref String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_StringBuilder([In, Out][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_Struct_String([In][MarshalAs(UnmanagedType.Struct)]LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_Struct_String([In][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_Struct_String([In, Out][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_Array_String([In][MarshalAs(UnmanagedType.LPArray)]String[] strArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_Array_String([In][MarshalAs(UnmanagedType.LPArray)]ref String[] strArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_Array_String([In, Out][MarshalAs(UnmanagedType.LPArray)]ref String[] Array);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_Class_String([In, Out][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
-
- // struct attribute should override PI flags for BFM
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]LPStrTestStruct[] structArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_Array_Struct([In, Out][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
-#pragma warning restore 618
-
- static String GetValidString()
- {
- return "This is the initial test string.";
- }
-
- static String GetInvalidString()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl.ToString();
- }
-
- static StringBuilder GetValidStringBuilder()
- {
- StringBuilder sb = new StringBuilder("test string.");
- return sb;
- }
-
- static StringBuilder GetInvalidStringBuilder()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl;
- }
-
- static void testLPStrBufferString()
- {
- Assert.Throws<ArgumentException>(() => LPStrBuffer_In_String(GetInvalidString()));
-
- Assert.True(LPStrBuffer_In_String(GetValidString()));
-
- String cTemp = GetInvalidString();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- Assert.True(LPStrBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetInvalidString();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InOutByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- String cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
- }
-
- static void testLPStrBufferStringBuilder()
- {
- Assert.Throws<ArgumentException>(() => LPStrBuffer_In_StringBuilder(GetInvalidStringBuilder()));
-
- Assert.True(LPStrBuffer_In_StringBuilder(GetValidStringBuilder()));
-
- StringBuilder cTemp = GetInvalidStringBuilder();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- Assert.True(LPStrBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetInvalidStringBuilder();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InOutByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- StringBuilder cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
- }
-
- static LPStrTestStruct GetInvalidStruct()
- {
- LPStrTestStruct inValidStruct = new LPStrTestStruct();
- inValidStruct.str = GetInvalidString();
-
- return inValidStruct;
- }
-
- static LPStrTestStruct GetValidStruct()
- {
- LPStrTestStruct validStruct = new LPStrTestStruct();
- validStruct.str = GetValidString();
-
- return validStruct;
- }
-
- static String[] GetValidArray()
- {
- String[] s = new String[3];
-
- s[0] = GetValidString();
- s[1] = GetValidString();
- s[2] = GetValidString();
-
- return s;
- }
-
- static String[] GetInvalidArray()
- {
- String[] s = new String[3];
-
- s[0] = GetInvalidString();
- s[1] = GetInvalidString();
- s[2] = GetInvalidString();
-
- return s;
- }
-
- static void testLPStrBufferStruct()
- {
- Assert.Throws<ArgumentException>(() => LPStrBuffer_In_Struct_String(GetInvalidStruct()));
-
- Assert.True(LPStrBuffer_In_Struct_String(GetValidStruct()));
-
- LPStrTestStruct cTemp = GetInvalidStruct();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InByRef_Struct_String(ref cTemp));
-
- cTemp = GetValidStruct();
- Assert.True(LPStrBuffer_InByRef_Struct_String(ref cTemp));
-
- cTemp = GetInvalidStruct();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InOutByRef_Struct_String(ref cTemp));
-
- cTemp = GetValidStruct();
- LPStrTestStruct cTempClone = new LPStrTestStruct();
- cTempClone.str = cTemp.str;
- Assert.True(LPStrBuffer_InOutByRef_Struct_String(ref cTemp));
- Assert.Equal(cTempClone.str, cTemp.str);
- }
-
- static void testLPStrBufferClass()
- {
- LPStrTestClass cTest = new LPStrTestClass();
- cTest.str = GetInvalidString();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_In_Class_String(cTest));
-
- cTest.str = GetValidString();
- Assert.True(LPStrBuffer_In_Class_String(cTest));
-
- LPStrTestClass cTemp = new LPStrTestClass();
- cTemp.str = GetInvalidString();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InByRef_Class_String(ref cTemp));
-
- cTemp.str = GetValidString();
- Assert.True(LPStrBuffer_InByRef_Class_String(ref cTemp));
-
- cTemp.str = GetInvalidString();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InOutByRef_Class_String(ref cTemp));
-
- LPStrTestClass cTempClone = new LPStrTestClass();
- cTemp.str = GetValidString();
- cTempClone.str = cTemp.str;
- Assert.True(LPStrBuffer_InOutByRef_Class_String(ref cTemp));
- Assert.Equal(cTempClone.str, cTemp.str);
- }
-
- static void testLPStrBufferArray()
- {
- String[] cTest = null;
- cTest = GetInvalidArray();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_In_Array_String(cTest));
-
- cTest = GetValidArray();
- Assert.True(LPStrBuffer_In_Array_String(cTest));
-
- String[] cTemp = GetInvalidArray();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InByRef_Array_String(ref cTemp));
-
- cTemp = GetValidArray();
- Assert.True(LPStrBuffer_InByRef_Array_String(ref cTemp));
-
- cTemp = GetInvalidArray();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InOutByRef_Array_String(ref cTemp));
-
- String[] cTempClone = new String[3];
- cTemp = GetValidArray();
- cTempClone[0] = cTemp[0];
- Assert.True(LPStrBuffer_InOutByRef_Array_String(ref cTemp));
- Assert.Equal(cTempClone[0], cTemp[0]);
- }
-
- static void testLPStrBufferArrayOfStructs()
- {
- LPStrTestStruct[] lpss = null;
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_In_Array_Struct(lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_In_Array_Struct(lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_InByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InOutByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- LPStrTestStruct[] lpssClone = new LPStrTestStruct[2];
- lpssClone[0].str = lpss[0].str;
- lpssClone[1].str = lpss[1].str;
- Assert.True(LPStrBuffer_InOutByRef_Array_Struct(ref lpss));
- Assert.Equal(lpss[0].str, lpssClone[0].str);
- }
-
- static void runTest()
- {
- testLPStrBufferString();
- testLPStrBufferStringBuilder();
- testLPStrBufferStruct();
- testLPStrBufferArray();
- testLPStrBufferClass();
- testLPStrBufferArrayOfStructs();
- }
-
- public static int Main()
- {
- if (System.Globalization.CultureInfo.CurrentCulture.Name != "en-US")
- {
- Console.WriteLine("Non-US English platforms are not supported.\nPassing without running tests");
-
- Console.WriteLine("--- Success");
- return 100;
- }
-
- try
- {
- runTest();
- return 100;
- }
- catch (Exception e)
- {
- Console.WriteLine($"Test Failure: {e}");
- return 101;
- }
- }
-}
+++ /dev/null
-<Project Sdk="Microsoft.NET.Sdk">
- <PropertyGroup>
- <OutputType>Exe</OutputType>
- <!-- Test unsupported outside of windows -->
- <CLRTestTargetUnsupported Condition="'$(TargetsWindows)' != 'true'">true</CLRTestTargetUnsupported>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="$(MSBuildProjectName).cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CMakeLists.txt" />
- </ItemGroup>
-</Project>
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Text;
-using System.Runtime.InteropServices;
-using Xunit;
-
-[assembly: BestFitMapping(false, ThrowOnUnmappableChar = false)]
-
-[StructLayout(LayoutKind.Sequential)]
-[BestFitMapping(true, ThrowOnUnmappableChar = false)]
-public struct LPStrTestStruct
-{
- [MarshalAs(UnmanagedType.LPStr)]
- public String str;
-}
-
-[StructLayout(LayoutKind.Sequential)]
-[BestFitMapping(true, ThrowOnUnmappableChar = false)]
-public class LPStrTestClass
-{
- [MarshalAs(UnmanagedType.LPStr)]
- public String str;
-}
-
-public class BFM_LPStrMarshaler
-{
-#pragma warning disable 618
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_String([In][MarshalAs(UnmanagedType.LPStr)]String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_String([In][MarshalAs(UnmanagedType.LPStr)]ref String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_String([In, Out][MarshalAs(UnmanagedType.LPStr)]ref String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_StringBuilder([In, Out][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_Struct_String([In][MarshalAs(UnmanagedType.Struct)]LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_Struct_String([In][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_Struct_String([In, Out][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_Array_String([In][MarshalAs(UnmanagedType.LPArray)]String[] strArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_Array_String([In][MarshalAs(UnmanagedType.LPArray)]ref String[] strArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_Array_String([In, Out][MarshalAs(UnmanagedType.LPArray)]ref String[] Array);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_Class_String([In, Out][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]LPStrTestStruct[] structArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_Array_Struct([In, Out][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
-#pragma warning restore 618
-
- static String GetValidString()
- {
- return "This is the initial test string.";
- }
-
- static String GetInvalidString()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl.ToString();
- }
-
- static StringBuilder GetValidStringBuilder()
- {
- StringBuilder sb = new StringBuilder("test string.");
- return sb;
- }
-
- static StringBuilder GetInvalidStringBuilder()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl;
- }
-
- static void testLPStrBufferString()
- {
- Assert.True(LPStrBuffer_In_String(GetInvalidString()));
-
- Assert.True(LPStrBuffer_In_String(GetValidString()));
-
- String cTemp = GetInvalidString();
- String cTempClone = cTemp;
- Assert.True(LPStrBuffer_InByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
-
- cTemp = GetInvalidString();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_String(ref cTemp));
- Assert.NotEqual(cTempClone, cTemp);
-
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
- }
-
- static void testLPStrBufferStringBuilder()
- {
- Assert.True(LPStrBuffer_In_StringBuilder(GetInvalidStringBuilder()));
-
- Assert.True(LPStrBuffer_In_StringBuilder(GetValidStringBuilder()));
-
- StringBuilder cTemp = GetInvalidStringBuilder();
- StringBuilder cTempClone = cTemp;
- Assert.True(LPStrBuffer_InByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
-
- cTemp = GetInvalidStringBuilder();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.NotEqual(cTempClone.ToString(), cTemp.ToString());
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
- }
-
- static LPStrTestStruct GetInvalidStruct()
- {
- LPStrTestStruct inValidStruct = new LPStrTestStruct();
- inValidStruct.str = GetInvalidString();
-
- return inValidStruct;
- }
-
- static LPStrTestStruct GetValidStruct()
- {
- LPStrTestStruct validStruct = new LPStrTestStruct();
- validStruct.str = GetValidString();
-
- return validStruct;
- }
-
- static void testLPStrBufferStruct()
- {
- Assert.True(LPStrBuffer_In_Struct_String(GetInvalidStruct()));
-
- Assert.True(LPStrBuffer_In_Struct_String(GetValidStruct()));
-
- LPStrTestStruct lpss = GetInvalidStruct();
- Assert.True(LPStrBuffer_InByRef_Struct_String(ref lpss));
-
- lpss = GetValidStruct();
- Assert.True(LPStrBuffer_InByRef_Struct_String(ref lpss));
-
- lpss = GetInvalidStruct();
- Assert.True(LPStrBuffer_InOutByRef_Struct_String(ref lpss));
-
- lpss = GetValidStruct();
- Assert.True(LPStrBuffer_InOutByRef_Struct_String(ref lpss));
- }
-
- static String[] GetValidArray()
- {
- String[] s = new String[3];
-
- s[0] = GetValidString();
- s[1] = GetValidString();
- s[2] = GetValidString();
-
- return s;
- }
-
- static String[] GetInvalidArray()
- {
- String[] s = new String[3];
-
- s[0] = GetInvalidString();
- s[1] = GetInvalidString();
- s[2] = GetInvalidString();
-
- return s;
- }
-
- static void testLPStrBufferArray()
- {
- String[] s = GetInvalidArray();
- Assert.True(LPStrBuffer_In_Array_String(s));
-
- s = GetValidArray();
- Assert.True(LPStrBuffer_In_Array_String(s));
-
- s = GetInvalidArray();
- Assert.True(LPStrBuffer_InByRef_Array_String(ref s));
-
- s = GetValidArray();
- Assert.True(LPStrBuffer_InByRef_Array_String(ref s));
-
- s = GetInvalidArray();
- Assert.True(LPStrBuffer_InOutByRef_Array_String(ref s));
-
- s = GetValidArray();
- Assert.True(LPStrBuffer_InOutByRef_Array_String(ref s));
- }
-
- static void testLPStrBufferClass()
- {
- LPStrTestClass sClass = new LPStrTestClass();
- sClass.str = GetInvalidString();
- Assert.True(LPStrBuffer_In_Class_String(sClass));
-
- sClass.str = GetValidString();
- Assert.True(LPStrBuffer_In_Class_String(sClass));
-
- sClass.str = GetInvalidString();
- Assert.True(LPStrBuffer_InByRef_Class_String(ref sClass));
-
- sClass.str = GetValidString();
- Assert.True(LPStrBuffer_InByRef_Class_String(ref sClass));
-
- sClass.str = GetInvalidString();
- Assert.True(LPStrBuffer_InOutByRef_Class_String(ref sClass));
-
- sClass.str = GetValidString();
- Assert.True(LPStrBuffer_InOutByRef_Class_String(ref sClass));
- }
-
- static void testLPStrBufferArrayOfStructs()
- {
- LPStrTestStruct[] lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.True(LPStrBuffer_In_Array_Struct(lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_In_Array_Struct(lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.True(LPStrBuffer_InByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_InByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.True(LPStrBuffer_InOutByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_InOutByRef_Array_Struct(ref lpss));
-
- }
-
- static void runTest()
- {
- testLPStrBufferString();
- testLPStrBufferStringBuilder();
- testLPStrBufferStruct();
- testLPStrBufferArray();
- testLPStrBufferClass();
- testLPStrBufferArrayOfStructs();
- }
-
- public static int Main()
- {
- if (System.Globalization.CultureInfo.CurrentCulture.Name != "en-US")
- {
- Console.WriteLine("Non-US English platforms are not supported.\nPassing without running tests");
-
- Console.WriteLine("--- Success");
- return 100;
- }
-
- try
- {
- runTest();
- return 100;
- }
- catch (Exception e)
- {
- Console.WriteLine($"Test Failure: {e}");
- return 101;
- }
- }
-}
+++ /dev/null
-<Project Sdk="Microsoft.NET.Sdk">
- <PropertyGroup>
- <OutputType>Exe</OutputType>
- <!-- Test unsupported outside of windows -->
- <CLRTestTargetUnsupported Condition="'$(TargetsWindows)' != 'true'">true</CLRTestTargetUnsupported>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="$(MSBuildProjectName).cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CMakeLists.txt" />
- </ItemGroup>
-</Project>
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Text;
-using System.Runtime.InteropServices;
-using Xunit;
-
-[assembly: BestFitMapping(false, ThrowOnUnmappableChar = false)]
-
-[StructLayout(LayoutKind.Sequential)]
-[BestFitMapping(true, ThrowOnUnmappableChar = true)]
-public struct LPStrTestStruct
-{
- [MarshalAs(UnmanagedType.LPStr)]
- public String str;
-}
-
-[StructLayout(LayoutKind.Sequential)]
-[BestFitMapping(true, ThrowOnUnmappableChar = true)]
-public class LPStrTestClass
-{
- [MarshalAs(UnmanagedType.LPStr)]
- public String str;
-}
-
-public class BFM_LPStrMarshaler
-{
-#pragma warning disable 618
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_String([In][MarshalAs(UnmanagedType.LPStr)]String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_String([In][MarshalAs(UnmanagedType.LPStr)]ref String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_String([In, Out][MarshalAs(UnmanagedType.LPStr)]ref String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_StringBuilder([In, Out][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_Struct_String([In][MarshalAs(UnmanagedType.Struct)]LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_Struct_String([In][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_Struct_String([In, Out][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_Array_String([In][MarshalAs(UnmanagedType.LPArray)]String[] strArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_Array_String([In][MarshalAs(UnmanagedType.LPArray)]ref String[] strArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_Array_String([In, Out][MarshalAs(UnmanagedType.LPArray)]ref String[] Array);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_Class_String([In, Out][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]LPStrTestStruct[] structArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_Array_Struct([In, Out][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
-#pragma warning restore 618
-
- static String GetValidString()
- {
- return "This is the initial test string.";
- }
-
- static String GetInvalidString()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- //sbl.Append ('乀');
- return sbl.ToString();
- }
-
- static StringBuilder GetValidStringBuilder()
- {
- StringBuilder sb = new StringBuilder("test string.");
- return sb;
- }
-
- static StringBuilder GetInvalidStringBuilder()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- //sbl.Append ('乀');
- return sbl;
- }
-
- static void testLPStrBufferString()
- {
- Assert.True(LPStrBuffer_In_String(GetInvalidString()));
-
- Assert.True(LPStrBuffer_In_String(GetValidString()));
-
- String cTemp = GetInvalidString();
- String cTempClone = GetInvalidString();
- Assert.True(LPStrBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetInvalidString();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_String(ref cTemp));
- }
-
- static void testLPStrBufferStringBuilder()
- {
- Assert.True(LPStrBuffer_In_StringBuilder(GetInvalidStringBuilder()));
-
- Assert.True(LPStrBuffer_In_StringBuilder(GetValidStringBuilder()));
-
- StringBuilder cTemp = GetInvalidStringBuilder();
- StringBuilder cTempClone = cTemp;
- Assert.True(LPStrBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetInvalidStringBuilder();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_StringBuilder(ref cTemp));
- }
-
- static LPStrTestStruct GetInvalidStruct()
- {
- LPStrTestStruct inValidStruct = new LPStrTestStruct();
- inValidStruct.str = GetInvalidString();
-
- return inValidStruct;
- }
-
- static LPStrTestStruct GetValidStruct()
- {
- LPStrTestStruct validStruct = new LPStrTestStruct();
- validStruct.str = GetValidString();
-
- return validStruct;
- }
-
- static void testLPStrBufferStruct()
- {
- Assert.True(LPStrBuffer_In_Struct_String(GetInvalidStruct()));
- Assert.True(LPStrBuffer_In_Struct_String(GetValidStruct()));
-
- LPStrTestStruct lpss = GetInvalidStruct();
- Assert.True(LPStrBuffer_InByRef_Struct_String(ref lpss));
-
- lpss = GetValidStruct();
- Assert.True(LPStrBuffer_InByRef_Struct_String(ref lpss));
-
- lpss = GetInvalidStruct();
- Assert.True(LPStrBuffer_InOutByRef_Struct_String(ref lpss));
-
- lpss = GetValidStruct();
- Assert.True(LPStrBuffer_InOutByRef_Struct_String(ref lpss));
- }
-
- static String[] GetValidArray()
- {
- String[] s = new String[3];
-
- s[0] = GetValidString();
- s[1] = GetValidString();
- s[2] = GetValidString();
-
- return s;
- }
-
- static String[] GetInvalidArray()
- {
- String[] s = new String[3];
-
- s[0] = GetInvalidString();
- s[1] = GetInvalidString();
- s[2] = GetInvalidString();
-
- return s;
- }
-
- static void testLPStrBufferArray()
- {
- String[] s = GetInvalidArray();
- Assert.True(LPStrBuffer_In_Array_String(s));
-
- s = GetValidArray();
- Assert.True(LPStrBuffer_In_Array_String(s));
-
- s = GetInvalidArray();
- Assert.True(LPStrBuffer_InByRef_Array_String(ref s));
-
- s = GetValidArray();
- Assert.True(LPStrBuffer_InByRef_Array_String(ref s));
-
- s = GetInvalidArray();
- Assert.True(LPStrBuffer_InOutByRef_Array_String(ref s));
-
- s = GetValidArray();
- Assert.True(LPStrBuffer_InOutByRef_Array_String(ref s));
- }
-
- static void testLPStrBufferClass()
- {
- LPStrTestClass sClass = new LPStrTestClass();
- sClass.str = GetInvalidString();
- Assert.True(LPStrBuffer_In_Class_String(sClass));
-
- sClass.str = GetValidString();
- Assert.True(LPStrBuffer_In_Class_String(sClass));
-
- sClass.str = GetInvalidString();
- Assert.True(LPStrBuffer_InByRef_Class_String(ref sClass));
-
- sClass.str = GetValidString();
- Assert.True(LPStrBuffer_InByRef_Class_String(ref sClass));
-
- sClass.str = GetInvalidString();
- Assert.True(LPStrBuffer_InOutByRef_Class_String(ref sClass));
-
- sClass.str = GetValidString();
- Assert.True(LPStrBuffer_InOutByRef_Class_String(ref sClass));
- }
-
- static void testLPStrBufferArrayOfStructs()
- {
- LPStrTestStruct[] lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.True(LPStrBuffer_In_Array_Struct(lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_In_Array_Struct(lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.True(LPStrBuffer_InByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_InByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.True(LPStrBuffer_InOutByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_InOutByRef_Array_Struct(ref lpss));
- }
-
- static void runTest()
- {
- testLPStrBufferString();
- testLPStrBufferStringBuilder();
- testLPStrBufferStruct();
- testLPStrBufferArray();
- testLPStrBufferClass();
- testLPStrBufferArrayOfStructs();
- }
-
- public static int Main()
- {
- if (System.Globalization.CultureInfo.CurrentCulture.Name != "en-US")
- {
- Console.WriteLine("Non-US English platforms are not supported.\nPassing without running tests");
-
- Console.WriteLine("--- Success");
- return 100;
- }
-
- try
- {
- runTest();
- return 100;
- }
- catch (Exception e)
- {
- Console.WriteLine($"Test Failure: {e}");
- return 101;
- }
- }
-}
+++ /dev/null
-<Project Sdk="Microsoft.NET.Sdk">
- <PropertyGroup>
- <OutputType>Exe</OutputType>
- <!-- Test unsupported outside of windows -->
- <CLRTestTargetUnsupported Condition="'$(TargetsWindows)' != 'true'">true</CLRTestTargetUnsupported>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="$(MSBuildProjectName).cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CMakeLists.txt" />
- </ItemGroup>
-</Project>
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Text;
-using System.Runtime.InteropServices;
-using Xunit;
-
-[assembly: BestFitMapping(false, ThrowOnUnmappableChar = true)]
-
-[StructLayout(LayoutKind.Sequential)]
-[BestFitMapping(false, ThrowOnUnmappableChar = false)]
-public struct LPStrTestStruct
-{
- [MarshalAs(UnmanagedType.LPStr)]
- public String str;
-}
-
-[StructLayout(LayoutKind.Sequential)]
-[BestFitMapping(false, ThrowOnUnmappableChar = false)]
-public class LPStrTestClass
-{
- [MarshalAs(UnmanagedType.LPStr)]
- public String str;
-}
-
-public class BFM_LPStrMarshaler
-{
-#pragma warning disable 618
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_String([In][MarshalAs(UnmanagedType.LPStr)]String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_String([In][MarshalAs(UnmanagedType.LPStr)]ref String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_String([In, Out][MarshalAs(UnmanagedType.LPStr)]ref String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_StringBuilder([In, Out][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_Struct_String([In][MarshalAs(UnmanagedType.Struct)]LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_Struct_String([In][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_Struct_String([In, Out][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_Array_String([In][MarshalAs(UnmanagedType.LPArray)]String[] strArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_Array_String([In][MarshalAs(UnmanagedType.LPArray)]ref String[] strArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_Array_String([In, Out][MarshalAs(UnmanagedType.LPArray)]ref String[] Array);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_Class_String([In, Out][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]LPStrTestStruct[] structArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_Array_Struct([In, Out][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
-#pragma warning restore 618
- static String GetValidString()
- {
- return "This is the initial test string.";
- }
-
- static String GetInvalidString()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl.ToString();
- }
-
- static StringBuilder GetValidStringBuilder()
- {
- StringBuilder sb = new StringBuilder("test string.");
- return sb;
- }
-
- static StringBuilder GetInvalidStringBuilder()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl;
- }
-
- static void testLPStrBufferString()
- {
- Assert.True(LPStrBuffer_In_String(GetInvalidString()));
-
- Assert.True(LPStrBuffer_In_String(GetValidString()));
-
- String cTemp = GetInvalidString();
- Assert.True(LPStrBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- Assert.True(LPStrBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetInvalidString();
- String cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_String(ref cTemp));
- Assert.NotEqual(cTempClone, cTemp);
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
- }
-
- static void testLPStrBufferStringBuilder()
- {
- StringBuilder sb = GetInvalidStringBuilder();
- Assert.True(LPStrBuffer_In_StringBuilder(sb));
-
- Assert.True(LPStrBuffer_In_StringBuilder(GetValidStringBuilder()));
-
- StringBuilder cTemp = GetInvalidStringBuilder();
- Assert.True(LPStrBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- Assert.True(LPStrBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetInvalidStringBuilder();
- StringBuilder cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.NotEqual(cTempClone.ToString(), cTemp.ToString());
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
- }
-
- static LPStrTestStruct GetInvalidStruct()
- {
- LPStrTestStruct inValidStruct = new LPStrTestStruct();
- inValidStruct.str = GetInvalidString();
-
- return inValidStruct;
- }
-
- static LPStrTestStruct GetValidStruct()
- {
- LPStrTestStruct validStruct = new LPStrTestStruct();
- validStruct.str = GetValidString();
-
- return validStruct;
- }
-
- static String[] GetValidArray()
- {
- String[] s = new String[3];
-
- s[0] = GetValidString();
- s[1] = GetValidString();
- s[2] = GetValidString();
-
- return s;
- }
-
- static String[] GetInvalidArray()
- {
- String[] s = new String[3];
-
- s[0] = GetInvalidString();
- s[1] = GetInvalidString();
- s[2] = GetInvalidString();
-
- return s;
- }
-
- static void testLPStrBufferStruct()
- {
- LPStrTestStruct lpss = GetInvalidStruct();
- Assert.True(LPStrBuffer_In_Struct_String(lpss));
-
- Assert.True(LPStrBuffer_In_Struct_String(GetValidStruct()));
-
- LPStrTestStruct cTemp = GetInvalidStruct();
- Assert.True(LPStrBuffer_InByRef_Struct_String(ref cTemp));
-
- cTemp = GetValidStruct();
- Assert.True(LPStrBuffer_InByRef_Struct_String(ref cTemp));
-
- cTemp = GetInvalidStruct();
- LPStrTestStruct cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_Struct_String(ref cTemp));
- Assert.NotEqual(cTempClone.str, cTemp.str);
-
- cTemp = GetValidStruct();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_Struct_String(ref cTemp));
- Assert.Equal(cTempClone.str, cTemp.str);
- }
-
- static void testLPStrBufferClass()
- {
- LPStrTestClass lpss = new LPStrTestClass();
- lpss.str = GetInvalidString();
- Assert.True(LPStrBuffer_In_Class_String(lpss));
-
- lpss.str = GetValidString();
- Assert.True(LPStrBuffer_In_Class_String(lpss));
-
- LPStrTestClass cTemp = new LPStrTestClass();
- cTemp.str = GetInvalidString();
- Assert.True(LPStrBuffer_InByRef_Class_String(ref cTemp));
-
- cTemp.str = GetValidString();
- Assert.True(LPStrBuffer_InByRef_Class_String(ref cTemp));
-
- cTemp.str = GetInvalidString();
- LPStrTestClass cTempClone = new LPStrTestClass();
- cTempClone.str = cTemp.str;
- Assert.True(LPStrBuffer_InOutByRef_Class_String(ref cTemp));
- Assert.NotEqual(cTempClone.str, cTemp.str);
-
- cTemp.str = GetValidString();
- cTempClone.str = cTemp.str;
- Assert.True(LPStrBuffer_InOutByRef_Class_String(ref cTemp));
- Assert.Equal(cTempClone.str, cTemp.str);
- }
-
- static void testLPStrBufferArray()
- {
- String[] lpss = GetInvalidArray();
- Assert.True(LPStrBuffer_In_Array_String(lpss));
- Assert.True(LPStrBuffer_In_Array_String(GetValidArray()));
-
- String[] cTemp = GetInvalidArray();
- Assert.True(LPStrBuffer_InByRef_Array_String(ref cTemp));
-
- cTemp = GetValidArray();
- Assert.True(LPStrBuffer_InByRef_Array_String(ref cTemp));
-
- cTemp = GetInvalidArray();
- String[] cTempClone = new String[3];
- cTempClone[0] = cTemp[0];
- Assert.True(LPStrBuffer_InOutByRef_Array_String(ref cTemp));
- Assert.NotEqual(cTempClone[0], cTemp[0]);
-
- cTemp = GetValidArray();
- cTempClone[0] = cTemp[0];
- Assert.True(LPStrBuffer_InOutByRef_Array_String(ref cTemp));
- Assert.Equal(cTempClone[0], cTemp[0]);
- }
-
- static void testLPStrBufferArrayOfStructs()
- {
- LPStrTestStruct[] lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.True(LPStrBuffer_In_Array_Struct(lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_In_Array_Struct(lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.True(LPStrBuffer_InByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_InByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- LPStrTestStruct[] lpssClone = new LPStrTestStruct[2];
- lpssClone[0].str = lpss[0].str;
- lpssClone[1].str = lpss[1].str;
- Assert.True(LPStrBuffer_InOutByRef_Array_Struct(ref lpss));
- Assert.NotEqual(lpss[0].str, lpssClone[0].str);
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- lpssClone = new LPStrTestStruct[2];
- lpssClone[0].str = lpss[0].str;
- lpssClone[1].str = lpss[1].str;
- Assert.True(LPStrBuffer_InOutByRef_Array_Struct(ref lpss));
- Assert.Equal(lpss[0].str, lpssClone[0].str);
- }
-
- static void runTest()
- {
- testLPStrBufferString();
- testLPStrBufferStringBuilder();
- testLPStrBufferStruct();
- testLPStrBufferArray();
- testLPStrBufferClass();
- testLPStrBufferArrayOfStructs();
- }
-
- public static int Main()
- {
- if (System.Globalization.CultureInfo.CurrentCulture.Name != "en-US")
- {
- Console.WriteLine("Non-US English platforms are not supported.\nPassing without running tests");
-
- Console.WriteLine("--- Success");
- return 100;
- }
-
- try
- {
- runTest();
- return 100;
- }
- catch (Exception e)
- {
- Console.WriteLine($"Test Failure: {e}");
- return 101;
- }
- }
-}
+++ /dev/null
-<Project Sdk="Microsoft.NET.Sdk">
- <PropertyGroup>
- <OutputType>Exe</OutputType>
- <!-- Test unsupported outside of windows -->
- <CLRTestTargetUnsupported Condition="'$(TargetsWindows)' != 'true'">true</CLRTestTargetUnsupported>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="$(MSBuildProjectName).cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CMakeLists.txt" />
- </ItemGroup>
-</Project>
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Text;
-using System.Runtime.InteropServices;
-using Xunit;
-
-[assembly: BestFitMapping(false, ThrowOnUnmappableChar = true)]
-
-[StructLayout(LayoutKind.Sequential)]
-[BestFitMapping(false, ThrowOnUnmappableChar = true)]
-public struct LPStrTestStruct
-{
- [MarshalAs(UnmanagedType.LPStr)]
- public String str;
-}
-
-[StructLayout(LayoutKind.Sequential)]
-[BestFitMapping(false, ThrowOnUnmappableChar = true)]
-public class LPStrTestClass
-{
- [MarshalAs(UnmanagedType.LPStr)]
- public String str;
-}
-
-public class BFM_LPStrMarshaler
-{
-#pragma warning disable 618
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_String([In][MarshalAs(UnmanagedType.LPStr)]String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_String([In][MarshalAs(UnmanagedType.LPStr)]ref String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_String([In, Out][MarshalAs(UnmanagedType.LPStr)]ref String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_StringBuilder([In, Out][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_Struct_String([In][MarshalAs(UnmanagedType.Struct)]LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_Struct_String([In][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_Struct_String([In, Out][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_Array_String([In][MarshalAs(UnmanagedType.LPArray)]String[] strArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_Array_String([In][MarshalAs(UnmanagedType.LPArray)]ref String[] strArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_Array_String([In, Out][MarshalAs(UnmanagedType.LPArray)]ref String[] Array);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_Class_String([In, Out][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]LPStrTestStruct[] structArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_Array_Struct([In, Out][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
-#pragma warning restore 618
- static String GetValidString()
- {
- return "This is the initial test string.";
- }
-
- static String GetInvalidString()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl.ToString();
- }
-
- static StringBuilder GetValidStringBuilder()
- {
- StringBuilder sb = new StringBuilder("test string.");
- return sb;
- }
-
- static StringBuilder GetInvalidStringBuilder()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl;
- }
-
- static void testLPStrBufferString()
- {
- Assert.Throws<ArgumentException>(() => LPStrBuffer_In_String(GetInvalidString()));
-
- Assert.True(LPStrBuffer_In_String(GetValidString()));
-
- String cTemp = GetInvalidString();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- Assert.True(LPStrBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetInvalidString();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InOutByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- String cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
- }
-
- static void testLPStrBufferStringBuilder()
- {
- Assert.Throws<ArgumentException>(() => LPStrBuffer_In_StringBuilder(GetInvalidStringBuilder()));
-
- Assert.True(LPStrBuffer_In_StringBuilder(GetValidStringBuilder()));
-
- StringBuilder cTemp = GetInvalidStringBuilder();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- Assert.True(LPStrBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetInvalidStringBuilder();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InOutByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- StringBuilder cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
- }
-
- static LPStrTestStruct GetInvalidStruct()
- {
- LPStrTestStruct inValidStruct = new LPStrTestStruct();
- inValidStruct.str = GetInvalidString();
-
- return inValidStruct;
- }
-
- static LPStrTestStruct GetValidStruct()
- {
- LPStrTestStruct validStruct = new LPStrTestStruct();
- validStruct.str = GetValidString();
-
- return validStruct;
- }
-
- static String[] GetValidArray()
- {
- String[] s = new String[3];
-
- s[0] = GetValidString();
- s[1] = GetValidString();
- s[2] = GetValidString();
-
- return s;
- }
-
- static String[] GetInvalidArray()
- {
- String[] s = new String[3];
-
- s[0] = GetInvalidString();
- s[1] = GetInvalidString();
- s[2] = GetInvalidString();
-
- return s;
- }
-
- static void testLPStrBufferStruct()
- {
- Assert.Throws<ArgumentException>(() => LPStrBuffer_In_Struct_String(GetInvalidStruct()));
-
- Assert.True(LPStrBuffer_In_Struct_String(GetValidStruct()));
-
- LPStrTestStruct cTemp = GetInvalidStruct();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InByRef_Struct_String(ref cTemp));
-
- cTemp = GetValidStruct();
- Assert.True(LPStrBuffer_InByRef_Struct_String(ref cTemp));
-
- cTemp = GetInvalidStruct();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InOutByRef_Struct_String(ref cTemp));
-
- cTemp = GetValidStruct();
- LPStrTestStruct cTempClone = new LPStrTestStruct();
- cTempClone.str = cTemp.str;
- Assert.True(LPStrBuffer_InOutByRef_Struct_String(ref cTemp));
- Assert.Equal(cTempClone.str, cTemp.str);
- }
-
- static void testLPStrBufferClass()
- {
- LPStrTestClass cTest = new LPStrTestClass();
- cTest.str = GetInvalidString();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_In_Class_String(cTest));
-
- cTest.str = GetValidString();
- Assert.True(LPStrBuffer_In_Class_String(cTest));
-
- LPStrTestClass cTemp = new LPStrTestClass();
- cTemp.str = GetInvalidString();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InByRef_Class_String(ref cTemp));
-
- cTemp.str = GetValidString();
- Assert.True(LPStrBuffer_InByRef_Class_String(ref cTemp));
-
- cTemp.str = GetInvalidString();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InOutByRef_Class_String(ref cTemp));
-
- cTemp.str = GetValidString();
- LPStrTestClass cTempClone = new LPStrTestClass();
- cTempClone.str = cTemp.str;
- Assert.True(LPStrBuffer_InOutByRef_Class_String(ref cTemp));
- Assert.Equal(cTempClone.str, cTemp.str);
- }
-
- static void testLPStrBufferArray()
- {
- String[] cTest = null;
- cTest = GetInvalidArray();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_In_Array_String(cTest));
-
- cTest = GetValidArray();
- Assert.True(LPStrBuffer_In_Array_String(cTest));
-
- String[] cTemp = GetInvalidArray();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InByRef_Array_String(ref cTemp));
-
- cTemp = GetValidArray();
- Assert.True(LPStrBuffer_InByRef_Array_String(ref cTemp));
-
- cTemp = GetInvalidArray();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InOutByRef_Array_String(ref cTemp));
-
- cTemp = GetValidArray();
- String[] cTempClone = new String[3];
- cTempClone[0] = cTemp[0];
- Assert.True(LPStrBuffer_InOutByRef_Array_String(ref cTemp));
- Assert.Equal(cTempClone[0], cTemp[0]);
- }
-
- static void testLPStrBufferArrayOfStructs()
- {
- LPStrTestStruct[] lpss = null;
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_In_Array_Struct(lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_In_Array_Struct(lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_InByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InOutByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- LPStrTestStruct[] lpssClone = new LPStrTestStruct[2];
- lpssClone[0].str = lpss[0].str;
- lpssClone[1].str = lpss[1].str;
- Assert.True(LPStrBuffer_InOutByRef_Array_Struct(ref lpss));
- Assert.Equal(lpss[0].str, lpssClone[0].str);
- }
-
- static void runTest()
- {
- testLPStrBufferString();
- testLPStrBufferStringBuilder();
- testLPStrBufferStruct();
- testLPStrBufferArray();
- testLPStrBufferClass();
- testLPStrBufferArrayOfStructs();
- }
-
- public static int Main()
- {
- if (System.Globalization.CultureInfo.CurrentCulture.Name != "en-US")
- {
- Console.WriteLine("Non-US English platforms are not supported.\nPassing without running tests");
-
- Console.WriteLine("--- Success");
- return 100;
- }
-
- try
- {
- runTest();
- return 100;
- }
- catch (Exception e)
- {
- Console.WriteLine($"Test Failure: {e}");
- return 101;
- }
- }
-}
+++ /dev/null
-<Project Sdk="Microsoft.NET.Sdk">
- <PropertyGroup>
- <OutputType>Exe</OutputType>
- <!-- Test unsupported outside of windows -->
- <CLRTestTargetUnsupported Condition="'$(TargetsWindows)' != 'true'">true</CLRTestTargetUnsupported>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="$(MSBuildProjectName).cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CMakeLists.txt" />
- </ItemGroup>
-</Project>
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Text;
-using System.Runtime.InteropServices;
-using Xunit;
-
-[assembly: BestFitMapping(false, ThrowOnUnmappableChar = true)]
-
-[StructLayout(LayoutKind.Sequential)]
-[BestFitMapping(true, ThrowOnUnmappableChar = false)]
-public struct LPStrTestStruct
-{
- [MarshalAs(UnmanagedType.LPStr)]
- public String str;
-}
-
-[StructLayout(LayoutKind.Sequential)]
-[BestFitMapping(true, ThrowOnUnmappableChar = false)]
-public class LPStrTestClass
-{
- [MarshalAs(UnmanagedType.LPStr)]
- public String str;
-}
-
-public class BFM_LPStrMarshaler
-{
-#pragma warning disable 618
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_String([In][MarshalAs(UnmanagedType.LPStr)]String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_String([In][MarshalAs(UnmanagedType.LPStr)]ref String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_String([In, Out][MarshalAs(UnmanagedType.LPStr)]ref String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_StringBuilder([In, Out][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_Struct_String([In][MarshalAs(UnmanagedType.Struct)]LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_Struct_String([In][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_Struct_String([In, Out][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_Array_String([In][MarshalAs(UnmanagedType.LPArray)]String[] strArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_Array_String([In][MarshalAs(UnmanagedType.LPArray)]ref String[] strArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_Array_String([In, Out][MarshalAs(UnmanagedType.LPArray)]ref String[] Array);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_Class_String([In, Out][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]LPStrTestStruct[] structArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_Array_Struct([In, Out][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
-#pragma warning restore 618
-
- static String GetValidString()
- {
- return "This is the initial test string.";
- }
-
- static String GetInvalidString()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl.ToString();
- }
-
- static StringBuilder GetValidStringBuilder()
- {
- StringBuilder sb = new StringBuilder("test string.");
- return sb;
- }
-
- static StringBuilder GetInvalidStringBuilder()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl;
- }
-
- static void testLPStrBufferString()
- {
- Assert.True(LPStrBuffer_In_String(GetInvalidString()));
- Assert.True(LPStrBuffer_In_String(GetValidString()));
-
- String cTemp = GetInvalidString();
- String cTempClone = cTemp;
- Assert.True(LPStrBuffer_InByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
-
- cTemp = GetInvalidString();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_String(ref cTemp));
- Assert.NotEqual(cTempClone, cTemp);
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
- }
-
- static void testLPStrBufferStringBuilder()
- {
- Assert.True(LPStrBuffer_In_StringBuilder(GetInvalidStringBuilder()));
- Assert.True(LPStrBuffer_In_StringBuilder(GetValidStringBuilder()));
-
- StringBuilder cTemp = GetInvalidStringBuilder();
- StringBuilder cTempClone = cTemp;
- Assert.True(LPStrBuffer_InByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
-
- cTemp = GetInvalidStringBuilder();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.NotEqual(cTempClone.ToString(), cTemp.ToString());
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
- }
-
- static LPStrTestStruct GetInvalidStruct()
- {
- LPStrTestStruct inValidStruct = new LPStrTestStruct();
- inValidStruct.str = GetInvalidString();
-
- return inValidStruct;
- }
-
- static LPStrTestStruct GetValidStruct()
- {
- LPStrTestStruct validStruct = new LPStrTestStruct();
- validStruct.str = GetValidString();
-
- return validStruct;
- }
-
- static void testLPStrBufferStruct()
- {
- Assert.True(LPStrBuffer_In_Struct_String(GetInvalidStruct()));
- Assert.True(LPStrBuffer_In_Struct_String(GetValidStruct()));
-
- LPStrTestStruct lpss = GetInvalidStruct();
- Assert.True(LPStrBuffer_InByRef_Struct_String(ref lpss));
-
- lpss = GetValidStruct();
- Assert.True(LPStrBuffer_InByRef_Struct_String(ref lpss));
-
- lpss = GetInvalidStruct();
- Assert.True(LPStrBuffer_InOutByRef_Struct_String(ref lpss));
-
- lpss = GetValidStruct();
- Assert.True(LPStrBuffer_InOutByRef_Struct_String(ref lpss));
- }
-
- static String[] GetValidArray()
- {
- String[] s = new String[3];
-
- s[0] = GetValidString();
- s[1] = GetValidString();
- s[2] = GetValidString();
-
- return s;
- }
-
- static String[] GetInvalidArray()
- {
- String[] s = new String[3];
-
- s[0] = GetInvalidString();
- s[1] = GetInvalidString();
- s[2] = GetInvalidString();
-
- return s;
- }
-
- static void testLPStrBufferArray()
- {
- String[] s = GetInvalidArray();
- Assert.True(LPStrBuffer_In_Array_String(s));
-
- s = GetValidArray();
- Assert.True(LPStrBuffer_In_Array_String(s));
-
- s = GetInvalidArray();
- Assert.True(LPStrBuffer_InByRef_Array_String(ref s));
-
- s = GetValidArray();
- Assert.True(LPStrBuffer_InByRef_Array_String(ref s));
-
- s = GetInvalidArray();
- Assert.True(LPStrBuffer_InOutByRef_Array_String(ref s));
-
- s = GetValidArray();
- Assert.True(LPStrBuffer_InOutByRef_Array_String(ref s));
- }
-
- static void testLPStrBufferClass()
- {
- LPStrTestClass sClass = new LPStrTestClass();
- sClass.str = GetInvalidString();
- Assert.True(LPStrBuffer_In_Class_String(sClass));
-
- sClass.str = GetValidString();
- Assert.True(LPStrBuffer_In_Class_String(sClass));
-
- sClass.str = GetInvalidString();
- Assert.True(LPStrBuffer_InByRef_Class_String(ref sClass));
-
- sClass.str = GetValidString();
- Assert.True(LPStrBuffer_InByRef_Class_String(ref sClass));
-
- sClass.str = GetInvalidString();
- Assert.True(LPStrBuffer_InOutByRef_Class_String(ref sClass));
-
- sClass.str = GetValidString();
- Assert.True(LPStrBuffer_InOutByRef_Class_String(ref sClass));
- }
-
- static void testLPStrBufferArrayOfStructs()
- {
- LPStrTestStruct[] lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.True(LPStrBuffer_In_Array_Struct(lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_In_Array_Struct(lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.True(LPStrBuffer_InByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_InByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.True(LPStrBuffer_InOutByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_InOutByRef_Array_Struct(ref lpss));
- }
-
- static void runTest()
- {
- testLPStrBufferString();
- testLPStrBufferStringBuilder();
- testLPStrBufferStruct();
- testLPStrBufferArray();
- testLPStrBufferClass();
- testLPStrBufferArrayOfStructs();
- }
-
- public static int Main()
- {
- if (System.Globalization.CultureInfo.CurrentCulture.Name != "en-US")
- {
- Console.WriteLine("Non-US English platforms are not supported.\nPassing without running tests");
-
- Console.WriteLine("--- Success");
- return 100;
- }
-
- try
- {
- runTest();
- return 100;
- }
- catch (Exception e)
- {
- Console.WriteLine($"Test Failure: {e}");
- return 101;
- }
- }
-}
+++ /dev/null
-<Project Sdk="Microsoft.NET.Sdk">
- <PropertyGroup>
- <OutputType>Exe</OutputType>
- <!-- Test unsupported outside of windows -->
- <CLRTestTargetUnsupported Condition="'$(TargetsWindows)' != 'true'">true</CLRTestTargetUnsupported>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="$(MSBuildProjectName).cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CMakeLists.txt" />
- </ItemGroup>
-</Project>
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Text;
-using System.Runtime.InteropServices;
-using Xunit;
-
-
-[assembly: BestFitMapping(false, ThrowOnUnmappableChar = true)]
-
-[StructLayout(LayoutKind.Sequential)]
-[BestFitMapping(true)]
-public struct LPStrTestStruct_nothrow
-{
- [MarshalAs(UnmanagedType.LPStr)]
- public String str;
-}
-
-[StructLayout(LayoutKind.Sequential)]
-[BestFitMapping(true, ThrowOnUnmappableChar = true)]
-public struct LPStrTestStruct
-{
- [MarshalAs(UnmanagedType.LPStr)]
- public String str;
-}
-
-[StructLayout(LayoutKind.Sequential)]
-[BestFitMapping(true, ThrowOnUnmappableChar = true)]
-public class LPStrTestClass
-{
- [MarshalAs(UnmanagedType.LPStr)]
- public String str;
-}
-
-public class BFM_LPStrMarshaler
-{
-#pragma warning disable 618
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_String([In][MarshalAs(UnmanagedType.LPStr)]String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_String([In][MarshalAs(UnmanagedType.LPStr)]ref String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_String([In, Out][MarshalAs(UnmanagedType.LPStr)]ref String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_StringBuilder([In, Out][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_Struct_String_nothrow([In][MarshalAs(UnmanagedType.Struct)]LPStrTestStruct_nothrow strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_Struct_String([In][MarshalAs(UnmanagedType.Struct)]LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_Struct_String([In][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_Struct_String([In, Out][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_Array_String([In][MarshalAs(UnmanagedType.LPArray)]String[] strArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_Array_String([In][MarshalAs(UnmanagedType.LPArray)]ref String[] strArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_Array_String([In, Out][MarshalAs(UnmanagedType.LPArray)]ref String[] Array);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_Class_String([In, Out][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]LPStrTestStruct[] structArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_Array_Struct([In, Out][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
-#pragma warning restore 618
-
- static String GetValidString()
- {
- return "This is the initial test string.";
- }
-
- static String GetInvalidString()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- //sbl.Append ('乀');
- return sbl.ToString();
- }
-
- static StringBuilder GetValidStringBuilder()
- {
- StringBuilder sb = new StringBuilder("test string.");
- return sb;
- }
-
- static StringBuilder GetInvalidStringBuilder()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- //sbl.Append ('乀');
- return sbl;
- }
-
- static void testLPStrBufferString()
- {
- Assert.True(LPStrBuffer_In_String(GetInvalidString()));
- Assert.True(LPStrBuffer_In_String(GetValidString()));
-
- String cTemp = GetInvalidString();
- String cTempClone = GetInvalidString();
- Assert.True(LPStrBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetInvalidString();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_String(ref cTemp));
- }
-
- static void testLPStrBufferStringBuilder()
- {
- Assert.True(LPStrBuffer_In_StringBuilder(GetInvalidStringBuilder()));
- Assert.True(LPStrBuffer_In_StringBuilder(GetValidStringBuilder()));
-
- StringBuilder cTemp = GetInvalidStringBuilder();
- StringBuilder cTempClone = cTemp;
- Assert.True(LPStrBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetInvalidStringBuilder();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_StringBuilder(ref cTemp));
- }
-
- static LPStrTestStruct GetInvalidStruct()
- {
- LPStrTestStruct inValidStruct = new LPStrTestStruct();
- inValidStruct.str = GetInvalidString();
-
- return inValidStruct;
- }
-
- static LPStrTestStruct GetValidStruct()
- {
- LPStrTestStruct validStruct = new LPStrTestStruct();
- validStruct.str = GetValidString();
-
- return validStruct;
- }
-
- static LPStrTestStruct_nothrow GetInvalidStruct_nothrow()
- {
- LPStrTestStruct_nothrow inValidStruct = new LPStrTestStruct_nothrow();
- inValidStruct.str = GetInvalidString();
-
- return inValidStruct;
- }
-
- static LPStrTestStruct_nothrow GetValidStruct_nothrow()
- {
- LPStrTestStruct_nothrow validStruct = new LPStrTestStruct_nothrow();
- validStruct.str = GetValidString();
-
- return validStruct;
- }
-
- static void testLPStrBufferStruct()
- {
- LPStrTestStruct_nothrow lpss_nt = GetInvalidStruct_nothrow();
- Assert.True(LPStrBuffer_In_Struct_String_nothrow(lpss_nt));
-
- lpss_nt = GetValidStruct_nothrow();
- Assert.True(LPStrBuffer_In_Struct_String_nothrow(lpss_nt));
-
- LPStrTestStruct lpss = GetInvalidStruct();
- Assert.True(LPStrBuffer_In_Struct_String(lpss));
- Assert.True(LPStrBuffer_In_Struct_String(GetValidStruct()));
-
- lpss = GetInvalidStruct();
- Assert.True(LPStrBuffer_InByRef_Struct_String(ref lpss));
-
- lpss = GetValidStruct();
- Assert.True(LPStrBuffer_InByRef_Struct_String(ref lpss));
-
- lpss = GetInvalidStruct();
- Assert.True(LPStrBuffer_InOutByRef_Struct_String(ref lpss));
-
- lpss = GetValidStruct();
- Assert.True(LPStrBuffer_InOutByRef_Struct_String(ref lpss));
- }
-
- static String[] GetValidArray()
- {
- String[] s = new String[3];
-
- s[0] = GetValidString();
- s[1] = GetValidString();
- s[2] = GetValidString();
-
- return s;
- }
-
- static String[] GetInvalidArray()
- {
- String[] s = new String[3];
-
- s[0] = GetInvalidString();
- s[1] = GetInvalidString();
- s[2] = GetInvalidString();
-
- return s;
- }
-
- static void testLPStrBufferArray()
- {
- String[] s = GetInvalidArray();
- Assert.True(LPStrBuffer_In_Array_String(s));
-
- s = GetValidArray();
- Assert.True(LPStrBuffer_In_Array_String(s));
-
- s = GetInvalidArray();
- Assert.True(LPStrBuffer_InByRef_Array_String(ref s));
-
- s = GetValidArray();
- Assert.True(LPStrBuffer_InByRef_Array_String(ref s));
-
- s = GetInvalidArray();
- Assert.True(LPStrBuffer_InOutByRef_Array_String(ref s));
-
- s = GetValidArray();
- Assert.True(LPStrBuffer_InOutByRef_Array_String(ref s));
- }
-
- static void testLPStrBufferClass()
- {
- LPStrTestClass sClass = new LPStrTestClass();
- sClass.str = GetInvalidString();
- Assert.True(LPStrBuffer_In_Class_String(sClass));
-
- sClass.str = GetValidString();
- Assert.True(LPStrBuffer_In_Class_String(sClass));
-
- sClass.str = GetInvalidString();
- Assert.True(LPStrBuffer_InByRef_Class_String(ref sClass));
-
- sClass.str = GetValidString();
- Assert.True(LPStrBuffer_InByRef_Class_String(ref sClass));
-
- sClass.str = GetInvalidString();
- Assert.True(LPStrBuffer_InOutByRef_Class_String(ref sClass));
-
- sClass.str = GetValidString();
- Assert.True(LPStrBuffer_InOutByRef_Class_String(ref sClass));
- }
-
- static void testLPStrBufferArrayOfStructs()
- {
- LPStrTestStruct[] lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.True(LPStrBuffer_In_Array_Struct(lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_In_Array_Struct(lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.True(LPStrBuffer_InByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_InByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.True(LPStrBuffer_InOutByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_InOutByRef_Array_Struct(ref lpss));
- }
-
- static void runTest()
- {
- testLPStrBufferString();
- testLPStrBufferStringBuilder();
- testLPStrBufferStruct();
- testLPStrBufferArray();
- testLPStrBufferClass();
- testLPStrBufferArrayOfStructs();
- }
-
- public static int Main()
- {
- if (System.Globalization.CultureInfo.CurrentCulture.Name != "en-US")
- {
- Console.WriteLine("Non-US English platforms are not supported.\nPassing without running tests");
-
- Console.WriteLine("--- Success");
- return 100;
- }
-
- try
- {
- runTest();
- return 100;
- }
- catch (Exception e)
- {
- Console.WriteLine($"Test Failure: {e}");
- return 101;
- }
-
- }
-}
+++ /dev/null
-<Project Sdk="Microsoft.NET.Sdk">
- <PropertyGroup>
- <OutputType>Exe</OutputType>
- <!-- Test unsupported outside of windows -->
- <CLRTestTargetUnsupported Condition="'$(TargetsWindows)' != 'true'">true</CLRTestTargetUnsupported>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="$(MSBuildProjectName).cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CMakeLists.txt" />
- </ItemGroup>
-</Project>
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Text;
-using System.Runtime.InteropServices;
-using Xunit;
-
-[assembly: BestFitMapping(true, ThrowOnUnmappableChar = false)]
-
-[StructLayout(LayoutKind.Sequential)]
-[BestFitMapping(false, ThrowOnUnmappableChar = false)]
-public struct LPStrTestStruct
-{
- [MarshalAs(UnmanagedType.LPStr)]
- public String str;
-}
-
-[StructLayout(LayoutKind.Sequential)]
-[BestFitMapping(false, ThrowOnUnmappableChar = false)]
-public class LPStrTestClass
-{
- [MarshalAs(UnmanagedType.LPStr)]
- public String str;
-}
-
-public class BFM_LPStrMarshaler
-{
-#pragma warning disable 618
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_String([In][MarshalAs(UnmanagedType.LPStr)]String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_String([In][MarshalAs(UnmanagedType.LPStr)]ref String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_String([In, Out][MarshalAs(UnmanagedType.LPStr)]ref String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_StringBuilder([In, Out][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_Struct_String([In][MarshalAs(UnmanagedType.Struct)]LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_Struct_String([In][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_Struct_String([In, Out][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_Array_String([In][MarshalAs(UnmanagedType.LPArray)]String[] strArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_Array_String([In][MarshalAs(UnmanagedType.LPArray)]ref String[] strArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_Array_String([In, Out][MarshalAs(UnmanagedType.LPArray)]ref String[] Array);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_Class_String([In, Out][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]LPStrTestStruct[] structArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_Array_Struct([In, Out][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
-#pragma warning restore 618
-
- static String GetValidString()
- {
- return "This is the initial test string.";
- }
-
- static String GetInvalidString()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl.ToString();
- }
-
- static StringBuilder GetValidStringBuilder()
- {
- StringBuilder sb = new StringBuilder("test string.");
- return sb;
- }
-
- static StringBuilder GetInvalidStringBuilder()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl;
- }
-
- static void testLPStrBufferString()
- {
- Assert.True(LPStrBuffer_In_String(GetInvalidString()));
- Assert.True(LPStrBuffer_In_String(GetValidString()));
-
- String cTemp = GetInvalidString();
- Assert.True(LPStrBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- Assert.True(LPStrBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetInvalidString();
- String cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_String(ref cTemp));
- Assert.NotEqual(cTempClone, cTemp);
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
- }
-
- static void testLPStrBufferStringBuilder()
- {
- StringBuilder sb = GetInvalidStringBuilder();
- Assert.True(LPStrBuffer_In_StringBuilder(sb));
- Assert.True(LPStrBuffer_In_StringBuilder(GetValidStringBuilder()));
-
- StringBuilder cTemp = GetInvalidStringBuilder();
- Assert.True(LPStrBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- Assert.True(LPStrBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetInvalidStringBuilder();
- StringBuilder cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.NotEqual(cTempClone.ToString(), cTemp.ToString());
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
- }
-
- static LPStrTestStruct GetInvalidStruct()
- {
- LPStrTestStruct inValidStruct = new LPStrTestStruct();
- inValidStruct.str = GetInvalidString();
-
- return inValidStruct;
- }
-
- static LPStrTestStruct GetValidStruct()
- {
- LPStrTestStruct validStruct = new LPStrTestStruct();
- validStruct.str = GetValidString();
-
- return validStruct;
- }
-
- static String[] GetValidArray()
- {
- String[] s = new String[3];
-
- s[0] = GetValidString();
- s[1] = GetValidString();
- s[2] = GetValidString();
-
- return s;
- }
-
- static String[] GetInvalidArray()
- {
- String[] s = new String[3];
-
- s[0] = GetInvalidString();
- s[1] = GetInvalidString();
- s[2] = GetInvalidString();
-
- return s;
- }
-
- static void testLPStrBufferStruct()
- {
- LPStrTestStruct lpss = GetInvalidStruct();
- Assert.True(LPStrBuffer_In_Struct_String(lpss));
- Assert.True(LPStrBuffer_In_Struct_String(GetValidStruct()));
-
- LPStrTestStruct cTemp = GetInvalidStruct();
- Assert.True(LPStrBuffer_InByRef_Struct_String(ref cTemp));
-
- cTemp = GetValidStruct();
- Assert.True(LPStrBuffer_InByRef_Struct_String(ref cTemp));
-
- cTemp = GetInvalidStruct();
- LPStrTestStruct cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_Struct_String(ref cTemp));
- Assert.NotEqual(cTempClone.str, cTemp.str);
-
- cTemp = GetValidStruct();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_Struct_String(ref cTemp));
- Assert.Equal(cTempClone.str, cTemp.str);
- }
-
- static void testLPStrBufferClass()
- {
- LPStrTestClass lpss = new LPStrTestClass();
- lpss.str = GetInvalidString();
- Assert.True(LPStrBuffer_In_Class_String(lpss));
-
- lpss.str = GetValidString();
- Assert.True(LPStrBuffer_In_Class_String(lpss));
-
- LPStrTestClass cTemp = new LPStrTestClass();
- cTemp.str = GetInvalidString();
- Assert.True(LPStrBuffer_InByRef_Class_String(ref cTemp));
-
- cTemp.str = GetValidString();
- Assert.True(LPStrBuffer_InByRef_Class_String(ref cTemp));
-
- cTemp.str = GetInvalidString();
- LPStrTestClass cTempClone = new LPStrTestClass();
- cTempClone.str = cTemp.str;
- Assert.True(LPStrBuffer_InOutByRef_Class_String(ref cTemp));
- Assert.NotEqual(cTempClone.str, cTemp.str);
-
- cTemp.str = GetValidString();
- cTempClone.str = cTemp.str;
- Assert.True(LPStrBuffer_InOutByRef_Class_String(ref cTemp));
- Assert.Equal(cTempClone.str, cTemp.str);
- }
-
- static void testLPStrBufferArray()
- {
- String[] lpss = GetInvalidArray();
- Assert.True(LPStrBuffer_In_Array_String(lpss));
- Assert.True(LPStrBuffer_In_Array_String(GetValidArray()));
-
- String[] cTemp = GetInvalidArray();
- Assert.True(LPStrBuffer_InByRef_Array_String(ref cTemp));
-
- cTemp = GetValidArray();
- Assert.True(LPStrBuffer_InByRef_Array_String(ref cTemp));
-
- cTemp = GetInvalidArray();
- String[] cTempClone = new String[3];
- cTempClone[0] = cTemp[0];
- Assert.True(LPStrBuffer_InOutByRef_Array_String(ref cTemp));
- Assert.NotEqual(cTempClone[0], cTemp[0]);
-
- cTemp = GetValidArray();
- cTempClone[0] = cTemp[0];
- Assert.True(LPStrBuffer_InOutByRef_Array_String(ref cTemp));
- Assert.Equal(cTempClone[0], cTemp[0]);
- }
-
- static void testLPStrBufferArrayOfStructs()
- {
- LPStrTestStruct[] lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.True(LPStrBuffer_In_Array_Struct(lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_In_Array_Struct(lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.True(LPStrBuffer_InByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_InByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
-
- LPStrTestStruct[] lpssClone = new LPStrTestStruct[2];
- lpssClone[0].str = lpss[0].str;
- lpssClone[1].str = lpss[1].str;
- Assert.True(LPStrBuffer_InOutByRef_Array_Struct(ref lpss));
- Assert.NotEqual(lpss[0].str, lpssClone[0].str);
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- lpssClone = new LPStrTestStruct[2];
- lpssClone[0].str = lpss[0].str;
- lpssClone[1].str = lpss[1].str;
- Assert.True(LPStrBuffer_InOutByRef_Array_Struct(ref lpss));
- Assert.Equal(lpss[0].str, lpssClone[0].str);
- }
-
- static void runTest()
- {
- testLPStrBufferString();
- testLPStrBufferStringBuilder();
- testLPStrBufferStruct();
- testLPStrBufferArray();
- testLPStrBufferClass();
- testLPStrBufferArrayOfStructs();
- }
-
- public static int Main()
- {
- if (System.Globalization.CultureInfo.CurrentCulture.Name != "en-US")
- {
- Console.WriteLine("Non-US English platforms are not supported.\nPassing without running tests");
-
- Console.WriteLine("--- Success");
- return 100;
- }
-
- try
- {
- runTest();
- return 100;
- }
- catch (Exception e)
- {
- Console.WriteLine($"Test Failure: {e}");
- return 101;
- }
- }
-}
+++ /dev/null
-<Project Sdk="Microsoft.NET.Sdk">
- <PropertyGroup>
- <OutputType>Exe</OutputType>
- <!-- Test unsupported outside of windows -->
- <CLRTestTargetUnsupported Condition="'$(TargetsWindows)' != 'true'">true</CLRTestTargetUnsupported>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="$(MSBuildProjectName).cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CMakeLists.txt" />
- </ItemGroup>
-</Project>
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Text;
-using System.Runtime.InteropServices;
-using Xunit;
-
-[assembly: BestFitMapping(true, ThrowOnUnmappableChar = false)]
-
-[StructLayout(LayoutKind.Sequential)]
-[BestFitMapping(false, ThrowOnUnmappableChar = true)]
-public struct LPStrTestStruct
-{
- [MarshalAs(UnmanagedType.LPStr)]
- public String str;
-}
-
-[StructLayout(LayoutKind.Sequential)]
-[BestFitMapping(false, ThrowOnUnmappableChar = true)]
-public class LPStrTestClass
-{
- [MarshalAs(UnmanagedType.LPStr)]
- public String str;
-}
-
-public class BFM_LPStrMarshaler
-{
-#pragma warning disable 618
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_String([In][MarshalAs(UnmanagedType.LPStr)]String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_String([In][MarshalAs(UnmanagedType.LPStr)]ref String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_String([In, Out][MarshalAs(UnmanagedType.LPStr)]ref String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_StringBuilder([In, Out][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_Struct_String([In][MarshalAs(UnmanagedType.Struct)]LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_Struct_String([In][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_Struct_String([In, Out][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_Array_String([In][MarshalAs(UnmanagedType.LPArray)]String[] strArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_Array_String([In][MarshalAs(UnmanagedType.LPArray)]ref String[] strArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_Array_String([In, Out][MarshalAs(UnmanagedType.LPArray)]ref String[] Array);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_Class_String([In, Out][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]LPStrTestStruct[] structArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_Array_Struct([In, Out][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
-#pragma warning restore 618
-
- static String GetValidString()
- {
- return "This is the initial test string.";
- }
-
- static String GetInvalidString()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl.ToString();
- }
-
- static StringBuilder GetValidStringBuilder()
- {
- StringBuilder sb = new StringBuilder("test string.");
- return sb;
- }
-
- static StringBuilder GetInvalidStringBuilder()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl;
- }
-
- static void testLPStrBufferString()
- {
- Assert.Throws<ArgumentException>(() => LPStrBuffer_In_String(GetInvalidString()));
- Assert.True(LPStrBuffer_In_String(GetValidString()));
-
- String cTemp = GetInvalidString();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- Assert.True(LPStrBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetInvalidString();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InOutByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- String cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
- }
-
- static void testLPStrBufferStringBuilder()
- {
- Assert.Throws<ArgumentException>(() => LPStrBuffer_In_StringBuilder(GetInvalidStringBuilder()));
- Assert.True(LPStrBuffer_In_StringBuilder(GetValidStringBuilder()));
-
- StringBuilder cTemp = GetInvalidStringBuilder();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- Assert.True(LPStrBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetInvalidStringBuilder();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InOutByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- StringBuilder cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
- }
-
- static LPStrTestStruct GetInvalidStruct()
- {
- LPStrTestStruct inValidStruct = new LPStrTestStruct();
- inValidStruct.str = GetInvalidString();
-
- return inValidStruct;
- }
-
- static LPStrTestStruct GetValidStruct()
- {
- LPStrTestStruct validStruct = new LPStrTestStruct();
- validStruct.str = GetValidString();
-
- return validStruct;
- }
-
- static String[] GetValidArray()
- {
- String[] s = new String[3];
-
- s[0] = GetValidString();
- s[1] = GetValidString();
- s[2] = GetValidString();
-
- return s;
- }
-
- static String[] GetInvalidArray()
- {
- String[] s = new String[3];
-
- s[0] = GetInvalidString();
- s[1] = GetInvalidString();
- s[2] = GetInvalidString();
-
- return s;
- }
-
- static void testLPStrBufferStruct()
- {
- Assert.Throws<ArgumentException>(() => LPStrBuffer_In_Struct_String(GetInvalidStruct()));
- Assert.True(LPStrBuffer_In_Struct_String(GetValidStruct()));
-
- LPStrTestStruct cTemp = GetInvalidStruct();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InByRef_Struct_String(ref cTemp));
-
- cTemp = GetValidStruct();
- Assert.True(LPStrBuffer_InByRef_Struct_String(ref cTemp));
-
- cTemp = GetInvalidStruct();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InOutByRef_Struct_String(ref cTemp));
-
- cTemp = GetValidStruct();
- LPStrTestStruct cTempClone = new LPStrTestStruct();
- cTempClone.str = cTemp.str;
- Assert.True(LPStrBuffer_InOutByRef_Struct_String(ref cTemp));
- Assert.Equal(cTempClone.str, cTemp.str);
- }
-
- static void testLPStrBufferClass()
- {
- LPStrTestClass cTest = new LPStrTestClass();
- cTest.str = GetInvalidString();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_In_Class_String(cTest));
-
- cTest.str = GetValidString();
- Assert.True(LPStrBuffer_In_Class_String(cTest));
-
- LPStrTestClass cTemp = new LPStrTestClass();
- cTemp.str = GetInvalidString();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InByRef_Class_String(ref cTemp));
-
- cTemp.str = GetValidString();
- Assert.True(LPStrBuffer_InByRef_Class_String(ref cTemp));
-
- cTemp.str = GetInvalidString();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InOutByRef_Class_String(ref cTemp));
-
- cTemp.str = GetValidString();
- LPStrTestClass cTempClone = new LPStrTestClass();
- cTempClone.str = cTemp.str;
- Assert.True(LPStrBuffer_InOutByRef_Class_String(ref cTemp));
- Assert.Equal(cTempClone.str, cTemp.str);
- }
-
- static void testLPStrBufferArray()
- {
- String[] cTest = null;
- cTest = GetInvalidArray();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_In_Array_String(cTest));
-
- cTest = GetValidArray();
- Assert.True(LPStrBuffer_In_Array_String(cTest));
-
- String[] cTemp = GetInvalidArray();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InByRef_Array_String(ref cTemp));
-
- cTemp = GetValidArray();
- Assert.True(LPStrBuffer_InByRef_Array_String(ref cTemp));
-
- cTemp = GetInvalidArray();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InOutByRef_Array_String(ref cTemp));
-
- cTemp = GetValidArray();
- String[] cTempClone = new String[3];
- cTempClone[0] = cTemp[0];
- Assert.True(LPStrBuffer_InOutByRef_Array_String(ref cTemp));
- Assert.Equal(cTempClone[0], cTemp[0]);
- }
-
- static void testLPStrBufferArrayOfStructs()
- {
- LPStrTestStruct[] lpss = null;
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_In_Array_Struct(lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_In_Array_Struct(lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_InByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InOutByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- LPStrTestStruct[] lpssClone = new LPStrTestStruct[2];
- lpssClone[0].str = lpss[0].str;
- lpssClone[1].str = lpss[1].str;
- Assert.True(LPStrBuffer_InOutByRef_Array_Struct(ref lpss));
- Assert.Equal(lpss[0].str, lpssClone[0].str);
- }
-
- static void runTest()
- {
- testLPStrBufferString();
- testLPStrBufferStringBuilder();
- testLPStrBufferStruct();
- testLPStrBufferArray();
- testLPStrBufferClass();
- testLPStrBufferArrayOfStructs();
- }
-
- public static int Main()
- {
- if (System.Globalization.CultureInfo.CurrentCulture.Name != "en-US")
- {
- Console.WriteLine("Non-US English platforms are not supported.\nPassing without running tests");
-
- Console.WriteLine("--- Success");
- return 100;
- }
-
- try
- {
- runTest();
- return 100;
- }
- catch (Exception e)
- {
- Console.WriteLine($"Test Failure: {e}");
- return 101;
- }
- }
-}
+++ /dev/null
-<Project Sdk="Microsoft.NET.Sdk">
- <PropertyGroup>
- <OutputType>Exe</OutputType>
- <!-- Test unsupported outside of windows -->
- <CLRTestTargetUnsupported Condition="'$(TargetsWindows)' != 'true'">true</CLRTestTargetUnsupported>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="$(MSBuildProjectName).cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CMakeLists.txt" />
- </ItemGroup>
-</Project>
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Text;
-using System.Runtime.InteropServices;
-using Xunit;
-
-[assembly: BestFitMapping(true, ThrowOnUnmappableChar = false)]
-
-[StructLayout(LayoutKind.Sequential)]
-[BestFitMapping(true, ThrowOnUnmappableChar = false)]
-public struct LPStrTestStruct
-{
- [MarshalAs(UnmanagedType.LPStr)]
- public String str;
-}
-
-[StructLayout(LayoutKind.Sequential)]
-[BestFitMapping(true, ThrowOnUnmappableChar = false)]
-public class LPStrTestClass
-{
- [MarshalAs(UnmanagedType.LPStr)]
- public String str;
-}
-
-public class BFM_LPStrMarshaler
-{
-#pragma warning disable 618
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_String([In][MarshalAs(UnmanagedType.LPStr)]String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_String([In][MarshalAs(UnmanagedType.LPStr)]ref String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_String([In, Out][MarshalAs(UnmanagedType.LPStr)]ref String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_StringBuilder([In, Out][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_Struct_String([In][MarshalAs(UnmanagedType.Struct)]LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_Struct_String([In][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_Struct_String([In, Out][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_Array_String([In][MarshalAs(UnmanagedType.LPArray)]String[] strArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_Array_String([In][MarshalAs(UnmanagedType.LPArray)]ref String[] strArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_Array_String([In, Out][MarshalAs(UnmanagedType.LPArray)]ref String[] Array);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_Class_String([In, Out][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]LPStrTestStruct[] structArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_Array_Struct([In, Out][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
-#pragma warning restore 618
-
- static String GetValidString()
- {
- return "This is the initial test string.";
- }
-
- static String GetInvalidString()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl.ToString();
- }
-
- static StringBuilder GetValidStringBuilder()
- {
- StringBuilder sb = new StringBuilder("test string.");
- return sb;
- }
-
- static StringBuilder GetInvalidStringBuilder()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl;
- }
-
- static void testLPStrBufferString()
- {
- Assert.True(LPStrBuffer_In_String(GetInvalidString()));
- Assert.True(LPStrBuffer_In_String(GetValidString()));
-
- String cTemp = GetInvalidString();
- String cTempClone = cTemp;
- Assert.True(LPStrBuffer_InByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
-
- cTemp = GetInvalidString();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_String(ref cTemp));
- Assert.NotEqual(cTempClone, cTemp);
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
- }
-
- static void testLPStrBufferStringBuilder()
- {
- Assert.True(LPStrBuffer_In_StringBuilder(GetInvalidStringBuilder()));
- Assert.True(LPStrBuffer_In_StringBuilder(GetValidStringBuilder()));
-
- StringBuilder cTemp = GetInvalidStringBuilder();
- StringBuilder cTempClone = cTemp;
- Assert.True(LPStrBuffer_InByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
-
- cTemp = GetInvalidStringBuilder();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.NotEqual(cTempClone.ToString(), cTemp.ToString());
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
- }
-
- static LPStrTestStruct GetInvalidStruct()
- {
- LPStrTestStruct inValidStruct = new LPStrTestStruct();
- inValidStruct.str = GetInvalidString();
-
- return inValidStruct;
- }
-
-
- static LPStrTestStruct GetValidStruct()
- {
- LPStrTestStruct validStruct = new LPStrTestStruct();
- validStruct.str = GetValidString();
-
- return validStruct;
- }
-
- static void testLPStrBufferStruct()
- {
- Assert.True(LPStrBuffer_In_Struct_String(GetInvalidStruct()));
- Assert.True(LPStrBuffer_In_Struct_String(GetValidStruct()));
-
- LPStrTestStruct lpss = GetInvalidStruct();
- Assert.True(LPStrBuffer_InByRef_Struct_String(ref lpss));
-
- lpss = GetValidStruct();
- Assert.True(LPStrBuffer_InByRef_Struct_String(ref lpss));
-
- lpss = GetInvalidStruct();
- Assert.True(LPStrBuffer_InOutByRef_Struct_String(ref lpss));
-
- lpss = GetValidStruct();
- Assert.True(LPStrBuffer_InOutByRef_Struct_String(ref lpss));
- }
-
- static String[] GetValidArray()
- {
- String[] s = new String[3];
-
- s[0] = GetValidString();
- s[1] = GetValidString();
- s[2] = GetValidString();
-
- return s;
- }
-
- static String[] GetInvalidArray()
- {
- String[] s = new String[3];
-
- s[0] = GetInvalidString();
- s[1] = GetInvalidString();
- s[2] = GetInvalidString();
-
- return s;
- }
-
- static void testLPStrBufferArray()
- {
- String[] s = GetInvalidArray();
- Assert.True(LPStrBuffer_In_Array_String(s));
-
- s = GetValidArray();
- Assert.True(LPStrBuffer_In_Array_String(s));
-
- s = GetInvalidArray();
- Assert.True(LPStrBuffer_InByRef_Array_String(ref s));
-
- s = GetValidArray();
- Assert.True(LPStrBuffer_InByRef_Array_String(ref s));
-
- s = GetInvalidArray();
- Assert.True(LPStrBuffer_InOutByRef_Array_String(ref s));
-
- s = GetValidArray();
- Assert.True(LPStrBuffer_InOutByRef_Array_String(ref s));
- }
-
- static void testLPStrBufferClass()
- {
- LPStrTestClass sClass = new LPStrTestClass();
- sClass.str = GetInvalidString();
- Assert.True(LPStrBuffer_In_Class_String(sClass));
-
- sClass.str = GetValidString();
- Assert.True(LPStrBuffer_In_Class_String(sClass));
-
- sClass.str = GetInvalidString();
- Assert.True(LPStrBuffer_InByRef_Class_String(ref sClass));
-
- sClass.str = GetValidString();
- Assert.True(LPStrBuffer_InByRef_Class_String(ref sClass));
-
- sClass.str = GetInvalidString();
- Assert.True(LPStrBuffer_InOutByRef_Class_String(ref sClass));
-
- sClass.str = GetValidString();
- Assert.True(LPStrBuffer_InOutByRef_Class_String(ref sClass));
- }
-
- static void testLPStrBufferArrayOfStructs()
- {
- LPStrTestStruct[] lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.True(LPStrBuffer_In_Array_Struct(lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_In_Array_Struct(lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.True(LPStrBuffer_InByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_InByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.True(LPStrBuffer_InOutByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_InOutByRef_Array_Struct(ref lpss));
- }
-
- static void runTest()
- {
- testLPStrBufferString();
- testLPStrBufferStringBuilder();
- testLPStrBufferStruct();
- testLPStrBufferArray();
- testLPStrBufferClass();
- testLPStrBufferArrayOfStructs();
- }
-
- public static int Main()
- {
- if (System.Globalization.CultureInfo.CurrentCulture.Name != "en-US")
- {
- Console.WriteLine("Non-US English platforms are not supported.\nPassing without running tests");
-
- Console.WriteLine("--- Success");
- return 100;
- }
-
- try
- {
- runTest();
- return 100;
- }
- catch (Exception e)
- {
- Console.WriteLine($"Test Failure: {e}");
- return 101;
- }
- }
-}
+++ /dev/null
-<Project Sdk="Microsoft.NET.Sdk">
- <PropertyGroup>
- <OutputType>Exe</OutputType>
- <!-- Test unsupported outside of windows -->
- <CLRTestTargetUnsupported Condition="'$(TargetsWindows)' != 'true'">true</CLRTestTargetUnsupported>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="$(MSBuildProjectName).cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CMakeLists.txt" />
- </ItemGroup>
-</Project>
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Text;
-using System.Runtime.InteropServices;
-using Xunit;
-
-[assembly: BestFitMapping(true, ThrowOnUnmappableChar = false)]
-
-[StructLayout(LayoutKind.Sequential)]
-[BestFitMapping(true, ThrowOnUnmappableChar = true)]
-public struct LPStrTestStruct
-{
- [MarshalAs(UnmanagedType.LPStr)]
- public String str;
-}
-
-[StructLayout(LayoutKind.Sequential)]
-[BestFitMapping(true, ThrowOnUnmappableChar = true)]
-public class LPStrTestClass
-{
- [MarshalAs(UnmanagedType.LPStr)]
- public String str;
-}
-
-public class BFM_LPStrMarshaler
-{
-#pragma warning disable 618
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_String([In][MarshalAs(UnmanagedType.LPStr)]String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_String([In][MarshalAs(UnmanagedType.LPStr)]ref String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_String([In, Out][MarshalAs(UnmanagedType.LPStr)]ref String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_StringBuilder([In, Out][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_Struct_String([In][MarshalAs(UnmanagedType.Struct)]LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_Struct_String([In][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_Struct_String([In, Out][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_Array_String([In][MarshalAs(UnmanagedType.LPArray)]String[] strArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_Array_String([In][MarshalAs(UnmanagedType.LPArray)]ref String[] strArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_Array_String([In, Out][MarshalAs(UnmanagedType.LPArray)]ref String[] Array);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_Class_String([In, Out][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]LPStrTestStruct[] structArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_Array_Struct([In, Out][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
-#pragma warning restore 618
-
- static String GetValidString()
- {
- return "This is the initial test string.";
- }
-
- static String GetInvalidString()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- //sbl.Append ('乀');
- return sbl.ToString();
- }
-
- static StringBuilder GetValidStringBuilder()
- {
- StringBuilder sb = new StringBuilder("test string.");
- return sb;
- }
-
- static StringBuilder GetInvalidStringBuilder()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- //sbl.Append ('乀');
- return sbl;
- }
-
- static void testLPStrBufferString()
- {
- Assert.True(LPStrBuffer_In_String(GetInvalidString()));
-
- Assert.True(LPStrBuffer_In_String(GetValidString()));
-
- String cTemp = GetInvalidString();
- String cTempClone = GetInvalidString();
- Assert.True(LPStrBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetInvalidString();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_String(ref cTemp));
- }
-
- static void testLPStrBufferStringBuilder()
- {
- Assert.True(LPStrBuffer_In_StringBuilder(GetInvalidStringBuilder()));
-
- Assert.True(LPStrBuffer_In_StringBuilder(GetValidStringBuilder()));
-
- StringBuilder cTemp = GetInvalidStringBuilder();
- StringBuilder cTempClone = cTemp;
- Assert.True(LPStrBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetInvalidStringBuilder();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_StringBuilder(ref cTemp));
- }
-
- static LPStrTestStruct GetInvalidStruct()
- {
- LPStrTestStruct inValidStruct = new LPStrTestStruct();
- inValidStruct.str = GetInvalidString();
-
- return inValidStruct;
- }
-
- static LPStrTestStruct GetValidStruct()
- {
- LPStrTestStruct validStruct = new LPStrTestStruct();
- validStruct.str = GetValidString();
-
- return validStruct;
- }
-
- static void testLPStrBufferStruct()
- {
- Assert.True(LPStrBuffer_In_Struct_String(GetInvalidStruct()));
-
- Assert.True(LPStrBuffer_In_Struct_String(GetValidStruct()));
-
- LPStrTestStruct lpss = GetInvalidStruct();
- Assert.True(LPStrBuffer_InByRef_Struct_String(ref lpss));
-
- lpss = GetValidStruct();
- Assert.True(LPStrBuffer_InByRef_Struct_String(ref lpss));
-
- lpss = GetInvalidStruct();
- Assert.True(LPStrBuffer_InOutByRef_Struct_String(ref lpss));
-
- lpss = GetValidStruct();
- Assert.True(LPStrBuffer_InOutByRef_Struct_String(ref lpss));
- }
-
- static String[] GetValidArray()
- {
- String[] s = new String[3];
-
- s[0] = GetValidString();
- s[1] = GetValidString();
- s[2] = GetValidString();
-
- return s;
- }
-
- static String[] GetInvalidArray()
- {
- String[] s = new String[3];
-
- s[0] = GetInvalidString();
- s[1] = GetInvalidString();
- s[2] = GetInvalidString();
-
- return s;
- }
-
- static void testLPStrBufferArray()
- {
- String[] s = GetInvalidArray();
- Assert.True(LPStrBuffer_In_Array_String(s));
-
- s = GetValidArray();
- Assert.True(LPStrBuffer_In_Array_String(s));
-
- s = GetInvalidArray();
- Assert.True(LPStrBuffer_InByRef_Array_String(ref s));
-
- s = GetValidArray();
- Assert.True(LPStrBuffer_InByRef_Array_String(ref s));
-
- s = GetInvalidArray();
- Assert.True(LPStrBuffer_InOutByRef_Array_String(ref s));
-
- s = GetValidArray();
- Assert.True(LPStrBuffer_InOutByRef_Array_String(ref s));
- }
-
- static void testLPStrBufferClass()
- {
- LPStrTestClass sClass = new LPStrTestClass();
- sClass.str = GetInvalidString();
- Assert.True(LPStrBuffer_In_Class_String(sClass));
-
- sClass.str = GetValidString();
- Assert.True(LPStrBuffer_In_Class_String(sClass));
-
- sClass.str = GetInvalidString();
- Assert.True(LPStrBuffer_InByRef_Class_String(ref sClass));
-
- sClass.str = GetValidString();
- Assert.True(LPStrBuffer_InByRef_Class_String(ref sClass));
-
- sClass.str = GetInvalidString();
- Assert.True(LPStrBuffer_InOutByRef_Class_String(ref sClass));
-
- sClass.str = GetValidString();
- Assert.True(LPStrBuffer_InOutByRef_Class_String(ref sClass));
- }
-
- static void testLPStrBufferArrayOfStructs()
- {
- LPStrTestStruct[] lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.True(LPStrBuffer_In_Array_Struct(lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_In_Array_Struct(lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.True(LPStrBuffer_InByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_InByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.True(LPStrBuffer_InOutByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_InOutByRef_Array_Struct(ref lpss));
- }
-
- static void runTest()
- {
- testLPStrBufferString();
- testLPStrBufferStringBuilder();
- testLPStrBufferStruct();
- testLPStrBufferArray();
- testLPStrBufferClass();
- testLPStrBufferArrayOfStructs();
- }
-
- public static int Main()
- {
- if (System.Globalization.CultureInfo.CurrentCulture.Name != "en-US")
- {
- Console.WriteLine("Non-US English platforms are not supported.\nPassing without running tests");
-
- Console.WriteLine("--- Success");
- return 100;
- }
-
- try
- {
- runTest();
- return 100;
- } catch (Exception e){
- Console.WriteLine($"Test Failure: {e}");
- return 101;
- }
- }
-}
+++ /dev/null
-<Project Sdk="Microsoft.NET.Sdk">
- <PropertyGroup>
- <OutputType>Exe</OutputType>
- <!-- Test unsupported outside of windows -->
- <CLRTestTargetUnsupported Condition="'$(TargetsWindows)' != 'true'">true</CLRTestTargetUnsupported>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="$(MSBuildProjectName).cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CMakeLists.txt" />
- </ItemGroup>
-</Project>
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Text;
-using System.Runtime.InteropServices;
-using Xunit;
-
-[assembly: BestFitMapping(true, ThrowOnUnmappableChar = true)]
-
-[StructLayout(LayoutKind.Sequential)]
-[BestFitMapping(false, ThrowOnUnmappableChar = false)]
-public struct LPStrTestStruct
-{
- [MarshalAs(UnmanagedType.LPStr)]
- public String str;
-}
-
-[StructLayout(LayoutKind.Sequential)]
-[BestFitMapping(false, ThrowOnUnmappableChar = false)]
-public class LPStrTestClass
-{
- [MarshalAs(UnmanagedType.LPStr)]
- public String str;
-}
-
-public class BFM_LPStrMarshaler
-{
-#pragma warning disable 618
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_String([In][MarshalAs(UnmanagedType.LPStr)]String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_String([In][MarshalAs(UnmanagedType.LPStr)]ref String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_String([In, Out][MarshalAs(UnmanagedType.LPStr)]ref String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_StringBuilder([In, Out][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_Struct_String([In][MarshalAs(UnmanagedType.Struct)]LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_Struct_String([In][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_Struct_String([In, Out][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_Array_String([In][MarshalAs(UnmanagedType.LPArray)]String[] strArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_Array_String([In][MarshalAs(UnmanagedType.LPArray)]ref String[] strArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_Array_String([In, Out][MarshalAs(UnmanagedType.LPArray)]ref String[] Array);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_Class_String([In, Out][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]LPStrTestStruct[] structArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_Array_Struct([In, Out][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
-#pragma warning restore 618
-
- static String GetValidString()
- {
- return "This is the initial test string.";
- }
-
- static String GetInvalidString()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl.ToString();
- }
-
- static StringBuilder GetValidStringBuilder()
- {
- StringBuilder sb = new StringBuilder("test string.");
- return sb;
- }
-
- static StringBuilder GetInvalidStringBuilder()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl;
- }
-
- static void testLPStrBufferString()
- {
- Assert.True(LPStrBuffer_In_String(GetInvalidString()));
-
- Assert.True(LPStrBuffer_In_String(GetValidString()));
-
- String cTemp = GetInvalidString();
- Assert.True(LPStrBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- Assert.True(LPStrBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetInvalidString();
- String cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_String(ref cTemp));
- Assert.NotEqual(cTempClone, cTemp);
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
- }
-
- static void testLPStrBufferStringBuilder()
- {
- StringBuilder sb = GetInvalidStringBuilder();
- Assert.True(LPStrBuffer_In_StringBuilder(sb));
-
- Assert.True(LPStrBuffer_In_StringBuilder(GetValidStringBuilder()));
-
- StringBuilder cTemp = GetInvalidStringBuilder();
- Assert.True(LPStrBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- Assert.True(LPStrBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetInvalidStringBuilder();
- StringBuilder cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.NotEqual(cTempClone.ToString(), cTemp.ToString());
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
- }
-
- static LPStrTestStruct GetInvalidStruct()
- {
- LPStrTestStruct inValidStruct = new LPStrTestStruct();
- inValidStruct.str = GetInvalidString();
-
- return inValidStruct;
- }
-
-
- static LPStrTestStruct GetValidStruct()
- {
- LPStrTestStruct validStruct = new LPStrTestStruct();
- validStruct.str = GetValidString();
-
- return validStruct;
- }
-
- static String[] GetValidArray()
- {
- String[] s = new String[3];
-
- s[0] = GetValidString();
- s[1] = GetValidString();
- s[2] = GetValidString();
-
- return s;
- }
-
- static String[] GetInvalidArray()
- {
- String[] s = new String[3];
-
- s[0] = GetInvalidString();
- s[1] = GetInvalidString();
- s[2] = GetInvalidString();
-
- return s;
- }
-
- static void testLPStrBufferStruct()
- {
- LPStrTestStruct lpss = GetInvalidStruct();
- Assert.True(LPStrBuffer_In_Struct_String(lpss));
-
- Assert.True(LPStrBuffer_In_Struct_String(GetValidStruct()));
-
- LPStrTestStruct cTemp = GetInvalidStruct();
- Assert.True(LPStrBuffer_InByRef_Struct_String(ref cTemp));
-
- cTemp = GetValidStruct();
- Assert.True(LPStrBuffer_InByRef_Struct_String(ref cTemp));
-
- cTemp = GetInvalidStruct();
- LPStrTestStruct cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_Struct_String(ref cTemp));
- Assert.NotEqual(cTempClone.str, cTemp.str);
-
- cTemp = GetValidStruct();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_Struct_String(ref cTemp));
- Assert.Equal(cTempClone.str, cTemp.str);
- }
-
- static void testLPStrBufferClass()
- {
- LPStrTestClass lpss = new LPStrTestClass();
- lpss.str = GetInvalidString();
- Assert.True(LPStrBuffer_In_Class_String(lpss));
-
- lpss.str = GetValidString();
- Assert.True(LPStrBuffer_In_Class_String(lpss));
-
- LPStrTestClass cTemp = new LPStrTestClass();
- cTemp.str = GetInvalidString();
- Assert.True(LPStrBuffer_InByRef_Class_String(ref cTemp));
-
- cTemp.str = GetValidString();
- Assert.True(LPStrBuffer_InByRef_Class_String(ref cTemp));
-
- cTemp.str = GetInvalidString();
- LPStrTestClass cTempClone = new LPStrTestClass();
- cTempClone.str = cTemp.str;
- Assert.True(LPStrBuffer_InOutByRef_Class_String(ref cTemp));
- Assert.NotEqual(cTempClone.str, cTemp.str);
-
- cTemp.str = GetValidString();
- cTempClone.str = cTemp.str;
- Assert.True(LPStrBuffer_InOutByRef_Class_String(ref cTemp));
- Assert.Equal(cTempClone.str, cTemp.str);
- }
-
- static void testLPStrBufferArray()
- {
- String[] lpss = GetInvalidArray();
- Assert.True(LPStrBuffer_In_Array_String(lpss));
-
- Assert.True(LPStrBuffer_In_Array_String(GetValidArray()));
-
- String[] cTemp = GetInvalidArray();
- Assert.True(LPStrBuffer_InByRef_Array_String(ref cTemp));
-
- cTemp = GetValidArray();
- Assert.True(LPStrBuffer_InByRef_Array_String(ref cTemp));
-
- cTemp = GetInvalidArray();
- String[] cTempClone = new String[3];
- cTempClone[0] = cTemp[0];
- Assert.True(LPStrBuffer_InOutByRef_Array_String(ref cTemp));
- Assert.NotEqual(cTempClone[0], cTemp[0]);
-
- cTemp = GetValidArray();
- cTempClone[0] = cTemp[0];
- Assert.True(LPStrBuffer_InOutByRef_Array_String(ref cTemp));
- Assert.Equal(cTempClone[0], cTemp[0]);
- }
-
- static void testLPStrBufferArrayOfStructs()
- {
- LPStrTestStruct[] lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.True(LPStrBuffer_In_Array_Struct(lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_In_Array_Struct(lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.True(LPStrBuffer_InByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_InByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- LPStrTestStruct[] lpssClone = new LPStrTestStruct[2];
- lpssClone[0].str = lpss[0].str;
- lpssClone[1].str = lpss[1].str;
- Assert.True(LPStrBuffer_InOutByRef_Array_Struct(ref lpss));
- Assert.NotEqual(lpssClone[0].str, lpss[0].str);
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- lpssClone = new LPStrTestStruct[2];
- lpssClone[0].str = lpss[0].str;
- lpssClone[1].str = lpss[1].str;
- Assert.True(LPStrBuffer_InOutByRef_Array_Struct(ref lpss));
- Assert.Equal(lpssClone[0].str, lpss[0].str);
- }
-
- static void runTest()
- {
- testLPStrBufferString();
- testLPStrBufferStringBuilder();
- testLPStrBufferStruct();
- testLPStrBufferArray();
- testLPStrBufferClass();
- testLPStrBufferArrayOfStructs();
- }
-
- public static int Main()
- {
- if (System.Globalization.CultureInfo.CurrentCulture.Name != "en-US")
- {
- Console.WriteLine("Non-US English platforms are not supported.\nPassing without running tests");
-
- Console.WriteLine("--- Success");
- return 100;
- }
-
- try
- {
- runTest();
- return 100;
- } catch (Exception e){
- Console.WriteLine($"Test Failure: {e}");
- return 101;
- }
- }
-}
+++ /dev/null
-<Project Sdk="Microsoft.NET.Sdk">
- <PropertyGroup>
- <OutputType>Exe</OutputType>
- <!-- Test unsupported outside of windows -->
- <CLRTestTargetUnsupported Condition="'$(TargetsWindows)' != 'true'">true</CLRTestTargetUnsupported>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="$(MSBuildProjectName).cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CMakeLists.txt" />
- </ItemGroup>
-</Project>
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Text;
-using System.Runtime.InteropServices;
-using Xunit;
-
-[assembly: BestFitMapping(true, ThrowOnUnmappableChar = true)]
-
-[StructLayout(LayoutKind.Sequential)]
-[BestFitMapping(false, ThrowOnUnmappableChar = true)]
-public struct LPStrTestStruct
-{
- [MarshalAs(UnmanagedType.LPStr)]
- public String str;
-}
-
-[StructLayout(LayoutKind.Sequential)]
-[BestFitMapping(false, ThrowOnUnmappableChar = true)]
-public class LPStrTestClass
-{
- [MarshalAs(UnmanagedType.LPStr)]
- public String str;
-}
-
-public class BFM_LPStrMarshaler
-{
-#pragma warning disable 618
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_String([In][MarshalAs(UnmanagedType.LPStr)]String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_String([In][MarshalAs(UnmanagedType.LPStr)]ref String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_String([In, Out][MarshalAs(UnmanagedType.LPStr)]ref String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_StringBuilder([In, Out][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_Struct_String([In][MarshalAs(UnmanagedType.Struct)]LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_Struct_String([In][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_Struct_String([In, Out][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_Array_String([In][MarshalAs(UnmanagedType.LPArray)]String[] strArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_Array_String([In][MarshalAs(UnmanagedType.LPArray)]ref String[] strArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_Array_String([In, Out][MarshalAs(UnmanagedType.LPArray)]ref String[] Array);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_Class_String([In, Out][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]LPStrTestStruct[] structArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_Array_Struct([In, Out][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
-#pragma warning restore 618
-
- static String GetValidString()
- {
- return "This is the initial test string.";
- }
-
- static String GetInvalidString()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl.ToString();
- }
-
- static StringBuilder GetValidStringBuilder()
- {
- StringBuilder sb = new StringBuilder("test string.");
- return sb;
- }
-
- static StringBuilder GetInvalidStringBuilder()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl;
- }
-
- static void testLPStrBufferString()
- {
- Assert.Throws<ArgumentException>(() => LPStrBuffer_In_String(GetInvalidString()));
-
- Assert.True(LPStrBuffer_In_String(GetValidString()));
-
- String cTemp = GetInvalidString();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- Assert.True(LPStrBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetInvalidString();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InOutByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- String cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_String(ref cTemp));
-
- Assert.Equal(cTempClone, cTemp);
- }
-
- static void testLPStrBufferStringBuilder()
- {
- Assert.Throws<ArgumentException>(() => LPStrBuffer_In_StringBuilder(GetInvalidStringBuilder()));
-
- Assert.True(LPStrBuffer_In_StringBuilder(GetValidStringBuilder()));
-
- StringBuilder cTemp = GetInvalidStringBuilder();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- Assert.True(LPStrBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetInvalidStringBuilder();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InOutByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- StringBuilder cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
- }
-
- static LPStrTestStruct GetInvalidStruct()
- {
- LPStrTestStruct inValidStruct = new LPStrTestStruct();
- inValidStruct.str = GetInvalidString();
-
- return inValidStruct;
- }
-
- static LPStrTestStruct GetValidStruct()
- {
- LPStrTestStruct validStruct = new LPStrTestStruct();
- validStruct.str = GetValidString();
-
- return validStruct;
- }
-
- static String[] GetValidArray()
- {
- String[] s = new String[3];
-
- s[0] = GetValidString();
- s[1] = GetValidString();
- s[2] = GetValidString();
-
- return s;
- }
-
- static String[] GetInvalidArray()
- {
- String[] s = new String[3];
-
- s[0] = GetInvalidString();
- s[1] = GetInvalidString();
- s[2] = GetInvalidString();
-
- return s;
- }
-
- static void testLPStrBufferStruct()
- {
- Assert.Throws<ArgumentException>(() => LPStrBuffer_In_Struct_String(GetInvalidStruct()));
-
- Assert.True(LPStrBuffer_In_Struct_String(GetValidStruct()));
-
- LPStrTestStruct cTemp = GetInvalidStruct();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InByRef_Struct_String(ref cTemp));
-
- cTemp = GetValidStruct();
- Assert.True(LPStrBuffer_InByRef_Struct_String(ref cTemp));
-
- cTemp = GetInvalidStruct();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InOutByRef_Struct_String(ref cTemp));
-
- cTemp = GetValidStruct();
- LPStrTestStruct cTempClone = new LPStrTestStruct();
- cTempClone.str = cTemp.str;
- Assert.True(LPStrBuffer_InOutByRef_Struct_String(ref cTemp));
- Assert.Equal(cTempClone.str, cTemp.str);
- }
-
- static void testLPStrBufferClass()
- {
- LPStrTestClass cTest = new LPStrTestClass();
- cTest.str = GetInvalidString();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_In_Class_String(cTest));
-
- cTest.str = GetValidString();
- Assert.True(LPStrBuffer_In_Class_String(cTest));
-
- LPStrTestClass cTemp = new LPStrTestClass();
- cTemp.str = GetInvalidString();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InByRef_Class_String(ref cTemp));
-
- cTemp.str = GetValidString();
- Assert.True(LPStrBuffer_InByRef_Class_String(ref cTemp));
-
- cTemp.str = GetInvalidString();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InOutByRef_Class_String(ref cTemp));
-
- cTemp.str = GetValidString();
- LPStrTestClass cTempClone = new LPStrTestClass();
- cTempClone.str = cTemp.str;
- Assert.True(LPStrBuffer_InOutByRef_Class_String(ref cTemp));
- Assert.Equal(cTempClone.str, cTemp.str);
- }
-
- static void testLPStrBufferArray()
- {
- String[] cTest = null;
- cTest = GetInvalidArray();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_In_Array_String(cTest));
-
- cTest = GetValidArray();
- Assert.True(LPStrBuffer_In_Array_String(cTest));
-
- String[] cTemp = GetInvalidArray();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InByRef_Array_String(ref cTemp));
-
- cTemp = GetValidArray();
- Assert.True(LPStrBuffer_InByRef_Array_String(ref cTemp));
-
- cTemp = GetInvalidArray();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InOutByRef_Array_String(ref cTemp));
-
- cTemp = GetValidArray();
- String[] cTempClone = new String[3];
- cTempClone[0] = cTemp[0];
- Assert.True(LPStrBuffer_InOutByRef_Array_String(ref cTemp));
- Assert.Equal(cTempClone[0], cTemp[0]);
- }
-
- static void testLPStrBufferArrayOfStructs()
- {
- LPStrTestStruct[] lpss = null;
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_In_Array_Struct(lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_In_Array_Struct(lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_InByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InOutByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
-
- LPStrTestStruct[] lpssClone = new LPStrTestStruct[2];
- lpssClone[0].str = lpss[0].str;
- lpssClone[1].str = lpss[1].str;
- Assert.True(LPStrBuffer_InOutByRef_Array_Struct(ref lpss));
- Assert.Equal(lpss[0].str, lpssClone[0].str);
- }
-
- static void runTest()
- {
- testLPStrBufferString();
- testLPStrBufferStringBuilder();
- testLPStrBufferStruct();
- testLPStrBufferArray();
- testLPStrBufferClass();
- testLPStrBufferArrayOfStructs();
- }
-
- public static int Main()
- {
- if (System.Globalization.CultureInfo.CurrentCulture.Name != "en-US")
- {
- Console.WriteLine("Non-US English platforms are not supported.\nPassing without running tests");
-
- Console.WriteLine("--- Success");
- return 100;
- }
-
- try
- {
- runTest();
- return 100;
- } catch (Exception e){
- Console.WriteLine($"Test Failure: {e}");
- return 101;
- }
- }
-}
+++ /dev/null
-<Project Sdk="Microsoft.NET.Sdk">
- <PropertyGroup>
- <OutputType>Exe</OutputType>
- <!-- Test unsupported outside of windows -->
- <CLRTestTargetUnsupported Condition="'$(TargetsWindows)' != 'true'">true</CLRTestTargetUnsupported>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="$(MSBuildProjectName).cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CMakeLists.txt" />
- </ItemGroup>
-</Project>
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Text;
-using System.Runtime.InteropServices;
-using Xunit;
-
-[assembly: BestFitMapping(true, ThrowOnUnmappableChar = true)]
-
-[StructLayout(LayoutKind.Sequential)]
-[BestFitMapping(true, ThrowOnUnmappableChar = false)]
-public struct LPStrTestStruct
-{
- [MarshalAs(UnmanagedType.LPStr)]
- public String str;
-}
-
-[StructLayout(LayoutKind.Sequential)]
-[BestFitMapping(true, ThrowOnUnmappableChar = false)]
-public class LPStrTestClass
-{
- [MarshalAs(UnmanagedType.LPStr)]
- public String str;
-}
-
-public class BFM_LPStrMarshaler
-{
-#pragma warning disable 618
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_String([In][MarshalAs(UnmanagedType.LPStr)]String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_String([In][MarshalAs(UnmanagedType.LPStr)]ref String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_String([In, Out][MarshalAs(UnmanagedType.LPStr)]ref String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_StringBuilder([In, Out][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_Struct_String([In][MarshalAs(UnmanagedType.Struct)]LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_Struct_String([In][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_Struct_String([In, Out][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_Array_String([In][MarshalAs(UnmanagedType.LPArray)]String[] strArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_Array_String([In][MarshalAs(UnmanagedType.LPArray)]ref String[] strArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_Array_String([In, Out][MarshalAs(UnmanagedType.LPArray)]ref String[] Array);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_Class_String([In, Out][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]LPStrTestStruct[] structArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_Array_Struct([In, Out][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
-#pragma warning restore 618
-
- static String GetValidString()
- {
- return "This is the initial test string.";
- }
-
- static String GetInvalidString()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl.ToString();
- }
-
- static StringBuilder GetValidStringBuilder()
- {
- StringBuilder sb = new StringBuilder("test string.");
- return sb;
- }
-
- static StringBuilder GetInvalidStringBuilder()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl;
- }
-
- static void testLPStrBufferString()
- {
- Assert.True(LPStrBuffer_In_String(GetInvalidString()));
-
- Assert.True(LPStrBuffer_In_String(GetValidString()));
-
- String cTemp = GetInvalidString();
- String cTempClone = cTemp;
- Assert.True(LPStrBuffer_InByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
-
- cTemp = GetInvalidString();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_String(ref cTemp));
- Assert.NotEqual(cTempClone, cTemp);
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
- }
-
- static void testLPStrBufferStringBuilder()
- {
- Assert.True(LPStrBuffer_In_StringBuilder(GetInvalidStringBuilder()));
-
- Assert.True(LPStrBuffer_In_StringBuilder(GetValidStringBuilder()));
-
- StringBuilder cTemp = GetInvalidStringBuilder();
- StringBuilder cTempClone = cTemp;
- Assert.True(LPStrBuffer_InByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
-
- cTemp = GetInvalidStringBuilder();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.NotEqual(cTempClone.ToString(), cTemp.ToString());
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
- }
-
- static LPStrTestStruct GetInvalidStruct()
- {
- LPStrTestStruct inValidStruct = new LPStrTestStruct();
- inValidStruct.str = GetInvalidString();
-
- return inValidStruct;
- }
-
-
- static LPStrTestStruct GetValidStruct()
- {
- LPStrTestStruct validStruct = new LPStrTestStruct();
- validStruct.str = GetValidString();
-
- return validStruct;
- }
-
- static void testLPStrBufferStruct()
- {
- Assert.True(LPStrBuffer_In_Struct_String(GetInvalidStruct()));
-
- Assert.True(LPStrBuffer_In_Struct_String(GetValidStruct()));
-
- LPStrTestStruct lpss = GetInvalidStruct();
- Assert.True(LPStrBuffer_InByRef_Struct_String(ref lpss));
-
- lpss = GetValidStruct();
- Assert.True(LPStrBuffer_InByRef_Struct_String(ref lpss));
-
- lpss = GetInvalidStruct();
- Assert.True(LPStrBuffer_InOutByRef_Struct_String(ref lpss));
-
- lpss = GetValidStruct();
- Assert.True(LPStrBuffer_InOutByRef_Struct_String(ref lpss));
- }
-
- static String[] GetValidArray()
- {
- String[] s = new String[3];
-
- s[0] = GetValidString();
- s[1] = GetValidString();
- s[2] = GetValidString();
-
- return s;
- }
-
- static String[] GetInvalidArray()
- {
- String[] s = new String[3];
-
- s[0] = GetInvalidString();
- s[1] = GetInvalidString();
- s[2] = GetInvalidString();
-
- return s;
- }
-
- static void testLPStrBufferArray()
- {
- String[] s = GetInvalidArray();
- Assert.True(LPStrBuffer_In_Array_String(s));
-
- s = GetValidArray();
- Assert.True(LPStrBuffer_In_Array_String(s));
-
- s = GetInvalidArray();
- Assert.True(LPStrBuffer_InByRef_Array_String(ref s));
-
- s = GetValidArray();
- Assert.True(LPStrBuffer_InByRef_Array_String(ref s));
-
- s = GetInvalidArray();
- Assert.True(LPStrBuffer_InOutByRef_Array_String(ref s));
-
- s = GetValidArray();
- Assert.True(LPStrBuffer_InOutByRef_Array_String(ref s));
- }
-
- static void testLPStrBufferClass()
- {
- LPStrTestClass sClass = new LPStrTestClass();
- sClass.str = GetInvalidString();
- Assert.True(LPStrBuffer_In_Class_String(sClass));
-
- sClass.str = GetValidString();
- Assert.True(LPStrBuffer_In_Class_String(sClass));
-
- sClass.str = GetInvalidString();
- Assert.True(LPStrBuffer_InByRef_Class_String(ref sClass));
-
- sClass.str = GetValidString();
- Assert.True(LPStrBuffer_InByRef_Class_String(ref sClass));
-
- sClass.str = GetInvalidString();
- Assert.True(LPStrBuffer_InOutByRef_Class_String(ref sClass));
-
- sClass.str = GetValidString();
- Assert.True(LPStrBuffer_InOutByRef_Class_String(ref sClass));
- }
-
- static void testLPStrBufferArrayOfStructs()
- {
- LPStrTestStruct[] lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.True(LPStrBuffer_In_Array_Struct(lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_In_Array_Struct(lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.True(LPStrBuffer_InByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_InByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.True(LPStrBuffer_InOutByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_InOutByRef_Array_Struct(ref lpss));
- }
-
- static void runTest()
- {
- testLPStrBufferString();
- testLPStrBufferStringBuilder();
- testLPStrBufferStruct();
- testLPStrBufferArray();
- testLPStrBufferClass();
- testLPStrBufferArrayOfStructs();
- }
-
- public static int Main()
- {
- if (System.Globalization.CultureInfo.CurrentCulture.Name != "en-US")
- {
- Console.WriteLine("Non-US English platforms are not supported.\nPassing without running tests");
-
- Console.WriteLine("--- Success");
- return 100;
- }
-
- try
- {
- runTest();
- return 100;
- } catch (Exception e){
- Console.WriteLine($"Test Failure: {e}");
- return 101;
- }
- }
-}
+++ /dev/null
-<Project Sdk="Microsoft.NET.Sdk">
- <PropertyGroup>
- <OutputType>Exe</OutputType>
- <!-- Test unsupported outside of windows -->
- <CLRTestTargetUnsupported Condition="'$(TargetsWindows)' != 'true'">true</CLRTestTargetUnsupported>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="$(MSBuildProjectName).cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CMakeLists.txt" />
- </ItemGroup>
-</Project>
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Text;
-using System.Runtime.InteropServices;
-using Xunit;
-
-[assembly: BestFitMapping(true, ThrowOnUnmappableChar = true)]
-
-[StructLayout(LayoutKind.Sequential)]
-[BestFitMapping(true, ThrowOnUnmappableChar = true)]
-public struct LPStrTestStruct
-{
- [MarshalAs(UnmanagedType.LPStr)]
- public String str;
-}
-
-[StructLayout(LayoutKind.Sequential)]
-[BestFitMapping(true, ThrowOnUnmappableChar = true)]
-public class LPStrTestClass
-{
- [MarshalAs(UnmanagedType.LPStr)]
- public String str;
-}
-
-public class BFM_LPStrMarshaler
-{
-#pragma warning disable 618
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_String([In][MarshalAs(UnmanagedType.LPStr)]String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_String([In][MarshalAs(UnmanagedType.LPStr)]ref String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_String([In, Out][MarshalAs(UnmanagedType.LPStr)]ref String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_StringBuilder([In, Out][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_Struct_String([In][MarshalAs(UnmanagedType.Struct)]LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_Struct_String([In][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_Struct_String([In, Out][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_Array_String([In][MarshalAs(UnmanagedType.LPArray)]String[] strArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_Array_String([In][MarshalAs(UnmanagedType.LPArray)]ref String[] strArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_Array_String([In, Out][MarshalAs(UnmanagedType.LPArray)]ref String[] Array);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_Class_String([In, Out][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]LPStrTestStruct[] structArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_Array_Struct([In, Out][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
-#pragma warning restore 618
-
- static String GetValidString()
- {
- return "This is the initial test string.";
- }
-
- static String GetInvalidString()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- //sbl.Append ('乀');
- return sbl.ToString();
- }
-
- static StringBuilder GetValidStringBuilder()
- {
- StringBuilder sb = new StringBuilder("test string.");
- return sb;
- }
-
- static StringBuilder GetInvalidStringBuilder()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- //sbl.Append ('乀');
- return sbl;
- }
-
- static void testLPStrBufferString()
- {
- Assert.True(LPStrBuffer_In_String(GetInvalidString()));
-
- Assert.True(LPStrBuffer_In_String(GetValidString()));
-
- String cTemp = GetInvalidString();
- String cTempClone = GetInvalidString();
- Assert.True(LPStrBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetInvalidString();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_String(ref cTemp));
- }
-
- static void testLPStrBufferStringBuilder()
- {
- Assert.True(LPStrBuffer_In_StringBuilder(GetInvalidStringBuilder()));
-
- Assert.True(LPStrBuffer_In_StringBuilder(GetValidStringBuilder()));
-
- StringBuilder cTemp = GetInvalidStringBuilder();
- StringBuilder cTempClone = cTemp;
- Assert.True(LPStrBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetInvalidStringBuilder();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_StringBuilder(ref cTemp));
- }
-
- static LPStrTestStruct GetInvalidStruct()
- {
- LPStrTestStruct inValidStruct = new LPStrTestStruct();
- inValidStruct.str = GetInvalidString();
-
- return inValidStruct;
- }
-
- static LPStrTestStruct GetValidStruct()
- {
- LPStrTestStruct validStruct = new LPStrTestStruct();
- validStruct.str = GetValidString();
-
- return validStruct;
- }
-
- static void testLPStrBufferStruct()
- {
- Assert.True(LPStrBuffer_In_Struct_String(GetInvalidStruct()));
-
- Assert.True(LPStrBuffer_In_Struct_String(GetValidStruct()));
-
- LPStrTestStruct lpss = GetInvalidStruct();
- Assert.True(LPStrBuffer_InByRef_Struct_String(ref lpss));
-
- lpss = GetValidStruct();
- Assert.True(LPStrBuffer_InByRef_Struct_String(ref lpss));
-
- lpss = GetInvalidStruct();
- Assert.True(LPStrBuffer_InOutByRef_Struct_String(ref lpss));
-
- lpss = GetValidStruct();
- Assert.True(LPStrBuffer_InOutByRef_Struct_String(ref lpss));
- }
-
- static String[] GetValidArray()
- {
- String[] s = new String[3];
-
- s[0] = GetValidString();
- s[1] = GetValidString();
- s[2] = GetValidString();
-
- return s;
- }
-
- static String[] GetInvalidArray()
- {
- String[] s = new String[3];
-
- s[0] = GetInvalidString();
- s[1] = GetInvalidString();
- s[2] = GetInvalidString();
-
- return s;
- }
-
- static void testLPStrBufferArray()
- {
- String[] s = GetInvalidArray();
- Assert.True(LPStrBuffer_In_Array_String(s));
-
- s = GetValidArray();
- Assert.True(LPStrBuffer_In_Array_String(s));
-
- s = GetInvalidArray();
- Assert.True(LPStrBuffer_InByRef_Array_String(ref s));
-
- s = GetValidArray();
- Assert.True(LPStrBuffer_InByRef_Array_String(ref s));
-
- s = GetInvalidArray();
- Assert.True(LPStrBuffer_InOutByRef_Array_String(ref s));
-
- s = GetValidArray();
- Assert.True(LPStrBuffer_InOutByRef_Array_String(ref s));
- }
-
- static void testLPStrBufferClass()
- {
- LPStrTestClass sClass = new LPStrTestClass();
- sClass.str = GetInvalidString();
- Assert.True(LPStrBuffer_In_Class_String(sClass));
-
- sClass.str = GetValidString();
- Assert.True(LPStrBuffer_In_Class_String(sClass));
-
- sClass.str = GetInvalidString();
- Assert.True(LPStrBuffer_InByRef_Class_String(ref sClass));
-
- sClass.str = GetValidString();
- Assert.True(LPStrBuffer_InByRef_Class_String(ref sClass));
-
- sClass.str = GetInvalidString();
- Assert.True(LPStrBuffer_InOutByRef_Class_String(ref sClass));
-
- sClass.str = GetValidString();
- Assert.True(LPStrBuffer_InOutByRef_Class_String(ref sClass));
- }
-
- static void testLPStrBufferArrayOfStructs()
- {
- LPStrTestStruct[] lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.True(LPStrBuffer_In_Array_Struct(lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
-
- Assert.True(LPStrBuffer_In_Array_Struct(lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.True(LPStrBuffer_InByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_InByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
-
- Assert.True(LPStrBuffer_InOutByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_InOutByRef_Array_Struct(ref lpss));
- }
-
- static void runTest()
- {
- testLPStrBufferString();
- testLPStrBufferStringBuilder();
- testLPStrBufferStruct();
- testLPStrBufferArray();
- testLPStrBufferClass();
- testLPStrBufferArrayOfStructs();
- }
-
- public static int Main()
- {
- if (System.Globalization.CultureInfo.CurrentCulture.Name != "en-US")
- {
- Console.WriteLine("Non-US English platforms are not supported.\nPassing without running tests");
-
- Console.WriteLine("--- Success");
- return 100;
- }
-
- try
- {
- runTest();
- return 100;
- } catch (Exception e){
- Console.WriteLine($"Test Failure: {e}");
- return 101;
- }
- }
-}
+++ /dev/null
-<Project Sdk="Microsoft.NET.Sdk">
- <PropertyGroup>
- <OutputType>Exe</OutputType>
- <!-- Test unsupported outside of windows -->
- <CLRTestTargetUnsupported Condition="'$(TargetsWindows)' != 'true'">true</CLRTestTargetUnsupported>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="$(MSBuildProjectName).cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CMakeLists.txt" />
- </ItemGroup>
-</Project>
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Text;
-using System.Runtime.InteropServices;
-using Xunit;
-
-[assembly: BestFitMapping(false, ThrowOnUnmappableChar = false)]
-
-[StructLayout(LayoutKind.Sequential)]
-public struct LPStrTestStruct
-{
- [MarshalAs(UnmanagedType.LPStr)]
- public String str;
-}
-
-[StructLayout(LayoutKind.Sequential)]
-public class LPStrTestClass
-{
- [MarshalAs(UnmanagedType.LPStr)]
- public String str;
-}
-
-public class BFM_LPStrMarshaler
-{
-#pragma warning disable 618
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_In_String([In][MarshalAs(UnmanagedType.LPStr)]String s);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_InByRef_String([In][MarshalAs(UnmanagedType.LPStr)]ref String s);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_InOutByRef_String([In, Out][MarshalAs(UnmanagedType.LPStr)]ref String s);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_In_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_InByRef_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_InOutByRef_StringBuilder([In, Out][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_In_Struct_String([In][MarshalAs(UnmanagedType.Struct)]LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_InByRef_Struct_String([In][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_InOutByRef_Struct_String([In, Out][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_In_Array_String([In][MarshalAs(UnmanagedType.LPArray)]String[] strArray);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_InByRef_Array_String([In][MarshalAs(UnmanagedType.LPArray)]ref String[] strArray);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_InOutByRef_Array_String([In, Out][MarshalAs(UnmanagedType.LPArray)]ref String[] Array);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_In_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_InByRef_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_InOutByRef_Class_String([In, Out][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_In_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]LPStrTestStruct[] structArray);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_InByRef_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_InOutByRef_Array_Struct([In, Out][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
-#pragma warning restore 618
-
- static String GetValidString()
- {
- return "This is the initial test string.";
- }
-
- static String GetInvalidString()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl.ToString();
- }
-
- static StringBuilder GetValidStringBuilder()
- {
- StringBuilder sb = new StringBuilder("test string.");
- return sb;
- }
-
- static StringBuilder GetInvalidStringBuilder()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl;
- }
-
- static void testLPStrBufferString()
- {
- Assert.True(LPStrBuffer_In_String(GetInvalidString()));
- Assert.True(LPStrBuffer_In_String(GetValidString()));
-
- String cTemp = GetInvalidString();
- Assert.True(LPStrBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- Assert.True(LPStrBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetInvalidString();
- String cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_String(ref cTemp));
- Assert.NotEqual(cTempClone, cTemp);
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
- }
-
- static void testLPStrBufferStringBuilder()
- {
- StringBuilder sb = GetInvalidStringBuilder();
- Assert.True(LPStrBuffer_In_StringBuilder(sb));
- Assert.True(LPStrBuffer_In_StringBuilder(GetValidStringBuilder()));
-
- StringBuilder cTemp = GetInvalidStringBuilder();
- Assert.True(LPStrBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- Assert.True(LPStrBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetInvalidStringBuilder();
- StringBuilder cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.NotEqual(cTempClone.ToString(), cTemp.ToString());
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
- }
-
- static LPStrTestStruct GetInvalidStruct()
- {
- LPStrTestStruct inValidStruct = new LPStrTestStruct();
- inValidStruct.str = GetInvalidString();
-
- return inValidStruct;
- }
-
- static LPStrTestStruct GetValidStruct()
- {
- LPStrTestStruct validStruct = new LPStrTestStruct();
- validStruct.str = GetValidString();
-
- return validStruct;
- }
-
- static String[] GetValidArray()
- {
- String[] s = new String[3];
-
- s[0] = GetValidString();
- s[1] = GetValidString();
- s[2] = GetValidString();
-
- return s;
- }
-
- static String[] GetInvalidArray()
- {
- String[] s = new String[3];
-
- s[0] = GetInvalidString();
- s[1] = GetInvalidString();
- s[2] = GetInvalidString();
-
- return s;
- }
-
- static void testLPStrBufferStruct()
- {
- LPStrTestStruct lpss = GetInvalidStruct();
- Assert.True(LPStrBuffer_In_Struct_String(lpss));
- Assert.True(LPStrBuffer_In_Struct_String(GetValidStruct()));
-
- LPStrTestStruct cTemp = GetInvalidStruct();
- Assert.True(LPStrBuffer_InByRef_Struct_String(ref cTemp));
-
- cTemp = GetValidStruct();
- Assert.True(LPStrBuffer_InByRef_Struct_String(ref cTemp));
-
- cTemp = GetInvalidStruct();
- LPStrTestStruct cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_Struct_String(ref cTemp));
- Assert.NotEqual(cTempClone.str, cTemp.str);
-
- cTemp = GetValidStruct();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_Struct_String(ref cTemp));
- Assert.Equal(cTempClone.str, cTemp.str);
- }
-
- static void testLPStrBufferClass()
- {
- LPStrTestClass lpss = new LPStrTestClass();
- lpss.str = GetInvalidString();
- Assert.True(LPStrBuffer_In_Class_String(lpss));
-
- lpss.str = GetValidString();
- Assert.True(LPStrBuffer_In_Class_String(lpss));
-
- LPStrTestClass cTemp = new LPStrTestClass();
- cTemp.str = GetInvalidString();
- Assert.True(LPStrBuffer_InByRef_Class_String(ref cTemp));
-
- cTemp.str = GetValidString();
- Assert.True(LPStrBuffer_InByRef_Class_String(ref cTemp));
-
- cTemp.str = GetInvalidString();
- LPStrTestClass cTempClone = new LPStrTestClass();
- cTempClone.str = cTemp.str;
- Assert.True(LPStrBuffer_InOutByRef_Class_String(ref cTemp));
- Assert.NotEqual(cTempClone.str, cTemp.str);
-
- cTemp.str = GetValidString();
- cTempClone.str = cTemp.str;
- Assert.True(LPStrBuffer_InOutByRef_Class_String(ref cTemp));
- Assert.Equal(cTempClone.str, cTemp.str);
- }
-
- static void testLPStrBufferArray()
- {
- String[] lpss = GetInvalidArray();
- Assert.True(LPStrBuffer_In_Array_String(lpss));
- Assert.True(LPStrBuffer_In_Array_String(GetValidArray()));
-
- String[] cTemp = GetInvalidArray();
- Assert.True(LPStrBuffer_InByRef_Array_String(ref cTemp));
-
- cTemp = GetValidArray();
- Assert.True(LPStrBuffer_InByRef_Array_String(ref cTemp));
-
- cTemp = GetInvalidArray();
- String[] cTempClone = new String[3];
- cTempClone[0] = cTemp[0];
- Assert.True(LPStrBuffer_InOutByRef_Array_String(ref cTemp));
- Assert.NotEqual(cTempClone[0], cTemp[0]);
-
- cTemp = GetValidArray();
- cTempClone[0] = cTemp[0];
- Assert.True(LPStrBuffer_InOutByRef_Array_String(ref cTemp));
- Assert.Equal(cTempClone[0], cTemp[0]);
- }
-
- static void testLPStrBufferArrayOfStructs()
- {
- LPStrTestStruct[] lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.True(LPStrBuffer_In_Array_Struct(lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_In_Array_Struct(lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.True(LPStrBuffer_InByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_InByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- LPStrTestStruct[] lpssClone = new LPStrTestStruct[2];
- lpssClone[0].str = lpss[0].str;
- lpssClone[1].str = lpss[1].str;
- Assert.True(LPStrBuffer_InOutByRef_Array_Struct(ref lpss));
- Assert.NotEqual(lpss[0].str, lpssClone[0].str);
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- lpssClone = new LPStrTestStruct[2];
- lpssClone[0].str = lpss[0].str;
- lpssClone[1].str = lpss[1].str;
- Assert.True(LPStrBuffer_InOutByRef_Array_Struct(ref lpss));
- Assert.Equal(lpss[0].str, lpssClone[0].str );
- }
-
- static void runTest()
- {
- testLPStrBufferString();
- testLPStrBufferStringBuilder();
- testLPStrBufferStruct();
- testLPStrBufferArray();
- testLPStrBufferClass();
- testLPStrBufferArrayOfStructs();
- }
-
- public static int Main()
- {
- if (System.Globalization.CultureInfo.CurrentCulture.Name != "en-US")
- {
- Console.WriteLine("Non-US English platforms are not supported.\nPassing without running tests");
-
- Console.WriteLine("--- Success");
- return 100;
- }
-
- try
- {
- runTest();
- return 100;
- }
- catch (Exception e)
- {
- Console.WriteLine($"Test Failure: {e}");
- return 101;
- }
- }
-}
+++ /dev/null
-<Project Sdk="Microsoft.NET.Sdk">
- <PropertyGroup>
- <OutputType>Exe</OutputType>
- <!-- Test unsupported outside of windows -->
- <CLRTestTargetUnsupported Condition="'$(TargetsWindows)' != 'true'">true</CLRTestTargetUnsupported>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="$(MSBuildProjectName).cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CMakeLists.txt" />
- </ItemGroup>
-</Project>
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Text;
-using System.Runtime.InteropServices;
-using Xunit;
-
-[assembly: BestFitMapping(false, ThrowOnUnmappableChar = true)]
-
-[StructLayout(LayoutKind.Sequential)]
-public struct LPStrTestStruct
-{
- [MarshalAs(UnmanagedType.LPStr)]
- public String str;
-}
-
-[StructLayout(LayoutKind.Sequential)]
-public class LPStrTestClass
-{
- [MarshalAs(UnmanagedType.LPStr)]
- public String str;
-}
-
-public class BFM_LPStrMarshaler
-{
-#pragma warning disable 618
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_In_String([In][MarshalAs(UnmanagedType.LPStr)]String s);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_InByRef_String([In][MarshalAs(UnmanagedType.LPStr)]ref String s);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_InOutByRef_String([In, Out][MarshalAs(UnmanagedType.LPStr)]ref String s);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_In_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_InByRef_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_InOutByRef_StringBuilder([In, Out][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_In_Struct_String([In][MarshalAs(UnmanagedType.Struct)]LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_InByRef_Struct_String([In][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_InOutByRef_Struct_String([In, Out][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_In_Array_String([In][MarshalAs(UnmanagedType.LPArray)]String[] strArray);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_InByRef_Array_String([In][MarshalAs(UnmanagedType.LPArray)]ref String[] strArray);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_InOutByRef_Array_String([In, Out][MarshalAs(UnmanagedType.LPArray)]ref String[] Array);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_In_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_InByRef_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_InOutByRef_Class_String([In, Out][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_In_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]LPStrTestStruct[] structArray);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_InByRef_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_InOutByRef_Array_Struct([In, Out][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
-#pragma warning restore 618
-
- static String GetValidString()
- {
- return "This is the initial test string.";
- }
-
- static String GetInvalidString()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl.ToString();
- }
-
- static StringBuilder GetValidStringBuilder()
- {
- StringBuilder sb = new StringBuilder("test string.");
- return sb;
- }
-
- static StringBuilder GetInvalidStringBuilder()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl;
- }
-
- static void testLPStrBufferString()
- {
- Assert.Throws<ArgumentException>(() => LPStrBuffer_In_String(GetInvalidString()));
- Assert.True(LPStrBuffer_In_String(GetValidString()));
-
- String cTemp = GetInvalidString();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- Assert.True(LPStrBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetInvalidString();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InOutByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- String cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
- }
-
- static void testLPStrBufferStringBuilder()
- {
- Assert.Throws<ArgumentException>(() => LPStrBuffer_In_StringBuilder(GetInvalidStringBuilder()));
- Assert.True(LPStrBuffer_In_StringBuilder(GetValidStringBuilder()));
-
- StringBuilder cTemp = GetInvalidStringBuilder();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- Assert.True(LPStrBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetInvalidStringBuilder();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InOutByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- StringBuilder cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString() );
- }
-
- static LPStrTestStruct GetInvalidStruct()
- {
- LPStrTestStruct inValidStruct = new LPStrTestStruct();
- inValidStruct.str = GetInvalidString();
-
- return inValidStruct;
- }
-
- static LPStrTestStruct GetValidStruct()
- {
- LPStrTestStruct validStruct = new LPStrTestStruct();
- validStruct.str = GetValidString();
-
- return validStruct;
- }
-
- static String[] GetValidArray()
- {
- String[] s = new String[3];
-
- s[0] = GetValidString();
- s[1] = GetValidString();
- s[2] = GetValidString();
-
- return s;
- }
-
- static String[] GetInvalidArray()
- {
- String[] s = new String[3];
-
- s[0] = GetInvalidString();
- s[1] = GetInvalidString();
- s[2] = GetInvalidString();
-
- return s;
- }
-
- static void testLPStrBufferStruct()
- {
- Assert.Throws<ArgumentException>(() => LPStrBuffer_In_Struct_String(GetInvalidStruct()));
- Assert.True(LPStrBuffer_In_Struct_String(GetValidStruct()));
-
- LPStrTestStruct cTemp = GetInvalidStruct();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InByRef_Struct_String(ref cTemp));
-
- cTemp = GetValidStruct();
- Assert.True(LPStrBuffer_InByRef_Struct_String(ref cTemp));
-
- cTemp = GetInvalidStruct();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InOutByRef_Struct_String(ref cTemp));
-
- cTemp = GetValidStruct();
- LPStrTestStruct cTempClone = new LPStrTestStruct();
- cTempClone.str = cTemp.str;
- Assert.True(LPStrBuffer_InOutByRef_Struct_String(ref cTemp));
- Assert.Equal(cTempClone.str, cTemp.str);
- }
-
- static void testLPStrBufferClass()
- {
- LPStrTestClass cTest = new LPStrTestClass();
- cTest.str = GetInvalidString();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_In_Class_String(cTest));
-
- cTest.str = GetValidString();
- Assert.True(LPStrBuffer_In_Class_String(cTest));
-
- LPStrTestClass cTemp = new LPStrTestClass();
- cTemp.str = GetInvalidString();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InByRef_Class_String(ref cTemp));
-
- cTemp.str = GetValidString();
- Assert.True(LPStrBuffer_InByRef_Class_String(ref cTemp));
-
- cTemp.str = GetInvalidString();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InOutByRef_Class_String(ref cTemp));
-
- cTemp.str = GetValidString();
- LPStrTestClass cTempClone = new LPStrTestClass();
- cTempClone.str = cTemp.str;
- Assert.True(LPStrBuffer_InOutByRef_Class_String(ref cTemp));
- Assert.Equal(cTempClone.str, cTemp.str);
- }
-
- static void testLPStrBufferArray()
- {
- String[] cTest = null;
- cTest = GetInvalidArray();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_In_Array_String(cTest));
-
- cTest = GetValidArray();
- Assert.True(LPStrBuffer_In_Array_String(cTest));
-
- String[] cTemp = GetInvalidArray();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InByRef_Array_String(ref cTemp));
-
- cTemp = GetValidArray();
- Assert.True(LPStrBuffer_InByRef_Array_String(ref cTemp));
-
- cTemp = GetInvalidArray();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InOutByRef_Array_String(ref cTemp));
-
- cTemp = GetValidArray();
- String[] cTempClone = new String[3];
- cTempClone[0] = cTemp[0];
- Assert.True(LPStrBuffer_InOutByRef_Array_String(ref cTemp));
- Assert.Equal(cTempClone[0], cTemp[0]);
- }
-
- static void testLPStrBufferArrayOfStructs()
- {
- LPStrTestStruct[] lpss = null;
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_In_Array_Struct(lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_In_Array_Struct(lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_InByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InOutByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- LPStrTestStruct[] lpssClone = new LPStrTestStruct[2];
- lpssClone[0].str = lpss[0].str;
- lpssClone[1].str = lpss[1].str;
- Assert.True(LPStrBuffer_InOutByRef_Array_Struct(ref lpss));
- Assert.Equal(lpss[0].str, lpssClone[0].str);
- }
-
- static void runTest()
- {
- testLPStrBufferString();
- testLPStrBufferStringBuilder();
- testLPStrBufferStruct();
- testLPStrBufferArray();
- testLPStrBufferClass();
- testLPStrBufferArrayOfStructs();
- }
-
- public static int Main()
- {
- if (System.Globalization.CultureInfo.CurrentCulture.Name != "en-US")
- {
- Console.WriteLine("Non-US English platforms are not supported.\nPassing without running tests");
-
- Console.WriteLine("--- Success");
- return 100;
- }
-
- try
- {
- runTest();
- return 100;
- }
- catch (Exception e)
- {
- Console.WriteLine($"Test Failure: {e}");
- return 101;
- }
- }
-}
+++ /dev/null
-<Project Sdk="Microsoft.NET.Sdk">
- <PropertyGroup>
- <OutputType>Exe</OutputType>
- <!-- Test unsupported outside of windows -->
- <CLRTestTargetUnsupported Condition="'$(TargetsWindows)' != 'true'">true</CLRTestTargetUnsupported>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="$(MSBuildProjectName).cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CMakeLists.txt" />
- </ItemGroup>
-</Project>
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Text;
-using System.Runtime.InteropServices;
-using Xunit;
-
-[assembly: BestFitMapping(true, ThrowOnUnmappableChar = false)]
-
-[StructLayout(LayoutKind.Sequential)]
-public struct LPStrTestStruct
-{
- [MarshalAs(UnmanagedType.LPStr)]
- public String str;
-}
-
-[StructLayout(LayoutKind.Sequential)]
-public class LPStrTestClass
-{
- [MarshalAs(UnmanagedType.LPStr)]
- public String str;
-}
-
-public class BFM_LPStrMarshaler
-{
-#pragma warning disable 618
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_In_String([In][MarshalAs(UnmanagedType.LPStr)]String s);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_InByRef_String([In][MarshalAs(UnmanagedType.LPStr)]ref String s);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_InOutByRef_String([In, Out][MarshalAs(UnmanagedType.LPStr)]ref String s);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_In_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_InByRef_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_InOutByRef_StringBuilder([In, Out][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_In_Struct_String([In][MarshalAs(UnmanagedType.Struct)]LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_InByRef_Struct_String([In][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_InOutByRef_Struct_String([In, Out][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_In_Array_String([In][MarshalAs(UnmanagedType.LPArray)]String[] strArray);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_InByRef_Array_String([In][MarshalAs(UnmanagedType.LPArray)]ref String[] strArray);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_InOutByRef_Array_String([In, Out][MarshalAs(UnmanagedType.LPArray)]ref String[] Array);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_In_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_InByRef_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_InOutByRef_Class_String([In, Out][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_In_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]LPStrTestStruct[] structArray);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_InByRef_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_InOutByRef_Array_Struct([In, Out][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
-#pragma warning restore 618
-
- static String GetValidString()
- {
- return "This is the initial test string.";
- }
-
- static String GetInvalidString()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl.ToString();
- }
-
- static StringBuilder GetValidStringBuilder()
- {
- StringBuilder sb = new StringBuilder("test string.");
- return sb;
- }
-
- static StringBuilder GetInvalidStringBuilder()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl;
- }
-
- static void testLPStrBufferString()
- {
- Assert.True(LPStrBuffer_In_String(GetInvalidString()));
- Assert.True(LPStrBuffer_In_String(GetValidString()));
-
- String cTemp = GetInvalidString();
- String cTempClone = cTemp;
- Assert.True(LPStrBuffer_InByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
-
- cTemp = GetInvalidString();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_String(ref cTemp));
- Assert.NotEqual(cTempClone, cTemp);
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
- }
-
- static void testLPStrBufferStringBuilder()
- {
- Assert.True(LPStrBuffer_In_StringBuilder(GetInvalidStringBuilder()));
- Assert.True(LPStrBuffer_In_StringBuilder(GetValidStringBuilder()));
-
- StringBuilder cTemp = GetInvalidStringBuilder();
- StringBuilder cTempClone = cTemp;
- Assert.True(LPStrBuffer_InByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
-
- cTemp = GetInvalidStringBuilder();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.NotEqual(cTempClone.ToString(), cTemp.ToString());
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
- }
-
- static LPStrTestStruct GetInvalidStruct()
- {
- LPStrTestStruct inValidStruct = new LPStrTestStruct();
- inValidStruct.str = GetInvalidString();
-
- return inValidStruct;
- }
-
- static LPStrTestStruct GetValidStruct()
- {
- LPStrTestStruct validStruct = new LPStrTestStruct();
- validStruct.str = GetValidString();
-
- return validStruct;
- }
-
- static void testLPStrBufferStruct()
- {
- Assert.True(LPStrBuffer_In_Struct_String(GetInvalidStruct()));
- Assert.True(LPStrBuffer_In_Struct_String(GetValidStruct()));
-
- LPStrTestStruct lpss = GetInvalidStruct();
- Assert.True(LPStrBuffer_InByRef_Struct_String(ref lpss));
-
- lpss = GetValidStruct();
- Assert.True(LPStrBuffer_InByRef_Struct_String(ref lpss));
-
- lpss = GetInvalidStruct();
- Assert.True(LPStrBuffer_InOutByRef_Struct_String(ref lpss));
-
- lpss = GetValidStruct();
- Assert.True(LPStrBuffer_InOutByRef_Struct_String(ref lpss));
- }
-
- static String[] GetValidArray()
- {
- String[] s = new String[3];
-
- s[0] = GetValidString();
- s[1] = GetValidString();
- s[2] = GetValidString();
-
- return s;
- }
-
- static String[] GetInvalidArray()
- {
- String[] s = new String[3];
-
- s[0] = GetInvalidString();
- s[1] = GetInvalidString();
- s[2] = GetInvalidString();
-
- return s;
- }
-
- static void testLPStrBufferArray()
- {
- String[] s = GetInvalidArray();
- Assert.True(LPStrBuffer_In_Array_String(s));
-
- s = GetValidArray();
- Assert.True(LPStrBuffer_In_Array_String(s));
-
- s = GetInvalidArray();
- Assert.True(LPStrBuffer_InByRef_Array_String(ref s));
-
- s = GetValidArray();
- Assert.True(LPStrBuffer_InByRef_Array_String(ref s));
-
- s = GetInvalidArray();
- Assert.True(LPStrBuffer_InOutByRef_Array_String(ref s));
-
- s = GetValidArray();
- Assert.True(LPStrBuffer_InOutByRef_Array_String(ref s));
- }
-
- static void testLPStrBufferClass()
- {
- LPStrTestClass sClass = new LPStrTestClass();
- sClass.str = GetInvalidString();
- Assert.True(LPStrBuffer_In_Class_String(sClass));
-
- sClass.str = GetValidString();
- Assert.True(LPStrBuffer_In_Class_String(sClass));
-
- sClass.str = GetInvalidString();
- Assert.True(LPStrBuffer_InByRef_Class_String(ref sClass));
-
- sClass.str = GetValidString();
- Assert.True(LPStrBuffer_InByRef_Class_String(ref sClass));
-
- sClass.str = GetInvalidString();
- Assert.True(LPStrBuffer_InOutByRef_Class_String(ref sClass));
-
- sClass.str = GetValidString();
- Assert.True(LPStrBuffer_InOutByRef_Class_String(ref sClass));
- }
-
- static void testLPStrBufferArrayOfStructs()
- {
- LPStrTestStruct[] lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.True(LPStrBuffer_In_Array_Struct(lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_In_Array_Struct(lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.True(LPStrBuffer_InByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_InByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.True(LPStrBuffer_InOutByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_InOutByRef_Array_Struct(ref lpss));
- }
-
- static void runTest()
- {
- testLPStrBufferString();
- testLPStrBufferStringBuilder();
- testLPStrBufferStruct();
- testLPStrBufferArray();
- testLPStrBufferClass();
- testLPStrBufferArrayOfStructs();
- }
-
- public static int Main()
- {
- if (System.Globalization.CultureInfo.CurrentCulture.Name != "en-US")
- {
- Console.WriteLine("Non-US English platforms are not supported.\nPassing without running tests");
-
- Console.WriteLine("--- Success");
- return 100;
- }
-
- try
- {
- runTest();
- return 100;
- }
- catch (Exception e)
- {
- Console.WriteLine($"Test Failure: {e}");
- return 101;
- }
- }
-}
+++ /dev/null
-<Project Sdk="Microsoft.NET.Sdk">
- <PropertyGroup>
- <OutputType>Exe</OutputType>
- <!-- Test unsupported outside of windows -->
- <CLRTestTargetUnsupported Condition="'$(TargetsWindows)' != 'true'">true</CLRTestTargetUnsupported>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="$(MSBuildProjectName).cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CMakeLists.txt" />
- </ItemGroup>
-</Project>
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Text;
-using System.Runtime.InteropServices;
-using Xunit;
-
-[assembly: BestFitMapping(true, ThrowOnUnmappableChar = true)]
-
-[StructLayout(LayoutKind.Sequential)]
-//[BestFitMapping(true, ThrowOnUnmappableChar=true)]
-public struct LPStrTestStruct
-{
- [MarshalAs(UnmanagedType.LPStr)]
- public String str;
-}
-
-[StructLayout(LayoutKind.Sequential)]
-//[BestFitMapping(true, ThrowOnUnmappableChar=true)]
-public class LPStrTestClass
-{
- [MarshalAs(UnmanagedType.LPStr)]
- public String str;
-}
-
-public class BFM_LPStrMarshaler
-{
-#pragma warning disable 618
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_In_String([In][MarshalAs(UnmanagedType.LPStr)]String s);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_InByRef_String([In][MarshalAs(UnmanagedType.LPStr)]ref String s);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_InOutByRef_String([In, Out][MarshalAs(UnmanagedType.LPStr)]ref String s);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_In_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_InByRef_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_InOutByRef_StringBuilder([In, Out][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_In_Struct_String([In][MarshalAs(UnmanagedType.Struct)]LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_InByRef_Struct_String([In][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_InOutByRef_Struct_String([In, Out][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_In_Array_String([In][MarshalAs(UnmanagedType.LPArray)]String[] strArray);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_InByRef_Array_String([In][MarshalAs(UnmanagedType.LPArray)]ref String[] strArray);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_InOutByRef_Array_String([In, Out][MarshalAs(UnmanagedType.LPArray)]ref String[] Array);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_In_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_InByRef_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_InOutByRef_Class_String([In, Out][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_In_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]LPStrTestStruct[] structArray);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_InByRef_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
-
- [DllImport("LPStr_BestFitMappingNative")]
- public static extern bool LPStrBuffer_InOutByRef_Array_Struct([In, Out][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
-#pragma warning restore 618
-
- static String GetValidString()
- {
- return "This is the initial test string.";
- }
-
- static String GetInvalidString()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- //sbl.Append ('乀');
-
- return sbl.ToString();
- }
-
- static StringBuilder GetValidStringBuilder()
- {
- StringBuilder sb = new StringBuilder("test string.");
- return sb;
- }
-
- static StringBuilder GetInvalidStringBuilder()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- //sbl.Append ('乀');
- return sbl;
- }
-
- static void testLPStrBufferString()
- {
- Assert.True(LPStrBuffer_In_String(GetInvalidString()));
- Assert.True(LPStrBuffer_In_String(GetValidString()));
-
- String cTemp = GetInvalidString();
- String cTempClone = GetInvalidString();
- Assert.True(LPStrBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetInvalidString();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_String(ref cTemp));
-
- }
-
- static void testLPStrBufferStringBuilder()
- {
- Assert.True(LPStrBuffer_In_StringBuilder(GetInvalidStringBuilder()));
- Assert.True(LPStrBuffer_In_StringBuilder(GetValidStringBuilder()));
-
- StringBuilder cTemp = GetInvalidStringBuilder();
- StringBuilder cTempClone = cTemp;
- Assert.True(LPStrBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetInvalidStringBuilder();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_StringBuilder(ref cTemp));
- }
-
- static LPStrTestStruct GetInvalidStruct()
- {
- LPStrTestStruct inValidStruct = new LPStrTestStruct();
- inValidStruct.str = GetInvalidString();
-
- return inValidStruct;
- }
-
- static LPStrTestStruct GetValidStruct()
- {
- LPStrTestStruct validStruct = new LPStrTestStruct();
- validStruct.str = GetValidString();
-
- return validStruct;
- }
-
- static void testLPStrBufferStruct()
- {
- Assert.True(LPStrBuffer_In_Struct_String(GetInvalidStruct()));
- Assert.True(LPStrBuffer_In_Struct_String(GetValidStruct()));
-
- LPStrTestStruct lpss = GetInvalidStruct();
- Assert.True(LPStrBuffer_InByRef_Struct_String(ref lpss));
-
- lpss = GetValidStruct();
- Assert.True(LPStrBuffer_InByRef_Struct_String(ref lpss));
-
- lpss = GetInvalidStruct();
- Assert.True(LPStrBuffer_InOutByRef_Struct_String(ref lpss));
-
- lpss = GetValidStruct();
- Assert.True(LPStrBuffer_InOutByRef_Struct_String(ref lpss));
- }
-
- static String[] GetValidArray()
- {
- String[] s = new String[3];
-
- s[0] = GetValidString();
- s[1] = GetValidString();
- s[2] = GetValidString();
-
- return s;
- }
-
- static String[] GetInvalidArray()
- {
- String[] s = new String[3];
-
- s[0] = GetInvalidString();
- s[1] = GetInvalidString();
- s[2] = GetInvalidString();
-
- return s;
- }
-
- static void testLPStrBufferArray()
- {
- String[] s = GetInvalidArray();
- Assert.True(LPStrBuffer_In_Array_String(s));
-
- s = GetValidArray();
- Assert.True(LPStrBuffer_In_Array_String(s));
-
- s = GetInvalidArray();
- Assert.True(LPStrBuffer_InByRef_Array_String(ref s));
-
- s = GetValidArray();
- Assert.True(LPStrBuffer_InByRef_Array_String(ref s));
-
- s = GetInvalidArray();
- Assert.True(LPStrBuffer_InOutByRef_Array_String(ref s));
-
- s = GetValidArray();
- Assert.True(LPStrBuffer_InOutByRef_Array_String(ref s));
- }
-
- static void testLPStrBufferClass()
- {
- LPStrTestClass sClass = new LPStrTestClass();
- sClass.str = GetInvalidString();
- Assert.True(LPStrBuffer_In_Class_String(sClass));
-
- sClass.str = GetValidString();
- Assert.True(LPStrBuffer_In_Class_String(sClass));
-
- sClass.str = GetInvalidString();
- Assert.True(LPStrBuffer_InByRef_Class_String(ref sClass));
-
- sClass.str = GetValidString();
- Assert.True(LPStrBuffer_InByRef_Class_String(ref sClass));
-
- sClass.str = GetInvalidString();
- Assert.True(LPStrBuffer_InOutByRef_Class_String(ref sClass));
-
- sClass.str = GetValidString();
- Assert.True(LPStrBuffer_InOutByRef_Class_String(ref sClass));
- }
-
- static void testLPStrBufferArrayOfStructs()
- {
- LPStrTestStruct[] lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.True(LPStrBuffer_In_Array_Struct(lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_In_Array_Struct(lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.True(LPStrBuffer_InByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_InByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.True(LPStrBuffer_InOutByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_InOutByRef_Array_Struct(ref lpss));
- }
-
- static void runTest()
- {
- testLPStrBufferString();
- testLPStrBufferStringBuilder();
- testLPStrBufferStruct();
- testLPStrBufferArray();
- testLPStrBufferClass();
- testLPStrBufferArrayOfStructs();
- }
-
- public static int Main()
- {
- if (System.Globalization.CultureInfo.CurrentCulture.Name != "en-US")
- {
- Console.WriteLine("Non-US English platforms are not supported.\nPassing without running tests");
-
- Console.WriteLine("--- Success");
- return 100;
- }
-
- try
- {
- runTest();
- return 100;
- }
- catch (Exception e)
- {
- Console.WriteLine($"Test Failure: {e}");
- return 101;
- }
- }
-}
+++ /dev/null
-<Project Sdk="Microsoft.NET.Sdk">
- <PropertyGroup>
- <OutputType>Exe</OutputType>
- <!-- Test unsupported outside of windows -->
- <CLRTestTargetUnsupported Condition="'$(TargetsWindows)' != 'true'">true</CLRTestTargetUnsupported>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="$(MSBuildProjectName).cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CMakeLists.txt" />
- </ItemGroup>
-</Project>
--- /dev/null
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System;
+using System.Text;
+using System.Runtime.InteropServices;
+
+using static TestData;
+
+namespace LPStr;
+
+public partial class PInvoke_Default
+{
+ [StructLayout(LayoutKind.Sequential)]
+ public struct LPStrTestStruct
+ {
+ [MarshalAs(UnmanagedType.LPStr)]
+ public String str;
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ public class LPStrTestClass
+ {
+ [MarshalAs(UnmanagedType.LPStr)]
+ public String str;
+ }
+
+ [DllImport("LPStr_BestFitMappingNative")]
+ public static extern bool LPStrBuffer_In_String([In][MarshalAs(UnmanagedType.LPStr)]String s);
+
+ [DllImport("LPStr_BestFitMappingNative")]
+ public static extern bool LPStrBuffer_InByRef_String([In][MarshalAs(UnmanagedType.LPStr)]ref String s);
+
+ [DllImport("LPStr_BestFitMappingNative")]
+ public static extern bool LPStrBuffer_InOutByRef_String([In, Out][MarshalAs(UnmanagedType.LPStr)]ref String s);
+
+ [DllImport("LPStr_BestFitMappingNative")]
+ public static extern bool LPStrBuffer_In_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]StringBuilder s);
+
+ [DllImport("LPStr_BestFitMappingNative")]
+ public static extern bool LPStrBuffer_InByRef_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
+
+ [DllImport("LPStr_BestFitMappingNative")]
+ public static extern bool LPStrBuffer_InOutByRef_StringBuilder([In, Out][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
+
+ [DllImport("LPStr_BestFitMappingNative")]
+ public static extern bool LPStrBuffer_In_Struct_String([In][MarshalAs(UnmanagedType.Struct)]LPStrTestStruct strStruct);
+
+ [DllImport("LPStr_BestFitMappingNative")]
+ public static extern bool LPStrBuffer_InByRef_Struct_String([In][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
+
+ [DllImport("LPStr_BestFitMappingNative")]
+ public static extern bool LPStrBuffer_InOutByRef_Struct_String([In, Out][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
+
+ [DllImport("LPStr_BestFitMappingNative")]
+ public static extern bool LPStrBuffer_In_Array_String([In][MarshalAs(UnmanagedType.LPArray)]String[] strArray);
+
+ [DllImport("LPStr_BestFitMappingNative")]
+ public static extern bool LPStrBuffer_InByRef_Array_String([In][MarshalAs(UnmanagedType.LPArray)]ref String[] strArray);
+
+ [DllImport("LPStr_BestFitMappingNative")]
+ public static extern bool LPStrBuffer_InOutByRef_Array_String([In, Out][MarshalAs(UnmanagedType.LPArray)]ref String[] Array);
+
+ [DllImport("LPStr_BestFitMappingNative")]
+ public static extern bool LPStrBuffer_In_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]LPStrTestClass strClass);
+
+ [DllImport("LPStr_BestFitMappingNative")]
+ public static extern bool LPStrBuffer_InByRef_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
+
+ [DllImport("LPStr_BestFitMappingNative")]
+ public static extern bool LPStrBuffer_InOutByRef_Class_String([In, Out][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
+
+ [DllImport("LPStr_BestFitMappingNative")]
+ public static extern bool LPStrBuffer_In_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]LPStrTestStruct[] structArray);
+
+ [DllImport("LPStr_BestFitMappingNative")]
+ public static extern bool LPStrBuffer_InByRef_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
+
+ [DllImport("LPStr_BestFitMappingNative")]
+ public static extern bool LPStrBuffer_InOutByRef_Array_Struct([In, Out][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
+
+ private static LPStrTestStruct GetInvalidStruct() => new LPStrTestStruct() { str = InvalidString };
+ private static LPStrTestStruct GetUnmappableStruct() => new LPStrTestStruct() { str = UnmappableString };
+ private static LPStrTestStruct GetValidStruct() => new LPStrTestStruct() { str = ValidString };
+
+ private static unsafe void RunTest(bool bestFitMapping, bool throwOnUnmappableChar)
+ {
+ Console.WriteLine(" -- Validate P/Invokes: BestFitMapping not set, ThrowOnUnmappableChar not set");
+
+ Test.ValidateString(
+ bestFitMapping,
+ throwOnUnmappableChar,
+ new Test.Functions<string>(
+ &LPStrBuffer_In_String,
+ &LPStrBuffer_InByRef_String,
+ &LPStrBuffer_InOutByRef_String));
+
+ Test.ValidateStringBuilder(
+ bestFitMapping,
+ throwOnUnmappableChar,
+ new Test.Functions<StringBuilder>(
+ &LPStrBuffer_In_StringBuilder,
+ &LPStrBuffer_InByRef_StringBuilder,
+ &LPStrBuffer_InOutByRef_StringBuilder));
+
+ Test.ValidateStringArray(
+ bestFitMapping,
+ throwOnUnmappableChar,
+ new Test.Functions<string[]>(
+ &LPStrBuffer_In_Array_String,
+ &LPStrBuffer_InByRef_Array_String,
+ &LPStrBuffer_InOutByRef_Array_String));
+
+ Test.Validate(
+ bestFitMapping,
+ throwOnUnmappableChar,
+ new Test.Functions<LPStrTestStruct>(
+ &LPStrBuffer_In_Struct_String,
+ &LPStrBuffer_InByRef_Struct_String,
+ &LPStrBuffer_InOutByRef_Struct_String),
+ new Test.DataContext<LPStrTestStruct, string>(
+ GetInvalidStruct(),
+ GetUnmappableStruct(),
+ GetValidStruct(),
+ (LPStrTestStruct s) => s.str));
+
+ Test.Validate(
+ bestFitMapping,
+ throwOnUnmappableChar,
+ new Test.Functions<LPStrTestClass>(
+ &LPStrBuffer_In_Class_String,
+ &LPStrBuffer_InByRef_Class_String,
+ &LPStrBuffer_InOutByRef_Class_String),
+ new Test.DataContext<LPStrTestClass, string>(
+ new LPStrTestClass() { str = InvalidString },
+ new LPStrTestClass() { str = UnmappableString },
+ new LPStrTestClass() { str = ValidString },
+ (LPStrTestClass s) => s.str));
+
+ Test.Validate(
+ bestFitMapping,
+ throwOnUnmappableChar,
+ new Test.Functions<LPStrTestStruct[]>(
+ &LPStrBuffer_In_Array_Struct,
+ &LPStrBuffer_InByRef_Array_Struct,
+ &LPStrBuffer_InOutByRef_Array_Struct),
+ new Test.DataContext<LPStrTestStruct[], string>(
+ new LPStrTestStruct[] { GetInvalidStruct(), GetInvalidStruct() },
+ new LPStrTestStruct[] { GetUnmappableStruct(), GetUnmappableStruct() },
+ new LPStrTestStruct[] { GetValidStruct(), GetValidStruct() },
+ (LPStrTestStruct[] s) => s[0].str));
+ }
+}
--- /dev/null
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System;
+using System.Text;
+using System.Runtime.InteropServices;
+
+using static TestData;
+
+namespace LPStr;
+
+public class PInvoke_False_False
+{
+ [StructLayout(LayoutKind.Sequential)]
+ [BestFitMapping(false, ThrowOnUnmappableChar = false)]
+ public struct LPStrTestStruct
+ {
+ [MarshalAs(UnmanagedType.LPStr)]
+ public String str;
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ [BestFitMapping(false, ThrowOnUnmappableChar = false)]
+ public class LPStrTestClass
+ {
+ [MarshalAs(UnmanagedType.LPStr)]
+ public String str;
+ }
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
+ public static extern bool LPStrBuffer_In_String([In][MarshalAs(UnmanagedType.LPStr)]String s);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
+ public static extern bool LPStrBuffer_InByRef_String([In][MarshalAs(UnmanagedType.LPStr)]ref String s);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
+ public static extern bool LPStrBuffer_InOutByRef_String([In, Out][MarshalAs(UnmanagedType.LPStr)]ref String s);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
+ public static extern bool LPStrBuffer_In_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]StringBuilder s);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
+ public static extern bool LPStrBuffer_InByRef_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
+ public static extern bool LPStrBuffer_InOutByRef_StringBuilder([In, Out][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
+ public static extern bool LPStrBuffer_In_Struct_String([In][MarshalAs(UnmanagedType.Struct)]LPStrTestStruct strStruct);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
+ public static extern bool LPStrBuffer_InByRef_Struct_String([In][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
+ public static extern bool LPStrBuffer_InOutByRef_Struct_String([In, Out][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
+ public static extern bool LPStrBuffer_In_Array_String([In][MarshalAs(UnmanagedType.LPArray)]String[] strArray);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
+ public static extern bool LPStrBuffer_InByRef_Array_String([In][MarshalAs(UnmanagedType.LPArray)]ref String[] strArray);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
+ public static extern bool LPStrBuffer_InOutByRef_Array_String([In, Out][MarshalAs(UnmanagedType.LPArray)]ref String[] Array);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
+ public static extern bool LPStrBuffer_In_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]LPStrTestClass strClass);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
+ public static extern bool LPStrBuffer_InByRef_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
+ public static extern bool LPStrBuffer_InOutByRef_Class_String([In, Out][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
+ public static extern bool LPStrBuffer_In_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]LPStrTestStruct[] structArray);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
+ public static extern bool LPStrBuffer_InByRef_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
+ public static extern bool LPStrBuffer_InOutByRef_Array_Struct([In, Out][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
+
+ private static LPStrTestStruct GetInvalidStruct() => new LPStrTestStruct() { str = InvalidString };
+ private static LPStrTestStruct GetUnmappableStruct() => new LPStrTestStruct() { str = UnmappableString };
+ private static LPStrTestStruct GetValidStruct() => new LPStrTestStruct() { str = ValidString };
+
+ public static unsafe void RunTest()
+ {
+ Console.WriteLine(" -- Validate P/Invokes: BestFitMapping=false, ThrowOnUnmappableChar=false");
+
+ bool bestFitMapping = false;
+ bool throwOnUnmappableChar = false;
+
+ Test.ValidateString(
+ bestFitMapping,
+ throwOnUnmappableChar,
+ new Test.Functions<string>(
+ &LPStrBuffer_In_String,
+ &LPStrBuffer_InByRef_String,
+ &LPStrBuffer_InOutByRef_String));
+
+ Test.ValidateStringBuilder(
+ bestFitMapping,
+ throwOnUnmappableChar,
+ new Test.Functions<StringBuilder>(
+ &LPStrBuffer_In_StringBuilder,
+ &LPStrBuffer_InByRef_StringBuilder,
+ &LPStrBuffer_InOutByRef_StringBuilder));
+
+ Test.ValidateStringArray(
+ bestFitMapping,
+ throwOnUnmappableChar,
+ new Test.Functions<string[]>(
+ &LPStrBuffer_In_Array_String,
+ &LPStrBuffer_InByRef_Array_String,
+ &LPStrBuffer_InOutByRef_Array_String));
+
+ Test.Validate(
+ bestFitMapping,
+ throwOnUnmappableChar,
+ new Test.Functions<LPStrTestStruct>(
+ &LPStrBuffer_In_Struct_String,
+ &LPStrBuffer_InByRef_Struct_String,
+ &LPStrBuffer_InOutByRef_Struct_String),
+ new Test.DataContext<LPStrTestStruct, string>(
+ GetInvalidStruct(),
+ GetUnmappableStruct(),
+ GetValidStruct(),
+ (LPStrTestStruct s) => s.str));
+
+ Test.Validate(
+ bestFitMapping,
+ throwOnUnmappableChar,
+ new Test.Functions<LPStrTestClass>(
+ &LPStrBuffer_In_Class_String,
+ &LPStrBuffer_InByRef_Class_String,
+ &LPStrBuffer_InOutByRef_Class_String),
+ new Test.DataContext<LPStrTestClass, string>(
+ new LPStrTestClass() { str = InvalidString },
+ new LPStrTestClass() { str = UnmappableString },
+ new LPStrTestClass() { str = ValidString },
+ (LPStrTestClass s) => s.str));
+
+ Test.Validate(
+ bestFitMapping,
+ throwOnUnmappableChar,
+ new Test.Functions<LPStrTestStruct[]>(
+ &LPStrBuffer_In_Array_Struct,
+ &LPStrBuffer_InByRef_Array_Struct,
+ &LPStrBuffer_InOutByRef_Array_Struct),
+ new Test.DataContext<LPStrTestStruct[], string>(
+ new LPStrTestStruct[] { GetInvalidStruct(), GetInvalidStruct() },
+ new LPStrTestStruct[] { GetUnmappableStruct(), GetUnmappableStruct() },
+ new LPStrTestStruct[] { GetValidStruct(), GetValidStruct() },
+ (LPStrTestStruct[] s) => s[0].str));
+ }
+}
--- /dev/null
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System;
+using System.Text;
+using System.Runtime.InteropServices;
+
+using static TestData;
+
+namespace LPStr;
+
+public class PInvoke_False_True
+{
+ [StructLayout(LayoutKind.Sequential)]
+ [BestFitMapping(false, ThrowOnUnmappableChar = true)]
+ public struct LPStrTestStruct
+ {
+ [MarshalAs(UnmanagedType.LPStr)]
+ public String str;
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ [BestFitMapping(false, ThrowOnUnmappableChar = true)]
+ public class LPStrTestClass
+ {
+ [MarshalAs(UnmanagedType.LPStr)]
+ public String str;
+ }
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
+ public static extern bool LPStrBuffer_In_String([In][MarshalAs(UnmanagedType.LPStr)]String s);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
+ public static extern bool LPStrBuffer_InByRef_String([In][MarshalAs(UnmanagedType.LPStr)]ref String s);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
+ public static extern bool LPStrBuffer_InOutByRef_String([In, Out][MarshalAs(UnmanagedType.LPStr)]ref String s);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
+ public static extern bool LPStrBuffer_In_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]StringBuilder s);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
+ public static extern bool LPStrBuffer_InByRef_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
+ public static extern bool LPStrBuffer_InOutByRef_StringBuilder([In, Out][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
+ public static extern bool LPStrBuffer_In_Struct_String([In][MarshalAs(UnmanagedType.Struct)]LPStrTestStruct strStruct);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
+ public static extern bool LPStrBuffer_InByRef_Struct_String([In][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
+ public static extern bool LPStrBuffer_InOutByRef_Struct_String([In, Out][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
+ public static extern bool LPStrBuffer_In_Array_String([In][MarshalAs(UnmanagedType.LPArray)]String[] strArray);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
+ public static extern bool LPStrBuffer_InByRef_Array_String([In][MarshalAs(UnmanagedType.LPArray)]ref String[] strArray);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
+ public static extern bool LPStrBuffer_InOutByRef_Array_String([In, Out][MarshalAs(UnmanagedType.LPArray)]ref String[] Array);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
+ public static extern bool LPStrBuffer_In_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]LPStrTestClass strClass);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
+ public static extern bool LPStrBuffer_InByRef_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
+ public static extern bool LPStrBuffer_InOutByRef_Class_String([In, Out][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
+ public static extern bool LPStrBuffer_In_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]LPStrTestStruct[] structArray);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
+ public static extern bool LPStrBuffer_InByRef_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
+ public static extern bool LPStrBuffer_InOutByRef_Array_Struct([In, Out][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
+
+ private static LPStrTestStruct GetInvalidStruct() => new LPStrTestStruct() { str = InvalidString };
+ private static LPStrTestStruct GetUnmappableStruct() => new LPStrTestStruct() { str = UnmappableString };
+ private static LPStrTestStruct GetValidStruct() => new LPStrTestStruct() { str = ValidString };
+
+ public static unsafe void RunTest()
+ {
+ Console.WriteLine(" -- Validate P/Invokes: BestFitMapping=false, ThrowOnUnmappableChar=true");
+
+ bool bestFitMapping = false;
+ bool throwOnUnmappableChar = true;
+
+ Test.ValidateString(
+ bestFitMapping,
+ throwOnUnmappableChar,
+ new Test.Functions<string>(
+ &LPStrBuffer_In_String,
+ &LPStrBuffer_InByRef_String,
+ &LPStrBuffer_InOutByRef_String));
+
+ Test.ValidateStringBuilder(
+ bestFitMapping,
+ throwOnUnmappableChar,
+ new Test.Functions<StringBuilder>(
+ &LPStrBuffer_In_StringBuilder,
+ &LPStrBuffer_InByRef_StringBuilder,
+ &LPStrBuffer_InOutByRef_StringBuilder));
+
+ Test.ValidateStringArray(
+ bestFitMapping,
+ throwOnUnmappableChar,
+ new Test.Functions<string[]>(
+ &LPStrBuffer_In_Array_String,
+ &LPStrBuffer_InByRef_Array_String,
+ &LPStrBuffer_InOutByRef_Array_String));
+
+ Test.Validate(
+ bestFitMapping,
+ throwOnUnmappableChar,
+ new Test.Functions<LPStrTestStruct>(
+ &LPStrBuffer_In_Struct_String,
+ &LPStrBuffer_InByRef_Struct_String,
+ &LPStrBuffer_InOutByRef_Struct_String),
+ new Test.DataContext<LPStrTestStruct, string>(
+ GetInvalidStruct(),
+ GetUnmappableStruct(),
+ GetValidStruct(),
+ (LPStrTestStruct s) => s.str));
+
+ Test.Validate(
+ bestFitMapping,
+ throwOnUnmappableChar,
+ new Test.Functions<LPStrTestClass>(
+ &LPStrBuffer_In_Class_String,
+ &LPStrBuffer_InByRef_Class_String,
+ &LPStrBuffer_InOutByRef_Class_String),
+ new Test.DataContext<LPStrTestClass, string>(
+ new LPStrTestClass() { str = InvalidString },
+ new LPStrTestClass() { str = UnmappableString },
+ new LPStrTestClass() { str = ValidString },
+ (LPStrTestClass s) => s.str));
+
+ Test.Validate(
+ bestFitMapping,
+ throwOnUnmappableChar,
+ new Test.Functions<LPStrTestStruct[]>(
+ &LPStrBuffer_In_Array_Struct,
+ &LPStrBuffer_InByRef_Array_Struct,
+ &LPStrBuffer_InOutByRef_Array_Struct),
+ new Test.DataContext<LPStrTestStruct[], string>(
+ new LPStrTestStruct[] { GetInvalidStruct(), GetInvalidStruct() },
+ new LPStrTestStruct[] { GetUnmappableStruct(), GetUnmappableStruct() },
+ new LPStrTestStruct[] { GetValidStruct(), GetValidStruct() },
+ (LPStrTestStruct[] s) => s[0].str));
+ }
+}
--- /dev/null
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System;
+using System.Text;
+using System.Runtime.InteropServices;
+
+using static TestData;
+
+namespace LPStr;
+
+public class PInvoke_True_False
+{
+ [StructLayout(LayoutKind.Sequential)]
+ [BestFitMapping(true, ThrowOnUnmappableChar = false)]
+ public struct LPStrTestStruct
+ {
+ [MarshalAs(UnmanagedType.LPStr)]
+ public String str;
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ [BestFitMapping(true, ThrowOnUnmappableChar = false)]
+ public class LPStrTestClass
+ {
+ [MarshalAs(UnmanagedType.LPStr)]
+ public String str;
+ }
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
+ public static extern bool LPStrBuffer_In_String([In][MarshalAs(UnmanagedType.LPStr)]String s);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
+ public static extern bool LPStrBuffer_InByRef_String([In][MarshalAs(UnmanagedType.LPStr)]ref String s);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
+ public static extern bool LPStrBuffer_InOutByRef_String([In, Out][MarshalAs(UnmanagedType.LPStr)]ref String s);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
+ public static extern bool LPStrBuffer_In_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]StringBuilder s);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
+ public static extern bool LPStrBuffer_InByRef_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
+ public static extern bool LPStrBuffer_InOutByRef_StringBuilder([In, Out][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
+ public static extern bool LPStrBuffer_In_Struct_String([In][MarshalAs(UnmanagedType.Struct)]LPStrTestStruct strStruct);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
+ public static extern bool LPStrBuffer_InByRef_Struct_String([In][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
+ public static extern bool LPStrBuffer_InOutByRef_Struct_String([In, Out][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
+ public static extern bool LPStrBuffer_In_Array_String([In][MarshalAs(UnmanagedType.LPArray)]String[] strArray);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
+ public static extern bool LPStrBuffer_InByRef_Array_String([In][MarshalAs(UnmanagedType.LPArray)]ref String[] strArray);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
+ public static extern bool LPStrBuffer_InOutByRef_Array_String([In, Out][MarshalAs(UnmanagedType.LPArray)]ref String[] Array);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
+ public static extern bool LPStrBuffer_In_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]LPStrTestClass strClass);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
+ public static extern bool LPStrBuffer_InByRef_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
+ public static extern bool LPStrBuffer_InOutByRef_Class_String([In, Out][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
+ public static extern bool LPStrBuffer_In_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]LPStrTestStruct[] structArray);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
+ public static extern bool LPStrBuffer_InByRef_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
+ public static extern bool LPStrBuffer_InOutByRef_Array_Struct([In, Out][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
+
+ private static LPStrTestStruct GetInvalidStruct() => new LPStrTestStruct() { str = InvalidString };
+ private static LPStrTestStruct GetUnmappableStruct() => new LPStrTestStruct() { str = UnmappableString };
+ private static LPStrTestStruct GetValidStruct() => new LPStrTestStruct() { str = ValidString };
+ public static unsafe void RunTest()
+ {
+ Console.WriteLine(" -- Validate P/Invokes: BestFitMapping=true, ThrowOnUnmappableChar=false");
+
+ bool bestFitMapping = true;
+ bool throwOnUnmappableChar = false;
+
+ Test.ValidateString(
+ bestFitMapping,
+ throwOnUnmappableChar,
+ new Test.Functions<string>(
+ &LPStrBuffer_In_String,
+ &LPStrBuffer_InByRef_String,
+ &LPStrBuffer_InOutByRef_String));
+
+ Test.ValidateStringBuilder(
+ bestFitMapping,
+ throwOnUnmappableChar,
+ new Test.Functions<StringBuilder>(
+ &LPStrBuffer_In_StringBuilder,
+ &LPStrBuffer_InByRef_StringBuilder,
+ &LPStrBuffer_InOutByRef_StringBuilder));
+
+ Test.ValidateStringArray(
+ bestFitMapping,
+ throwOnUnmappableChar,
+ new Test.Functions<string[]>(
+ &LPStrBuffer_In_Array_String,
+ &LPStrBuffer_InByRef_Array_String,
+ &LPStrBuffer_InOutByRef_Array_String));
+
+ Test.Validate(
+ bestFitMapping,
+ throwOnUnmappableChar,
+ new Test.Functions<LPStrTestStruct>(
+ &LPStrBuffer_In_Struct_String,
+ &LPStrBuffer_InByRef_Struct_String,
+ &LPStrBuffer_InOutByRef_Struct_String),
+ new Test.DataContext<LPStrTestStruct, string>(
+ GetInvalidStruct(),
+ GetUnmappableStruct(),
+ GetValidStruct(),
+ (LPStrTestStruct s) => s.str));
+
+ Test.Validate(
+ bestFitMapping,
+ throwOnUnmappableChar,
+ new Test.Functions<LPStrTestClass>(
+ &LPStrBuffer_In_Class_String,
+ &LPStrBuffer_InByRef_Class_String,
+ &LPStrBuffer_InOutByRef_Class_String),
+ new Test.DataContext<LPStrTestClass, string>(
+ new LPStrTestClass() { str = InvalidString },
+ new LPStrTestClass() { str = UnmappableString },
+ new LPStrTestClass() { str = ValidString },
+ (LPStrTestClass s) => s.str));
+
+ Test.Validate(
+ bestFitMapping,
+ throwOnUnmappableChar,
+ new Test.Functions<LPStrTestStruct[]>(
+ &LPStrBuffer_In_Array_Struct,
+ &LPStrBuffer_InByRef_Array_Struct,
+ &LPStrBuffer_InOutByRef_Array_Struct),
+ new Test.DataContext<LPStrTestStruct[], string>(
+ new LPStrTestStruct[] { GetInvalidStruct(), GetInvalidStruct() },
+ new LPStrTestStruct[] { GetUnmappableStruct(), GetUnmappableStruct() },
+ new LPStrTestStruct[] { GetValidStruct(), GetValidStruct() },
+ (LPStrTestStruct[] s) => s[0].str));
+ }
+}
--- /dev/null
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System;
+using System.Text;
+using System.Runtime.InteropServices;
+
+using static TestData;
+
+namespace LPStr;
+
+public class PInvoke_True_True
+{
+ [StructLayout(LayoutKind.Sequential)]
+ [BestFitMapping(true, ThrowOnUnmappableChar = true)]
+ public struct LPStrTestStruct
+ {
+ [MarshalAs(UnmanagedType.LPStr)]
+ public String str;
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ [BestFitMapping(true, ThrowOnUnmappableChar = true)]
+ public class LPStrTestClass
+ {
+ [MarshalAs(UnmanagedType.LPStr)]
+ public String str;
+ }
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
+ public static extern bool LPStrBuffer_In_String([In][MarshalAs(UnmanagedType.LPStr)]String s);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
+ public static extern bool LPStrBuffer_InByRef_String([In][MarshalAs(UnmanagedType.LPStr)]ref String s);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
+ public static extern bool LPStrBuffer_InOutByRef_String([In, Out][MarshalAs(UnmanagedType.LPStr)]ref String s);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
+ public static extern bool LPStrBuffer_In_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]StringBuilder s);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
+ public static extern bool LPStrBuffer_InByRef_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
+ public static extern bool LPStrBuffer_InOutByRef_StringBuilder([In, Out][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
+ public static extern bool LPStrBuffer_In_Struct_String([In][MarshalAs(UnmanagedType.Struct)]LPStrTestStruct strStruct);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
+ public static extern bool LPStrBuffer_InByRef_Struct_String([In][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
+ public static extern bool LPStrBuffer_InOutByRef_Struct_String([In, Out][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
+ public static extern bool LPStrBuffer_In_Array_String([In][MarshalAs(UnmanagedType.LPArray)]String[] strArray);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
+ public static extern bool LPStrBuffer_InByRef_Array_String([In][MarshalAs(UnmanagedType.LPArray)]ref String[] strArray);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
+ public static extern bool LPStrBuffer_InOutByRef_Array_String([In, Out][MarshalAs(UnmanagedType.LPArray)]ref String[] Array);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
+ public static extern bool LPStrBuffer_In_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]LPStrTestClass strClass);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
+ public static extern bool LPStrBuffer_InByRef_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
+ public static extern bool LPStrBuffer_InOutByRef_Class_String([In, Out][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
+ public static extern bool LPStrBuffer_In_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]LPStrTestStruct[] structArray);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
+ public static extern bool LPStrBuffer_InByRef_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
+
+ [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
+ public static extern bool LPStrBuffer_InOutByRef_Array_Struct([In, Out][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
+
+ private static LPStrTestStruct GetInvalidStruct() => new LPStrTestStruct() { str = InvalidString };
+ private static LPStrTestStruct GetUnmappableStruct() => new LPStrTestStruct() { str = UnmappableString };
+ private static LPStrTestStruct GetValidStruct() => new LPStrTestStruct() { str = ValidString };
+
+ public static unsafe void RunTest()
+ {
+ Console.WriteLine(" -- Validate P/Invokes: BestFitMapping=true, ThrowOnUnmappableChar=true");
+
+ bool bestFitMapping = true;
+ bool throwOnUnmappableChar = true;
+
+ Test.ValidateString(
+ bestFitMapping,
+ throwOnUnmappableChar,
+ new Test.Functions<string>(
+ &LPStrBuffer_In_String,
+ &LPStrBuffer_InByRef_String,
+ &LPStrBuffer_InOutByRef_String));
+
+ Test.ValidateStringBuilder(
+ bestFitMapping,
+ throwOnUnmappableChar,
+ new Test.Functions<StringBuilder>(
+ &LPStrBuffer_In_StringBuilder,
+ &LPStrBuffer_InByRef_StringBuilder,
+ &LPStrBuffer_InOutByRef_StringBuilder));
+
+ Test.ValidateStringArray(
+ bestFitMapping,
+ throwOnUnmappableChar,
+ new Test.Functions<string[]>(
+ &LPStrBuffer_In_Array_String,
+ &LPStrBuffer_InByRef_Array_String,
+ &LPStrBuffer_InOutByRef_Array_String));
+
+ Test.Validate(
+ bestFitMapping,
+ throwOnUnmappableChar,
+ new Test.Functions<LPStrTestStruct>(
+ &LPStrBuffer_In_Struct_String,
+ &LPStrBuffer_InByRef_Struct_String,
+ &LPStrBuffer_InOutByRef_Struct_String),
+ new Test.DataContext<LPStrTestStruct, string>(
+ GetInvalidStruct(),
+ GetUnmappableStruct(),
+ GetValidStruct(),
+ (LPStrTestStruct s) => s.str));
+
+ Test.Validate(
+ bestFitMapping,
+ throwOnUnmappableChar,
+ new Test.Functions<LPStrTestClass>(
+ &LPStrBuffer_In_Class_String,
+ &LPStrBuffer_InByRef_Class_String,
+ &LPStrBuffer_InOutByRef_Class_String),
+ new Test.DataContext<LPStrTestClass, string>(
+ new LPStrTestClass() { str = InvalidString },
+ new LPStrTestClass() { str = UnmappableString },
+ new LPStrTestClass() { str = ValidString },
+ (LPStrTestClass s) => s.str));
+
+ Test.Validate(
+ bestFitMapping,
+ throwOnUnmappableChar,
+ new Test.Functions<LPStrTestStruct[]>(
+ &LPStrBuffer_In_Array_Struct,
+ &LPStrBuffer_InByRef_Array_Struct,
+ &LPStrBuffer_InOutByRef_Array_Struct),
+ new Test.DataContext<LPStrTestStruct[], string>(
+ new LPStrTestStruct[] { GetInvalidStruct(), GetInvalidStruct() },
+ new LPStrTestStruct[] { GetUnmappableStruct(), GetUnmappableStruct() },
+ new LPStrTestStruct[] { GetValidStruct(), GetValidStruct() },
+ (LPStrTestStruct[] s) => s[0].str));
+ }
+}
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Text;
-using System.Runtime.InteropServices;
-using Xunit;
-
-[StructLayout(LayoutKind.Sequential)]
-[BestFitMapping(false, ThrowOnUnmappableChar = false)]
-public struct LPStrTestStruct
-{
- [MarshalAs(UnmanagedType.LPStr)]
- public String str;
-}
-
-[StructLayout(LayoutKind.Sequential)]
-[BestFitMapping(false, ThrowOnUnmappableChar = false)]
-public class LPStrTestClass
-{
- [MarshalAs(UnmanagedType.LPStr)]
- public String str;
-}
-
-public class BFM_LPStrMarshaler
-{
-#pragma warning disable 618
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_String([In][MarshalAs(UnmanagedType.LPStr)]String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_String([In][MarshalAs(UnmanagedType.LPStr)]ref String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_String([In, Out][MarshalAs(UnmanagedType.LPStr)]ref String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_StringBuilder([In, Out][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_Struct_String([In][MarshalAs(UnmanagedType.Struct)]LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_Struct_String([In][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_Struct_String([In, Out][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_Array_String([In][MarshalAs(UnmanagedType.LPArray)]String[] strArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_Array_String([In][MarshalAs(UnmanagedType.LPArray)]ref String[] strArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_Array_String([In, Out][MarshalAs(UnmanagedType.LPArray)]ref String[] Array);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_Class_String([In, Out][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]LPStrTestStruct[] structArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_Array_Struct([In, Out][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
-#pragma warning restore 618
-
- static String GetValidString()
- {
- return "This is the initial test string.";
- }
-
- static String GetInvalidString()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl.ToString();
- }
-
- static StringBuilder GetValidStringBuilder()
- {
- StringBuilder sb = new StringBuilder("test string.");
- return sb;
- }
-
- static StringBuilder GetInvalidStringBuilder()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl;
- }
-
- static void testLPStrBufferString()
- {
- Assert.True(LPStrBuffer_In_String(GetInvalidString()));
-
- Assert.True(LPStrBuffer_In_String(GetValidString()));
-
- String cTemp = GetInvalidString();
- Assert.True(LPStrBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- Assert.True(LPStrBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetInvalidString();
- String cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_String(ref cTemp));
- Assert.NotEqual(cTempClone, cTemp);
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
- }
-
- static void testLPStrBufferStringBuilder()
- {
- StringBuilder sb = GetInvalidStringBuilder();
- Assert.True(LPStrBuffer_In_StringBuilder(sb));
-
- Assert.True(LPStrBuffer_In_StringBuilder(GetValidStringBuilder()));
-
- StringBuilder cTemp = GetInvalidStringBuilder();
- Assert.True(LPStrBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- Assert.True(LPStrBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetInvalidStringBuilder();
- StringBuilder cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.NotEqual(cTempClone.ToString(), cTemp.ToString());
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
- }
-
- static LPStrTestStruct GetInvalidStruct()
- {
- LPStrTestStruct inValidStruct = new LPStrTestStruct();
- inValidStruct.str = GetInvalidString();
-
- return inValidStruct;
- }
-
-
- static LPStrTestStruct GetValidStruct()
- {
- LPStrTestStruct validStruct = new LPStrTestStruct();
- validStruct.str = GetValidString();
-
- return validStruct;
- }
-
- static String[] GetValidArray()
- {
- String[] s = new String[3];
-
- s[0] = GetValidString();
- s[1] = GetValidString();
- s[2] = GetValidString();
-
- return s;
- }
-
- static String[] GetInvalidArray()
- {
- String[] s = new String[3];
-
- s[0] = GetInvalidString();
- s[1] = GetInvalidString();
- s[2] = GetInvalidString();
-
- return s;
- }
-
- static void testLPStrBufferStruct()
- {
- LPStrTestStruct lpss = GetInvalidStruct();
- Assert.True(LPStrBuffer_In_Struct_String(lpss));
-
- Assert.True(LPStrBuffer_In_Struct_String(GetValidStruct()));
-
- LPStrTestStruct cTemp = GetInvalidStruct();
- Assert.True(LPStrBuffer_InByRef_Struct_String(ref cTemp));
-
- cTemp = GetValidStruct();
- Assert.True(LPStrBuffer_InByRef_Struct_String(ref cTemp));
-
- cTemp = GetInvalidStruct();
- LPStrTestStruct cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_Struct_String(ref cTemp));
- Assert.NotEqual(cTempClone.str, cTemp.str);
-
- cTemp = GetValidStruct();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_Struct_String(ref cTemp));
- Assert.Equal(cTempClone.str, cTemp.str);
- }
-
- static void testLPStrBufferClass()
- {
- LPStrTestClass lpss = new LPStrTestClass();
- lpss.str = GetInvalidString();
- Assert.True(LPStrBuffer_In_Class_String(lpss));
-
- lpss.str = GetValidString();
- Assert.True(LPStrBuffer_In_Class_String(lpss));
-
- LPStrTestClass cTemp = new LPStrTestClass();
- cTemp.str = GetInvalidString();
- Assert.True(LPStrBuffer_InByRef_Class_String(ref cTemp));
-
- cTemp.str = GetValidString();
- Assert.True(LPStrBuffer_InByRef_Class_String(ref cTemp));
-
- cTemp.str = GetInvalidString();
- LPStrTestClass cTempClone = new LPStrTestClass();
- cTempClone.str = cTemp.str;
- Assert.True(LPStrBuffer_InOutByRef_Class_String(ref cTemp));
- Assert.NotEqual(cTempClone.str, cTemp.str);
-
- cTemp.str = GetValidString();
- cTempClone.str = cTemp.str;
- Assert.True(LPStrBuffer_InOutByRef_Class_String(ref cTemp));
- Assert.Equal(cTempClone.str, cTemp.str);
- }
-
- static void testLPStrBufferArray()
- {
- String[] lpss = GetInvalidArray();
- Assert.True(LPStrBuffer_In_Array_String(lpss));
-
- Assert.True(LPStrBuffer_In_Array_String(GetValidArray()));
-
- String[] cTemp = GetInvalidArray();
- Assert.True(LPStrBuffer_InByRef_Array_String(ref cTemp));
-
- cTemp = GetValidArray();
- Assert.True(LPStrBuffer_InByRef_Array_String(ref cTemp));
-
- cTemp = GetInvalidArray();
- String[] cTempClone = new String[3];
- cTempClone[0] = cTemp[0];
- Assert.True(LPStrBuffer_InOutByRef_Array_String(ref cTemp));
- Assert.NotEqual(cTempClone[0], cTemp[0]);
-
- cTemp = GetValidArray();
- cTempClone[0] = cTemp[0];
- Assert.True(LPStrBuffer_InOutByRef_Array_String(ref cTemp));
- Assert.Equal(cTempClone[0], cTemp[0]);
- }
-
- static void testLPStrBufferArrayOfStructs()
- {
- LPStrTestStruct[] lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.True(LPStrBuffer_In_Array_Struct(lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_In_Array_Struct(lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.True(LPStrBuffer_InByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_InByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- LPStrTestStruct[] lpssClone = new LPStrTestStruct[2];
- lpssClone[0].str = lpss[0].str;
- lpssClone[1].str = lpss[1].str;
- Assert.True(LPStrBuffer_InOutByRef_Array_Struct(ref lpss));
- Assert.NotEqual(lpss[0].str, lpssClone[0].str);
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- lpssClone = new LPStrTestStruct[2];
- lpssClone[0].str = lpss[0].str;
- lpssClone[1].str = lpss[1].str;
- Assert.True(LPStrBuffer_InOutByRef_Array_Struct(ref lpss));
- Assert.Equal(lpss[0].str, lpssClone[0].str);
- }
-
- static void runTest()
- {
- testLPStrBufferString();
- testLPStrBufferStringBuilder();
- testLPStrBufferStruct();
- testLPStrBufferArray();
- testLPStrBufferClass();
- testLPStrBufferArrayOfStructs();
- }
-
- public static int Main()
- {
- if (System.Globalization.CultureInfo.CurrentCulture.Name != "en-US")
- {
- Console.WriteLine("Non-US English platforms are not supported.\nPassing without running tests");
-
- Console.WriteLine("--- Success");
- return 100;
- }
-
- try
- {
- runTest();
- return 100;
- } catch (Exception e){
- Console.WriteLine($"Test Failure: {e}");
- return 101;
- }
- }
-}
+++ /dev/null
-<Project Sdk="Microsoft.NET.Sdk">
- <PropertyGroup>
- <OutputType>Exe</OutputType>
- <!-- Test unsupported outside of windows -->
- <CLRTestTargetUnsupported Condition="'$(TargetsWindows)' != 'true'">true</CLRTestTargetUnsupported>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="$(MSBuildProjectName).cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CMakeLists.txt" />
- </ItemGroup>
-</Project>
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Text;
-using System.Runtime.InteropServices;
-using Xunit;
-
-[StructLayout(LayoutKind.Sequential)]
-[BestFitMapping(false, ThrowOnUnmappableChar = true)]
-public struct LPStrTestStruct
-{
- [MarshalAs(UnmanagedType.LPStr)]
- public String str;
-}
-
-[StructLayout(LayoutKind.Sequential)]
-[BestFitMapping(false, ThrowOnUnmappableChar = true)]
-public class LPStrTestClass
-{
- [MarshalAs(UnmanagedType.LPStr)]
- public String str;
-}
-
-public class BFM_LPStrMarshaler
-{
-#pragma warning disable 618
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_String([In][MarshalAs(UnmanagedType.LPStr)]String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_String([In][MarshalAs(UnmanagedType.LPStr)]ref String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_String([In, Out][MarshalAs(UnmanagedType.LPStr)]ref String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_StringBuilder([In, Out][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_Struct_String([In][MarshalAs(UnmanagedType.Struct)]LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_Struct_String([In][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_Struct_String([In, Out][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_Array_String([In][MarshalAs(UnmanagedType.LPArray)]String[] strArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_Array_String([In][MarshalAs(UnmanagedType.LPArray)]ref String[] strArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_Array_String([In, Out][MarshalAs(UnmanagedType.LPArray)]ref String[] Array);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_Class_String([In, Out][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]LPStrTestStruct[] structArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_Array_Struct([In, Out][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
-#pragma warning restore 618
-
- static String GetValidString()
- {
- return "This is the initial test string.";
- }
-
- static String GetInvalidString()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl.ToString();
- }
-
- static StringBuilder GetValidStringBuilder()
- {
- StringBuilder sb = new StringBuilder("test string.");
- return sb;
- }
-
- static StringBuilder GetInvalidStringBuilder()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl;
- }
-
- static void testLPStrBufferString()
- {
- Assert.Throws<ArgumentException>(() => LPStrBuffer_In_String(GetInvalidString()));
-
- Assert.True(LPStrBuffer_In_String(GetValidString()));
-
- String cTemp = GetInvalidString();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- Assert.True(LPStrBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetInvalidString();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InOutByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- String cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
- }
-
- static void testLPStrBufferStringBuilder()
- {
- Assert.Throws<ArgumentException>(() => LPStrBuffer_In_StringBuilder(GetInvalidStringBuilder()));
-
- Assert.True(LPStrBuffer_In_StringBuilder(GetValidStringBuilder()));
-
- StringBuilder cTemp = GetInvalidStringBuilder();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- Assert.True(LPStrBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetInvalidStringBuilder();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InOutByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- StringBuilder cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
- }
-
- static LPStrTestStruct GetInvalidStruct()
- {
- LPStrTestStruct inValidStruct = new LPStrTestStruct();
- inValidStruct.str = GetInvalidString();
-
- return inValidStruct;
- }
-
- static LPStrTestStruct GetValidStruct()
- {
- LPStrTestStruct validStruct = new LPStrTestStruct();
- validStruct.str = GetValidString();
-
- return validStruct;
- }
-
- static String[] GetValidArray()
- {
- String[] s = new String[3];
-
- s[0] = GetValidString();
- s[1] = GetValidString();
- s[2] = GetValidString();
-
- return s;
- }
-
- static String[] GetInvalidArray()
- {
- String[] s = new String[3];
-
- s[0] = GetInvalidString();
- s[1] = GetInvalidString();
- s[2] = GetInvalidString();
-
- return s;
- }
-
- static void testLPStrBufferStruct()
- {
- Assert.Throws<ArgumentException>(() => LPStrBuffer_In_Struct_String(GetInvalidStruct()));
-
- Assert.True(LPStrBuffer_In_Struct_String(GetValidStruct()));
-
- LPStrTestStruct cTemp = GetInvalidStruct();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InByRef_Struct_String(ref cTemp));
-
- cTemp = GetValidStruct();
- Assert.True(LPStrBuffer_InByRef_Struct_String(ref cTemp));
-
- cTemp = GetInvalidStruct();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InOutByRef_Struct_String(ref cTemp));
-
- cTemp = GetValidStruct();
- LPStrTestStruct cTempClone = new LPStrTestStruct();
- cTempClone.str = cTemp.str;
- Assert.True(LPStrBuffer_InOutByRef_Struct_String(ref cTemp));
- Assert.Equal(cTempClone.str, cTemp.str);
- }
-
- static void testLPStrBufferClass()
- {
- LPStrTestClass cTest = new LPStrTestClass();
- cTest.str = GetInvalidString();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_In_Class_String(cTest));
-
- cTest.str = GetValidString();
- Assert.True(LPStrBuffer_In_Class_String(cTest));
-
- LPStrTestClass cTemp = new LPStrTestClass();
- cTemp.str = GetInvalidString();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InByRef_Class_String(ref cTemp));
-
- cTemp.str = GetValidString();
- Assert.True(LPStrBuffer_InByRef_Class_String(ref cTemp));
-
- cTemp.str = GetInvalidString();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InOutByRef_Class_String(ref cTemp));
-
- cTemp.str = GetValidString();
- LPStrTestClass cTempClone = new LPStrTestClass();
- cTempClone.str = cTemp.str;
- Assert.True(LPStrBuffer_InOutByRef_Class_String(ref cTemp));
- Assert.Equal(cTempClone.str, cTemp.str);
- }
-
- static void testLPStrBufferArray()
- {
- String[] cTest = null;
- cTest = GetInvalidArray();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_In_Array_String(cTest));
-
- cTest = GetValidArray();
- Assert.True(LPStrBuffer_In_Array_String(cTest));
-
- String[] cTemp = GetInvalidArray();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InByRef_Array_String(ref cTemp));
-
- cTemp = GetValidArray();
- Assert.True(LPStrBuffer_InByRef_Array_String(ref cTemp));
-
- cTemp = GetInvalidArray();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InOutByRef_Array_String(ref cTemp));
-
- cTemp = GetValidArray();
- String[] cTempClone = new String[3];
- cTempClone[0] = cTemp[0];
- Assert.True(LPStrBuffer_InOutByRef_Array_String(ref cTemp));
- Assert.Equal(cTempClone[0], cTemp[0]);
- }
-
- static void testLPStrBufferArrayOfStructs()
- {
- LPStrTestStruct[] lpss = null;
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_In_Array_Struct(lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_In_Array_Struct(lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_InByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.Throws<ArgumentException>(() => LPStrBuffer_InOutByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- LPStrTestStruct[] lpssClone = new LPStrTestStruct[2];
- lpssClone[0].str = lpss[0].str;
- lpssClone[1].str = lpss[1].str;
- Assert.True(LPStrBuffer_InOutByRef_Array_Struct(ref lpss));
- Assert.Equal(lpss[0].str, lpssClone[0].str);
- }
-
- static void runTest()
- {
- testLPStrBufferString();
- testLPStrBufferStringBuilder();
- testLPStrBufferStruct();
- testLPStrBufferArray();
- testLPStrBufferClass();
- testLPStrBufferArrayOfStructs();
- }
-
- public static int Main()
- {
- if (System.Globalization.CultureInfo.CurrentCulture.Name != "en-US")
- {
- Console.WriteLine("Non-US English platforms are not supported.\nPassing without running tests");
-
- Console.WriteLine("--- Success");
- return 100;
- }
-
- try
- {
- runTest();
- return 100;
- } catch (Exception e){
- Console.WriteLine($"Test Failure: {e}");
- return 101;
- }
- }
-}
+++ /dev/null
-<Project Sdk="Microsoft.NET.Sdk">
- <PropertyGroup>
- <OutputType>Exe</OutputType>
- <!-- Test unsupported outside of windows -->
- <CLRTestTargetUnsupported Condition="'$(TargetsWindows)' != 'true'">true</CLRTestTargetUnsupported>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="$(MSBuildProjectName).cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CMakeLists.txt" />
- </ItemGroup>
-</Project>
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Text;
-using System.Runtime.InteropServices;
-using Xunit;
-
-[StructLayout(LayoutKind.Sequential)]
-[BestFitMapping(true, ThrowOnUnmappableChar = false)]
-public struct LPStrTestStruct
-{
- [MarshalAs(UnmanagedType.LPStr)]
- public String str;
-}
-
-[StructLayout(LayoutKind.Sequential)]
-[BestFitMapping(true, ThrowOnUnmappableChar = false)]
-public class LPStrTestClass
-{
- [MarshalAs(UnmanagedType.LPStr)]
- public String str;
-}
-
-public class BFM_LPStrMarshaler
-{
-#pragma warning disable 618
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_String([In][MarshalAs(UnmanagedType.LPStr)]String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_String([In][MarshalAs(UnmanagedType.LPStr)]ref String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_String([In, Out][MarshalAs(UnmanagedType.LPStr)]ref String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_StringBuilder([In, Out][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_Struct_String([In][MarshalAs(UnmanagedType.Struct)]LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_Struct_String([In][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_Struct_String([In, Out][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_Array_String([In][MarshalAs(UnmanagedType.LPArray)]String[] strArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_Array_String([In][MarshalAs(UnmanagedType.LPArray)]ref String[] strArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_Array_String([In, Out][MarshalAs(UnmanagedType.LPArray)]ref String[] Array);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_Class_String([In, Out][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]LPStrTestStruct[] structArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_Array_Struct([In, Out][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
-#pragma warning restore 618
-
- static String GetValidString()
- {
- return "This is the initial test string.";
- }
-
- static String GetInvalidString()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl.ToString();
- }
-
- static StringBuilder GetValidStringBuilder()
- {
- StringBuilder sb = new StringBuilder("test string.");
- return sb;
- }
-
- static StringBuilder GetInvalidStringBuilder()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- sbl.Append('乀');
- return sbl;
- }
-
- static void testLPStrBufferString()
- {
- Assert.True(LPStrBuffer_In_String(GetInvalidString()));
-
- Assert.True(LPStrBuffer_In_String(GetValidString()));
-
- String cTemp = GetInvalidString();
- String cTempClone = cTemp;
- Assert.True(LPStrBuffer_InByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
-
- cTemp = GetInvalidString();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_String(ref cTemp));
- Assert.NotEqual(cTempClone, cTemp);
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_String(ref cTemp));
- Assert.Equal(cTempClone, cTemp);
- }
-
- static void testLPStrBufferStringBuilder()
- {
- Assert.True(LPStrBuffer_In_StringBuilder(GetInvalidStringBuilder()));
-
- Assert.True(LPStrBuffer_In_StringBuilder(GetValidStringBuilder()));
-
- StringBuilder cTemp = GetInvalidStringBuilder();
- StringBuilder cTempClone = cTemp;
- Assert.True(LPStrBuffer_InByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
-
- cTemp = GetInvalidStringBuilder();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.NotEqual(cTempClone.ToString(), cTemp.ToString());
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_StringBuilder(ref cTemp));
- Assert.Equal(cTempClone.ToString(), cTemp.ToString());
- }
-
- static LPStrTestStruct GetInvalidStruct()
- {
- LPStrTestStruct inValidStruct = new LPStrTestStruct();
- inValidStruct.str = GetInvalidString();
-
- return inValidStruct;
- }
-
-
- static LPStrTestStruct GetValidStruct()
- {
- LPStrTestStruct validStruct = new LPStrTestStruct();
- validStruct.str = GetValidString();
-
- return validStruct;
- }
-
- static void testLPStrBufferStruct()
- {
- Assert.True(LPStrBuffer_In_Struct_String(GetInvalidStruct()));
-
- Assert.True(LPStrBuffer_In_Struct_String(GetValidStruct()));
-
- LPStrTestStruct lpss = GetInvalidStruct();
- Assert.True(LPStrBuffer_InByRef_Struct_String(ref lpss));
-
- lpss = GetValidStruct();
- Assert.True(LPStrBuffer_InByRef_Struct_String(ref lpss));
-
- lpss = GetInvalidStruct();
- Assert.True(LPStrBuffer_InOutByRef_Struct_String(ref lpss));
-
- lpss = GetValidStruct();
- Assert.True(LPStrBuffer_InOutByRef_Struct_String(ref lpss));
- }
-
- static String[] GetValidArray()
- {
- String[] s = new String[3];
-
- s[0] = GetValidString();
- s[1] = GetValidString();
- s[2] = GetValidString();
-
- return s;
- }
-
- static String[] GetInvalidArray()
- {
- String[] s = new String[3];
-
- s[0] = GetInvalidString();
- s[1] = GetInvalidString();
- s[2] = GetInvalidString();
-
- return s;
- }
-
- static void testLPStrBufferArray()
- {
- String[] s = GetInvalidArray();
- Assert.True(LPStrBuffer_In_Array_String(s));
-
- s = GetValidArray();
- Assert.True(LPStrBuffer_In_Array_String(s));
-
- s = GetInvalidArray();
- Assert.True(LPStrBuffer_InByRef_Array_String(ref s));
-
- s = GetValidArray();
- Assert.True(LPStrBuffer_InByRef_Array_String(ref s));
-
- s = GetInvalidArray();
- Assert.True(LPStrBuffer_InOutByRef_Array_String(ref s));
-
- s = GetValidArray();
- Assert.True(LPStrBuffer_InOutByRef_Array_String(ref s));
- }
-
- static void testLPStrBufferClass()
- {
- LPStrTestClass sClass = new LPStrTestClass();
- sClass.str = GetInvalidString();
- Assert.True(LPStrBuffer_In_Class_String(sClass));
-
- sClass.str = GetValidString();
- Assert.True(LPStrBuffer_In_Class_String(sClass));
-
- sClass.str = GetInvalidString();
- Assert.True(LPStrBuffer_InByRef_Class_String(ref sClass));
-
- sClass.str = GetValidString();
- Assert.True(LPStrBuffer_InByRef_Class_String(ref sClass));
-
- sClass.str = GetInvalidString();
- Assert.True(LPStrBuffer_InOutByRef_Class_String(ref sClass));
-
- sClass.str = GetValidString();
- Assert.True(LPStrBuffer_InOutByRef_Class_String(ref sClass));
- }
-
- static void testLPStrBufferArrayOfStructs()
- {
- LPStrTestStruct[] lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.True(LPStrBuffer_In_Array_Struct(lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_In_Array_Struct(lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.True(LPStrBuffer_InByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_InByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.True(LPStrBuffer_InOutByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_InOutByRef_Array_Struct(ref lpss));
- }
-
- static void runTest()
- {
- testLPStrBufferString();
- testLPStrBufferStringBuilder();
- testLPStrBufferStruct();
- testLPStrBufferArray();
- testLPStrBufferClass();
- testLPStrBufferArrayOfStructs();
- }
-
- public static int Main()
- {
- if (System.Globalization.CultureInfo.CurrentCulture.Name != "en-US")
- {
- Console.WriteLine("Non-US English platforms are not supported.\nPassing without running tests");
-
- Console.WriteLine("--- Success");
- return 100;
- }
-
- try
- {
- runTest();
- return 100;
- } catch (Exception e){
- Console.WriteLine($"Test Failure: {e}");
- return 101;
- }
- }
-}
+++ /dev/null
-<Project Sdk="Microsoft.NET.Sdk">
- <PropertyGroup>
- <OutputType>Exe</OutputType>
- <!-- Test unsupported outside of windows -->
- <CLRTestTargetUnsupported Condition="'$(TargetsWindows)' != 'true'">true</CLRTestTargetUnsupported>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="$(MSBuildProjectName).cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CMakeLists.txt" />
- </ItemGroup>
-</Project>
+++ /dev/null
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System;
-using System.Text;
-using System.Runtime.InteropServices;
-using Xunit;
-
-[StructLayout(LayoutKind.Sequential)]
-[BestFitMapping(true, ThrowOnUnmappableChar = true)]
-public struct LPStrTestStruct
-{
- [MarshalAs(UnmanagedType.LPStr)]
- public String str;
-}
-
-[StructLayout(LayoutKind.Sequential)]
-[BestFitMapping(true, ThrowOnUnmappableChar = true)]
-public class LPStrTestClass
-{
- [MarshalAs(UnmanagedType.LPStr)]
- public String str;
-}
-
-public class BFM_LPStrMarshaler
-{
-#pragma warning disable 618
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_String([In][MarshalAs(UnmanagedType.LPStr)]String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_String([In][MarshalAs(UnmanagedType.LPStr)]ref String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_String([In, Out][MarshalAs(UnmanagedType.LPStr)]ref String s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_StringBuilder([In][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_StringBuilder([In, Out][MarshalAs(UnmanagedType.LPStr)]ref StringBuilder s);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_Struct_String([In][MarshalAs(UnmanagedType.Struct)]LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_Struct_String([In][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_Struct_String([In, Out][MarshalAs(UnmanagedType.Struct)]ref LPStrTestStruct strStruct);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_Array_String([In][MarshalAs(UnmanagedType.LPArray)]String[] strArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_Array_String([In][MarshalAs(UnmanagedType.LPArray)]ref String[] strArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_Array_String([In, Out][MarshalAs(UnmanagedType.LPArray)]ref String[] Array);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_In_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InByRef_Class_String([In][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = true, ThrowOnUnmappableChar = true)]
- public static extern bool LPStrBuffer_InOutByRef_Class_String([In, Out][MarshalAs(UnmanagedType.LPStruct)]ref LPStrTestClass strClass);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_In_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]LPStrTestStruct[] structArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InByRef_Array_Struct([In][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
-
- [DllImport("LPStr_BestFitMappingNative", BestFitMapping = false, ThrowOnUnmappableChar = false)]
- public static extern bool LPStrBuffer_InOutByRef_Array_Struct([In, Out][MarshalAs(UnmanagedType.LPArray)]ref LPStrTestStruct[] structArray);
-#pragma warning restore 618
-
- static String GetValidString()
- {
- return "This is the initial test string.";
- }
-
- static String GetInvalidString()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- //sbl.Append ('乀');
- return sbl.ToString();
- }
-
- static StringBuilder GetValidStringBuilder()
- {
- StringBuilder sb = new StringBuilder("test string.");
- return sb;
- }
-
- static StringBuilder GetInvalidStringBuilder()
- {
- StringBuilder sbl = new StringBuilder();
- sbl.Append((char)0x2216);
- sbl.Append((char)0x2044);
- sbl.Append((char)0x2215);
- sbl.Append((char)0x0589);
- sbl.Append((char)0x2236);
- //sbl.Append ('乀');
- return sbl;
- }
-
- static void testLPStrBufferString()
- {
- Assert.True(LPStrBuffer_In_String(GetInvalidString()));
-
- Assert.True(LPStrBuffer_In_String(GetValidString()));
-
- String cTemp = GetInvalidString();
- String cTempClone = GetInvalidString();
- Assert.True(LPStrBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InByRef_String(ref cTemp));
-
- cTemp = GetInvalidString();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_String(ref cTemp));
-
- cTemp = GetValidString();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_String(ref cTemp));
- }
-
- static void testLPStrBufferStringBuilder()
- {
- Assert.True(LPStrBuffer_In_StringBuilder(GetInvalidStringBuilder()));
-
- Assert.True(LPStrBuffer_In_StringBuilder(GetValidStringBuilder()));
-
- StringBuilder cTemp = GetInvalidStringBuilder();
- StringBuilder cTempClone = cTemp;
- Assert.True(LPStrBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InByRef_StringBuilder(ref cTemp));
-
- cTemp = GetInvalidStringBuilder();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_StringBuilder(ref cTemp));
-
- cTemp = GetValidStringBuilder();
- cTempClone = cTemp;
- Assert.True(LPStrBuffer_InOutByRef_StringBuilder(ref cTemp));
- }
-
- static LPStrTestStruct GetInvalidStruct()
- {
- LPStrTestStruct inValidStruct = new LPStrTestStruct();
- inValidStruct.str = GetInvalidString();
-
- return inValidStruct;
- }
-
-
- static LPStrTestStruct GetValidStruct()
- {
- LPStrTestStruct validStruct = new LPStrTestStruct();
- validStruct.str = GetValidString();
-
- return validStruct;
- }
-
- static void testLPStrBufferStruct()
- {
- Assert.True(LPStrBuffer_In_Struct_String(GetInvalidStruct()));
-
- Assert.True(LPStrBuffer_In_Struct_String(GetValidStruct()));
-
- LPStrTestStruct lpss = GetInvalidStruct();
- Assert.True(LPStrBuffer_InByRef_Struct_String(ref lpss));
-
- lpss = GetValidStruct();
- Assert.True(LPStrBuffer_InByRef_Struct_String(ref lpss));
-
- lpss = GetInvalidStruct();
- Assert.True(LPStrBuffer_InOutByRef_Struct_String(ref lpss));
-
- lpss = GetValidStruct();
- Assert.True(LPStrBuffer_InOutByRef_Struct_String(ref lpss));
- }
-
- static String[] GetValidArray()
- {
- String[] s = new String[3];
-
- s[0] = GetValidString();
- s[1] = GetValidString();
- s[2] = GetValidString();
-
- return s;
- }
-
- static String[] GetInvalidArray()
- {
- String[] s = new String[3];
-
- s[0] = GetInvalidString();
- s[1] = GetInvalidString();
- s[2] = GetInvalidString();
-
- return s;
- }
-
- static void testLPStrBufferArray()
- {
- String[] s = GetInvalidArray();
- Assert.True(LPStrBuffer_In_Array_String(s));
-
- s = GetValidArray();
- Assert.True(LPStrBuffer_In_Array_String(s));
-
- s = GetInvalidArray();
- Assert.True(LPStrBuffer_InByRef_Array_String(ref s));
-
- s = GetValidArray();
- Assert.True(LPStrBuffer_InByRef_Array_String(ref s));
-
- s = GetInvalidArray();
- Assert.True(LPStrBuffer_InOutByRef_Array_String(ref s));
-
- s = GetValidArray();
- Assert.True(LPStrBuffer_InOutByRef_Array_String(ref s));
- }
-
- static void testLPStrBufferClass()
- {
- LPStrTestClass sClass = new LPStrTestClass();
- sClass.str = GetInvalidString();
- Assert.True(LPStrBuffer_In_Class_String(sClass));
-
- sClass.str = GetValidString();
- Assert.True(LPStrBuffer_In_Class_String(sClass));
-
- sClass.str = GetInvalidString();
- Assert.True(LPStrBuffer_InByRef_Class_String(ref sClass));
-
- sClass.str = GetValidString();
- Assert.True(LPStrBuffer_InByRef_Class_String(ref sClass));
-
- sClass.str = GetInvalidString();
- Assert.True(LPStrBuffer_InOutByRef_Class_String(ref sClass));
-
- sClass.str = GetValidString();
- Assert.True(LPStrBuffer_InOutByRef_Class_String(ref sClass));
- }
-
- static void testLPStrBufferArrayOfStructs()
- {
- LPStrTestStruct[] lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.True(LPStrBuffer_In_Array_Struct(lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_In_Array_Struct(lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.True(LPStrBuffer_InByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_InByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetInvalidStruct();
- lpss[1] = GetInvalidStruct();
- Assert.True(LPStrBuffer_InOutByRef_Array_Struct(ref lpss));
-
- lpss = new LPStrTestStruct[2];
- lpss[0] = GetValidStruct();
- lpss[1] = GetValidStruct();
- Assert.True(LPStrBuffer_InOutByRef_Array_Struct(ref lpss));
- }
-
- static void runTest()
- {
- testLPStrBufferString();
- testLPStrBufferStringBuilder();
- testLPStrBufferStruct();
- testLPStrBufferArray();
- testLPStrBufferClass();
- testLPStrBufferArrayOfStructs();
- }
-
- public static int Main()
- {
- if (System.Globalization.CultureInfo.CurrentCulture.Name != "en-US")
- {
- Console.WriteLine("Non-US English platforms are not supported.\nPassing without running tests");
-
- Console.WriteLine("--- Success");
- return 100;
- }
-
- try
- {
- runTest();
- return 100;
- } catch (Exception e){
- Console.WriteLine($"Test Failure: {e}");
- return 101;
- }
- }
-}
+++ /dev/null
-<Project Sdk="Microsoft.NET.Sdk">
- <PropertyGroup>
- <OutputType>Exe</OutputType>
- <!-- Test unsupported outside of windows -->
- <CLRTestTargetUnsupported Condition="'$(TargetsWindows)' != 'true'">true</CLRTestTargetUnsupported>
- </PropertyGroup>
- <ItemGroup>
- <Compile Include="$(MSBuildProjectName).cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\CMakeLists.txt" />
- </ItemGroup>
-</Project>
--- /dev/null
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System;
+using System.Text;
+using System.Runtime.InteropServices;
+using TestLibrary;
+
+public class Program
+{
+ public static int Main()
+ {
+ if (System.Globalization.CultureInfo.CurrentCulture.Name != "en-US")
+ {
+ Console.WriteLine("Non-US English platforms are not supported.\nPassing without running tests");
+
+ Console.WriteLine("--- Success");
+ return 100;
+ }
+
+ try
+ {
+ Console.WriteLine("Validating char marshalling...");
+ Char.PInvoke_Default.RunTest();
+ Char.PInvoke_False_False.RunTest();
+ Char.PInvoke_False_True.RunTest();
+ Char.PInvoke_True_False.RunTest();
+ Char.PInvoke_True_True.RunTest();
+
+ Console.WriteLine("Validating LPStr marshalling...");
+ LPStr.PInvoke_Default.RunTest();
+ LPStr.PInvoke_False_False.RunTest();
+ LPStr.PInvoke_False_True.RunTest();
+ LPStr.PInvoke_True_False.RunTest();
+ LPStr.PInvoke_True_True.RunTest();
+ return 100;
+ } catch (Exception e){
+ Console.WriteLine($"Test Failure: {e}");
+ return 101;
+ }
+ }
+}
--- /dev/null
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System;
+using System.Text;
+using System.Runtime.InteropServices;
+using Xunit;
+
+using static TestData;
+
+internal unsafe class Test
+{
+ internal record DataContext<T, U>(T Invalid, T Unmappable, T Valid, Func<T, U> GetValueToCompare);
+
+ internal readonly struct Functions<T>
+ {
+ public Functions(
+ delegate*<T, bool> inByValue,
+ delegate*<ref T, bool> inByRef,
+ delegate*<ref T, bool> inOutByRef)
+ {
+ In = inByValue;
+ InByRef = inByRef;
+ InOutByRef = inOutByRef;
+ }
+
+ public readonly delegate*<T, bool> In;
+ public readonly delegate*<ref T, bool> InByRef;
+ public readonly delegate*<ref T, bool> InOutByRef;
+ }
+
+ public static void Validate<T, U>(bool bestFitMapping, bool throwOnUnmappableChar, Functions<T> funcs, DataContext<T, U> data)
+ {
+ Console.WriteLine($" ---- Marshal {typeof(T).Name}");
+
+ bool shouldThrowOnInvalid = !bestFitMapping && throwOnUnmappableChar;
+
+ T invalid = data.Invalid;
+ if (shouldThrowOnInvalid)
+ {
+ Assert.Throws<ArgumentException>(() => funcs.In(invalid));
+
+ invalid = data.Invalid;
+ Assert.Throws<ArgumentException>(() => funcs.InByRef(ref invalid));
+
+ invalid = data.Invalid;
+ Assert.Throws<ArgumentException>(() => funcs.InOutByRef(ref invalid));
+ }
+ else
+ {
+ Assert.True(funcs.In(invalid));
+
+ invalid = data.Invalid;
+ Assert.True(funcs.InByRef(ref invalid));
+ Assert.Equal(data.GetValueToCompare(data.Invalid), data.GetValueToCompare(invalid));
+
+ invalid = data.Invalid;
+ Assert.True(funcs.InOutByRef(ref invalid));
+ Assert.NotEqual(data.GetValueToCompare(data.Invalid), data.GetValueToCompare(invalid));
+ }
+
+ T unmappable = data.Unmappable;
+ if (throwOnUnmappableChar)
+ {
+ Assert.Throws<ArgumentException>(() => funcs.In(unmappable));
+
+ unmappable = data.Unmappable;
+ Assert.Throws<ArgumentException>(() => funcs.InByRef(ref unmappable));
+
+ unmappable = data.Unmappable;
+ Assert.Throws<ArgumentException>(() => funcs.InOutByRef(ref unmappable));
+ }
+ else
+ {
+ Assert.True(funcs.In(unmappable));
+
+ unmappable = data.Unmappable;
+ Assert.True(funcs.InByRef(ref unmappable));
+ Assert.Equal(data.GetValueToCompare(data.Unmappable), data.GetValueToCompare(unmappable));
+
+ unmappable = data.Unmappable;
+ Assert.True(funcs.InOutByRef(ref unmappable));
+ Assert.NotEqual(data.GetValueToCompare(data.Unmappable), data.GetValueToCompare(unmappable));
+ }
+
+ T valid = data.Valid;
+ Assert.True(funcs.In(valid));
+
+ valid = data.Valid;
+ Assert.True(funcs.InByRef(ref valid));
+ Assert.Equal(data.GetValueToCompare(data.Valid), data.GetValueToCompare(valid));
+
+ valid = data.Valid;
+ Assert.True(funcs.InOutByRef(ref valid));
+ Assert.Equal(data.GetValueToCompare(data.Valid), data.GetValueToCompare(valid));
+ }
+
+ public static void ValidateChar(bool bestFitMapping, bool throwOnUnmappableChar, Functions<char> funcs)
+ {
+ var context = new DataContext<char, char>(InvalidChar, UnmappableChar, ValidChar, (char c) => c);
+ Validate(bestFitMapping, throwOnUnmappableChar, funcs, context);
+ }
+
+ public static void ValidateString(bool bestFitMapping, bool throwOnUnmappableChar, Functions<string> funcs)
+ {
+ var context = new DataContext<string, string>(InvalidString, UnmappableString, ValidString, (string s) => s);
+ Validate(bestFitMapping, throwOnUnmappableChar, funcs, context);
+ }
+
+ public static void ValidateStringBuilder(bool bestFitMapping, bool throwOnUnmappableChar, Functions<StringBuilder> funcs)
+ {
+ var context = new DataContext<StringBuilder, string>(InvalidStringBuilder, UnmappableStringBuilder, ValidStringBuilder, (StringBuilder s) => s.ToString());
+ Validate(bestFitMapping, throwOnUnmappableChar, funcs, context);
+ }
+
+ public static void ValidateStringArray(bool bestFitMapping, bool throwOnUnmappableChar, Functions<string[]> funcs)
+ {
+ var context = new DataContext<string[], string>(InvalidStringArray, UnmappableStringArray, ValidStringArray, (string[] s) => s[0]);
+ Validate(bestFitMapping, throwOnUnmappableChar, funcs, context);
+ }
+}
--- /dev/null
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Text;
+
+public static class TestData
+{
+ public const char InvalidChar = (char)0x2216;
+ public const char UnmappableChar = '火';
+ public const char ValidChar = 'c';
+
+ public static readonly string InvalidString = new string(new char[]
+ {
+ (char)0x2216,
+ (char)0x2044,
+ (char)0x2215,
+ (char)0x0589,
+ (char)0x2236
+ });
+ public static readonly string UnmappableString = new string(new char[] { '乀', 'Ω', '火' });
+ public static readonly string ValidString = "This is the initial test string.";
+
+ public static readonly StringBuilder InvalidStringBuilder = new StringBuilder(InvalidString);
+ public static readonly StringBuilder UnmappableStringBuilder = new StringBuilder(UnmappableString);
+ public static readonly StringBuilder ValidStringBuilder = new StringBuilder(ValidString);
+
+ public static readonly string[] InvalidStringArray = new string[] { InvalidString, InvalidString, InvalidString };
+ public static readonly string[] UnmappableStringArray = new string[] { UnmappableString, UnmappableString, UnmappableString };
+ public static readonly string[] ValidStringArray = new string[] { ValidString, ValidString, ValidString };
+}