Change hashtable to use OrdinalIgnoreCase to be case-insensitive in all Cultures (#8566)
Ubuntu18.04 seems to default to C.UTF-8 for LANG (representing InvariantCulture) which results in a case-sensitive hashtable since CurrentCultureIgnoreCase doesn't work for that culture. Fix is to use OrdinalIgnoreCase instead.
This commit is contained in:
parent
1729a682ee
commit
9793ed2c68
|
@ -538,7 +538,7 @@ namespace System.Management.Automation.Language
|
|||
internal static readonly Expression CompareOptionsNone = Expression.Constant(CompareOptions.None);
|
||||
internal static readonly Expression Ordinal = Expression.Constant(StringComparison.Ordinal);
|
||||
internal static readonly Expression InvariantCulture = Expression.Constant(CultureInfo.InvariantCulture);
|
||||
internal static readonly Expression CurrentCultureIgnoreCaseComparer = Expression.Constant(StringComparer.CurrentCultureIgnoreCase, typeof(StringComparer));
|
||||
internal static readonly Expression OrdinalIgnoreCaseComparer = Expression.Constant(StringComparer.OrdinalIgnoreCase, typeof(StringComparer));
|
||||
internal static readonly Expression CatchAllType = Expression.Constant(typeof(ExceptionHandlingOps.CatchAll), typeof(Type));
|
||||
internal static readonly Expression Empty = Expression.Empty();
|
||||
internal static Expression GetExecutionContextFromTLS =
|
||||
|
@ -5756,7 +5756,7 @@ namespace System.Management.Automation.Language
|
|||
yield return Expression.Assign(temp,
|
||||
Expression.New(ordered ? CachedReflectionInfo.OrderedDictionary_ctor : CachedReflectionInfo.Hashtable_ctor,
|
||||
ExpressionCache.Constant(keyValuePairs.Count),
|
||||
ExpressionCache.CurrentCultureIgnoreCaseComparer.Cast(typeof(IEqualityComparer))));
|
||||
ExpressionCache.OrdinalIgnoreCaseComparer.Cast(typeof(IEqualityComparer))));
|
||||
for (int index = 0; index < keyValuePairs.Count; index++)
|
||||
{
|
||||
var keyValuePair = keyValuePairs[index];
|
||||
|
|
|
@ -303,3 +303,9 @@ Describe "Hash expression with if statement as value" -Tags "CI" {
|
|||
$hash['h'] | Should -BeExactly 'h'
|
||||
}
|
||||
}
|
||||
|
||||
Describe "Hashtable is case insensitive" -Tag CI {
|
||||
It "When LANG is C.UTF-8" -Skip:($IsWindows) {
|
||||
sh -c 'LANG=C.UTF-8 pwsh -NoProfile -Command ''$h=@{p=1};$h.P''' | Should -Be 1
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue