-
Notifications
You must be signed in to change notification settings - Fork 4.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[release/6.0] Fix loading app-local ICU (#77117)
* Fix loading app-local ICU * Restrict the platforms to run the tests on * Adjust the test supported platforms * Test Platforms * Fix the test OS filtering * address the feedback * More feedback addressing * Fix the test * Try fixing the test Co-authored-by: Tarek Mahmoud Sayed <[email protected]>
- Loading branch information
1 parent
e01db30
commit c35dae2
Showing
5 changed files
with
95 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
25 changes: 25 additions & 0 deletions
25
src/libraries/System.Globalization/tests/IcuAppLocal/IcuAppLocal.Tests.csproj
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
<Project Sdk="Microsoft.NET.Sdk"> | ||
<PropertyGroup> | ||
<TargetFrameworks>$(NetCoreAppCurrent)</TargetFrameworks> | ||
<TestRuntime>true</TestRuntime> | ||
<IncludeRemoteExecutor>true</IncludeRemoteExecutor> | ||
</PropertyGroup> | ||
<ItemGroup> | ||
<Compile Include="IcuAppLocal.cs" /> | ||
</ItemGroup> | ||
|
||
<ItemGroup> | ||
<PackageReference Include="Microsoft.ICU.ICU4C.Runtime" Version="68.2.0.9" /> | ||
|
||
<!-- | ||
We define this switch dynamically during the runtime using RemoteExecutor. | ||
The reason is, if we enable ICU app-local here, this test will compile and run | ||
on all supported OSs even the ICU NuGet package not have native bits support such OSs. | ||
Note, it doesn't matter if we have test case conditioned to not run on such OSs, because | ||
the test has to start running first before filtering the test cases and the globalization | ||
code will run and fail fast at that time. | ||
<RuntimeHostConfigurationOption Include="System.Globalization.AppLocalIcu" Value="68.2.0.9" /> | ||
--> | ||
</ItemGroup> | ||
</Project> |
51 changes: 51 additions & 0 deletions
51
src/libraries/System.Globalization/tests/IcuAppLocal/IcuAppLocal.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
// Licensed to the .NET Foundation under one or more agreements. | ||
// The .NET Foundation licenses this file to you under the MIT license. | ||
|
||
using Microsoft.DotNet.RemoteExecutor; | ||
using System.Diagnostics; | ||
using System.Reflection; | ||
using Xunit; | ||
|
||
namespace System.Globalization.Tests | ||
{ | ||
public class IcuAppLocalTests | ||
{ | ||
private static bool SupportsIcuPackageDownload => RemoteExecutor.IsSupported && | ||
((PlatformDetection.IsWindows && !PlatformDetection.IsArmProcess) || | ||
(PlatformDetection.IsLinux && (PlatformDetection.IsX64Process || PlatformDetection.IsArm64Process) && | ||
!PlatformDetection.IsAlpine && !PlatformDetection.IsLinuxBionic)); | ||
|
||
|
||
[ConditionalFact(nameof(SupportsIcuPackageDownload))] | ||
public void TestIcuAppLocal() | ||
{ | ||
// We define this switch dynamically during the runtime using RemoteExecutor. | ||
// The reason is, if we enable ICU app-local here, this test will compile and run | ||
// on all supported OSs even the ICU NuGet package not have native bits support such OSs. | ||
// Note, it doesn't matter if we have test case conditioned to not run on such OSs, because | ||
// the test has to start running first before filtering the test cases and the globalization | ||
// code will run and fail fast at that time. | ||
|
||
ProcessStartInfo psi = new ProcessStartInfo(); | ||
psi.Environment.Add("DOTNET_SYSTEM_GLOBALIZATION_APPLOCALICU", "68.2.0.9"); | ||
|
||
RemoteExecutor.Invoke(() => | ||
{ | ||
// Ensure initializing globalization code before checking the ICU version. | ||
CultureInfo ci = CultureInfo.GetCultureInfo("en-US"); | ||
Type? interopGlobalization = Type.GetType("Interop+Globalization, System.Private.CoreLib"); | ||
Assert.NotNull(interopGlobalization); | ||
MethodInfo? methodInfo = interopGlobalization.GetMethod("GetICUVersion", BindingFlags.NonPublic | BindingFlags.Static); | ||
Assert.NotNull(methodInfo); | ||
// Assert the ICU version 0x44020009 is 68.2.0.9 | ||
Assert.Equal(0x44020009, (int)methodInfo.Invoke(null, null)); | ||
// Now call globalization API to ensure the binding working without any problem. | ||
Assert.Equal(-1, ci.CompareInfo.Compare("sample\u0000", "Sample\u0000", CompareOptions.IgnoreSymbols)); | ||
}, new RemoteInvokeOptions { StartInfo = psi }).Dispose(); | ||
} | ||
} | ||
} |