From 02569624477dd6e9713789b9fec8bc49fbd8c799 Mon Sep 17 00:00:00 2001 From: CarloToso <105941898+CarloToso@users.noreply.github.com> Date: Thu, 9 Mar 2023 00:41:06 +0100 Subject: [PATCH 1/5] Add ansi; small cleanup; reorder --- .../utils/EncodingUtils.cs | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/src/System.Management.Automation/utils/EncodingUtils.cs b/src/System.Management.Automation/utils/EncodingUtils.cs index 029de9d94e9..2bcbc4ad5e3 100644 --- a/src/System.Management.Automation/utils/EncodingUtils.cs +++ b/src/System.Management.Automation/utils/EncodingUtils.cs @@ -2,6 +2,7 @@ // Licensed under the MIT License. using System.Collections.Generic; +using System.Globalization; using System.Text; using System.Management.Automation.Internal; @@ -10,25 +11,26 @@ namespace System.Management.Automation { internal static class EncodingConversion { - internal const string Unknown = "unknown"; - internal const string String = "string"; - internal const string Unicode = "unicode"; + internal const string Ascii = "ascii"; internal const string BigEndianUnicode = "bigendianunicode"; internal const string BigEndianUtf32 = "bigendianutf32"; - internal const string Ascii = "ascii"; + internal const string Default = "default"; + internal const string OEM = "oem"; + internal const string Unicode = "unicode"; + internal const string Utf7 = "utf7"; internal const string Utf8 = "utf8"; - internal const string Utf8NoBom = "utf8NoBOM"; internal const string Utf8Bom = "utf8BOM"; - internal const string Utf7 = "utf7"; + internal const string Utf8NoBom = "utf8NoBOM"; internal const string Utf32 = "utf32"; - internal const string Default = "default"; - internal const string OEM = "oem"; + internal const string ANSI = "ansi"; + internal const string String = "string"; + internal const string Unknown = "unknown"; internal static readonly string[] TabCompletionResults = { Ascii, BigEndianUnicode, BigEndianUtf32, OEM, Unicode, Utf7, Utf8, Utf8Bom, Utf8NoBom, Utf32 }; - internal static readonly Dictionary encodingMap = new Dictionary(StringComparer.OrdinalIgnoreCase) + internal static readonly Dictionary encodingMap = new(StringComparer.OrdinalIgnoreCase) { { Ascii, Encoding.ASCII }, { BigEndianUnicode, Encoding.BigEndianUnicode }, @@ -43,6 +45,7 @@ internal static class EncodingConversion { Utf8Bom, Encoding.UTF8 }, { Utf8NoBom, Encoding.Default }, { Utf32, Encoding.UTF32 }, + { ANSI, Encoding.GetEncoding(CultureInfo.CurrentCulture.TextInfo.ANSICodePage) }, { String, Encoding.Unicode }, { Unknown, Encoding.Unicode }, }; @@ -60,8 +63,7 @@ internal static Encoding Convert(Cmdlet cmdlet, string encoding) return Encoding.Default; } - Encoding foundEncoding; - if (encodingMap.TryGetValue(encoding, out foundEncoding)) + if (encodingMap.TryGetValue(encoding, out Encoding foundEncoding)) { // Write a warning if using utf7 as it is obsolete in .NET5 if (string.Equals(encoding, Utf7, StringComparison.OrdinalIgnoreCase)) @@ -122,10 +124,10 @@ public override object Transform(EngineIntrinsics engineIntrinsics, object input } else { - return System.Text.Encoding.GetEncoding(stringName); + return Encoding.GetEncoding(stringName); } case int intName: - return System.Text.Encoding.GetEncoding(intName); + return Encoding.GetEncoding(intName); } return inputData; From 8816bb523eb2028fd0b5ebcd8bdbadded949fae8 Mon Sep 17 00:00:00 2001 From: CarloToso <105941898+CarloToso@users.noreply.github.com> Date: Thu, 9 Mar 2023 09:46:22 +0100 Subject: [PATCH 2/5] add test --- test/powershell/Language/Parser/RedirectionOperator.Tests.ps1 | 4 ++-- .../Microsoft.PowerShell.Management/Get-Content.Tests.ps1 | 3 ++- .../Modules/Microsoft.PowerShell.Utility/Format-Hex.Tests.ps1 | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/test/powershell/Language/Parser/RedirectionOperator.Tests.ps1 b/test/powershell/Language/Parser/RedirectionOperator.Tests.ps1 index 466f15bd695..0c9ef0f0b92 100644 --- a/test/powershell/Language/Parser/RedirectionOperator.Tests.ps1 +++ b/test/powershell/Language/Parser/RedirectionOperator.Tests.ps1 @@ -45,7 +45,7 @@ Describe "Redirection operator now supports encoding changes" -Tags "CI" { } } - $availableEncodings = + $availableEncodings = @([System.Text.Encoding]::ASCII [System.Text.Encoding]::BigEndianUnicode [System.Text.UTF32Encoding]::new($true,$true) @@ -53,7 +53,7 @@ Describe "Redirection operator now supports encoding changes" -Tags "CI" { [System.Text.Encoding]::UTF7 [System.Text.Encoding]::UTF8 [System.Text.Encoding]::UTF32) - + foreach($encoding in $availableEncodings) { $encodingName = $encoding.EncodingName diff --git a/test/powershell/Modules/Microsoft.PowerShell.Management/Get-Content.Tests.ps1 b/test/powershell/Modules/Microsoft.PowerShell.Management/Get-Content.Tests.ps1 index 5fdc904580d..b4438349be9 100644 --- a/test/powershell/Modules/Microsoft.PowerShell.Management/Get-Content.Tests.ps1 +++ b/test/powershell/Modules/Microsoft.PowerShell.Management/Get-Content.Tests.ps1 @@ -105,6 +105,7 @@ Describe "Get-Content" -Tags "CI" { @{EncodingName = 'UTF7'}, @{EncodingName = 'UTF32'}, @{EncodingName = 'Ascii'} + @{EncodingName = 'ANSI'} ){ param($EncodingName) @@ -221,7 +222,7 @@ Describe "Get-Content" -Tags "CI" { $expected = 'He', 'o,', '', 'Wor', "d${nl}He", 'o2,', '', 'Wor', "d2${nl}" for ($i = 0; $i -lt $result.Length ; $i++) { $result[$i] | Should -BeExactly $expected[$i]} } - + Context "Alternate Data Stream support on Windows" { It "Should support NTFS streams using colon syntax" -Skip:(!$IsWindows) { Set-Content "${testPath}:Stream" -Value "Foo" diff --git a/test/powershell/Modules/Microsoft.PowerShell.Utility/Format-Hex.Tests.ps1 b/test/powershell/Modules/Microsoft.PowerShell.Utility/Format-Hex.Tests.ps1 index 0ae47aac8e3..6553cdfefcd 100644 --- a/test/powershell/Modules/Microsoft.PowerShell.Utility/Format-Hex.Tests.ps1 +++ b/test/powershell/Modules/Microsoft.PowerShell.Utility/Format-Hex.Tests.ps1 @@ -438,7 +438,7 @@ public enum TestSByteEnum : sbyte { Count = 2 ExpectedResult = "0000000000000000 00 00 00 68 00 00 00 65 00 00 00 6C 00 00 00 6C h e l l" ExpectedSecondResult = "0000000000000010 00 00 00 6F o" - } + } @{ Name = "Can process Unicode encoding 'fhx -InputObject 'hello' -Encoding Unicode'" Encoding = "Unicode" From 65cec211303daf07d95222e2a3f392ef955f9d3b Mon Sep 17 00:00:00 2001 From: CarloToso <105941898+CarloToso@users.noreply.github.com> Date: Thu, 9 Mar 2023 09:53:45 +0100 Subject: [PATCH 3/5] reorder --- .../utils/EncodingUtils.cs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/System.Management.Automation/utils/EncodingUtils.cs b/src/System.Management.Automation/utils/EncodingUtils.cs index 2bcbc4ad5e3..725fa7d3b58 100644 --- a/src/System.Management.Automation/utils/EncodingUtils.cs +++ b/src/System.Management.Automation/utils/EncodingUtils.cs @@ -11,20 +11,20 @@ namespace System.Management.Automation { internal static class EncodingConversion { + internal const string ANSI = "ansi"; internal const string Ascii = "ascii"; internal const string BigEndianUnicode = "bigendianunicode"; internal const string BigEndianUtf32 = "bigendianutf32"; internal const string Default = "default"; internal const string OEM = "oem"; + internal const string String = "string"; internal const string Unicode = "unicode"; + internal const string Unknown = "unknown"; internal const string Utf7 = "utf7"; internal const string Utf8 = "utf8"; internal const string Utf8Bom = "utf8BOM"; internal const string Utf8NoBom = "utf8NoBOM"; internal const string Utf32 = "utf32"; - internal const string ANSI = "ansi"; - internal const string String = "string"; - internal const string Unknown = "unknown"; internal static readonly string[] TabCompletionResults = { Ascii, BigEndianUnicode, BigEndianUtf32, OEM, Unicode, Utf7, Utf8, Utf8Bom, Utf8NoBom, Utf32 @@ -32,22 +32,22 @@ internal static class EncodingConversion internal static readonly Dictionary encodingMap = new(StringComparer.OrdinalIgnoreCase) { + { ANSI, Encoding.GetEncoding(CultureInfo.CurrentCulture.TextInfo.ANSICodePage) }, { Ascii, Encoding.ASCII }, { BigEndianUnicode, Encoding.BigEndianUnicode }, { BigEndianUtf32, new UTF32Encoding(bigEndian: true, byteOrderMark: true) }, { Default, Encoding.Default }, { OEM, ClrFacade.GetOEMEncoding() }, + { String, Encoding.Unicode }, { Unicode, Encoding.Unicode }, + { Unknown, Encoding.Unicode }, #pragma warning disable SYSLIB0001 { Utf7, Encoding.UTF7 }, #pragma warning restore SYSLIB0001 { Utf8, Encoding.Default }, { Utf8Bom, Encoding.UTF8 }, { Utf8NoBom, Encoding.Default }, - { Utf32, Encoding.UTF32 }, - { ANSI, Encoding.GetEncoding(CultureInfo.CurrentCulture.TextInfo.ANSICodePage) }, - { String, Encoding.Unicode }, - { Unknown, Encoding.Unicode }, + { Utf32, Encoding.UTF32 }, }; /// From 63ac169c2dd283098ffc873a313c4513437c1f15 Mon Sep 17 00:00:00 2001 From: CarloToso <105941898+CarloToso@users.noreply.github.com> Date: Thu, 9 Mar 2023 13:14:34 +0100 Subject: [PATCH 4/5] 3->4 --- .../Microsoft.PowerShell.Management/Get-Content.Tests.ps1 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/powershell/Modules/Microsoft.PowerShell.Management/Get-Content.Tests.ps1 b/test/powershell/Modules/Microsoft.PowerShell.Management/Get-Content.Tests.ps1 index b4438349be9..9f42be74149 100644 --- a/test/powershell/Modules/Microsoft.PowerShell.Management/Get-Content.Tests.ps1 +++ b/test/powershell/Modules/Microsoft.PowerShell.Management/Get-Content.Tests.ps1 @@ -104,7 +104,7 @@ Describe "Get-Content" -Tags "CI" { @{EncodingName = 'UTF8NoBOM'}, @{EncodingName = 'UTF7'}, @{EncodingName = 'UTF32'}, - @{EncodingName = 'Ascii'} + @{EncodingName = 'Ascii'}, @{EncodingName = 'ANSI'} ){ param($EncodingName) @@ -115,7 +115,7 @@ Describe "Get-Content" -Tags "CI" { @('𐍈1','𐍈𐍈2','𐍈𐍈𐍈3','𐍈𐍈𐍈𐍈4','𐍈𐍈𐍈𐍈𐍈5')) # utf-32 ForEach ($content in $contentSets) { - $tailCount = 3 + $tailCount = 4 $testPath = Join-Path -Path $TestDrive -ChildPath 'TailWithEncoding.txt' $content | Set-Content -Path $testPath -Encoding $EncodingName From dc6744f627418b32474b2785c7be76914a9daf47 Mon Sep 17 00:00:00 2001 From: CarloToso <105941898+CarloToso@users.noreply.github.com> Date: Mon, 13 Mar 2023 20:37:20 +0100 Subject: [PATCH 5/5] follow suggestion --- src/System.Management.Automation/utils/EncodingUtils.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/System.Management.Automation/utils/EncodingUtils.cs b/src/System.Management.Automation/utils/EncodingUtils.cs index 725fa7d3b58..8094115e92a 100644 --- a/src/System.Management.Automation/utils/EncodingUtils.cs +++ b/src/System.Management.Automation/utils/EncodingUtils.cs @@ -27,7 +27,7 @@ internal static class EncodingConversion internal const string Utf32 = "utf32"; internal static readonly string[] TabCompletionResults = { - Ascii, BigEndianUnicode, BigEndianUtf32, OEM, Unicode, Utf7, Utf8, Utf8Bom, Utf8NoBom, Utf32 + ANSI, Ascii, BigEndianUnicode, BigEndianUtf32, OEM, Unicode, Utf7, Utf8, Utf8Bom, Utf8NoBom, Utf32 }; internal static readonly Dictionary encodingMap = new(StringComparer.OrdinalIgnoreCase) @@ -140,6 +140,7 @@ public override object Transform(EngineIntrinsics engineIntrinsics, object input internal sealed class ArgumentEncodingCompletionsAttribute : ArgumentCompletionsAttribute { public ArgumentEncodingCompletionsAttribute() : base( + EncodingConversion.ANSI, EncodingConversion.Ascii, EncodingConversion.BigEndianUnicode, EncodingConversion.BigEndianUtf32,