diff --git a/src/Compilers/Core/CodeAnalysisTest/Text/StringTextDecodingTests.cs b/src/Compilers/Core/CodeAnalysisTest/Text/StringTextDecodingTests.cs index 48fd50f131f1c43fad3cb43a36669365261fd3d8..6fbc8351efa11c91472c02780cf39b2f016b1e3b 100644 --- a/src/Compilers/Core/CodeAnalysisTest/Text/StringTextDecodingTests.cs +++ b/src/Compilers/Core/CodeAnalysisTest/Text/StringTextDecodingTests.cs @@ -133,7 +133,7 @@ public void CheckSum_SHA256() Assert.Equal("f1945cd6 c19e56b3 c1c78943 ef5ec181 16907a4c a1efc40a 57d48ab1 db7adfc5", StringTextTest.ChecksumToHexQuads(checksum)); } - [ConditionalFact(typeof(IsEnglishLocal))] + [ConditionalFact(typeof(HasEnglishDefaultEncoding))] [WorkItem(5663, "https://github.com/dotnet/roslyn/issues/5663")] public void Decode_NonUtf8() { diff --git a/src/Test/Utilities/Portable/Assert/ConditionalFactAttribute.cs b/src/Test/Utilities/Portable/Assert/ConditionalFactAttribute.cs index fb768a74ea4d48c3bd313b6c82c3e874df342a77..cc28ff1e990b48390832d7c45220c75fe886227e 100644 --- a/src/Test/Utilities/Portable/Assert/ConditionalFactAttribute.cs +++ b/src/Test/Utilities/Portable/Assert/ConditionalFactAttribute.cs @@ -47,6 +47,13 @@ public class HasShiftJisDefaultEncoding : ExecutionCondition public override string SkipReason => "OS default codepage is not Shift-JIS (932)."; } + public class HasEnglishDefaultEncoding : ExecutionCondition + { + public override bool ShouldSkip => Encoding.GetEncoding(0)?.CodePage != 1252; + + public override string SkipReason => "OS default codepage is not Windows-1252."; + } + public class IsEnglishLocal : ExecutionCondition { public override bool ShouldSkip => diff --git a/src/Test/Utilities/Portable/Compilation/OperationTreeVerifier.cs b/src/Test/Utilities/Portable/Compilation/OperationTreeVerifier.cs index 2f46e0f34971756dcd03803865b76714d281aadd..85c6871d9ae20874a3dda71cd5f436b86ac61c19 100644 --- a/src/Test/Utilities/Portable/Compilation/OperationTreeVerifier.cs +++ b/src/Test/Utilities/Portable/Compilation/OperationTreeVerifier.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using System.Collections.Immutable; using System.Diagnostics; +using System.Globalization; using System.Linq; using System.Text; using System.Text.RegularExpressions; @@ -163,13 +164,28 @@ private void LogConstant(Optional constant, string header = "Constant") } } - private void LogConstant(object constant, string header = "Constant") + private static string ConstantToString(object constant, bool quoteString = true) { - var valueStr = constant != null ? constant.ToString() : "null"; - if (constant is string) + switch (constant) { - valueStr = @"""" + valueStr + @""""; + case null: + return "null"; + case string s: + if (quoteString) + { + return @"""" + s + @""""; + } + return s; + case IFormattable formattable: + return formattable.ToString(null, CultureInfo.InvariantCulture); + default: + return constant.ToString(); } + } + + private void LogConstant(object constant, string header = "Constant") + { + string valueStr = ConstantToString(constant); LogString($"{header}: {valueStr}"); } @@ -845,8 +861,7 @@ public override void VisitLiteralExpression(ILiteralExpression operation) { LogString(nameof(ILiteralExpression)); - object value; - if (operation.ConstantValue.HasValue && ((value = operation.ConstantValue.Value) == null ? "null" : value.ToString()) == operation.Text) + if (operation.ConstantValue.HasValue && ConstantToString(operation.ConstantValue.Value, quoteString: false) == operation.Text) { LogString($" (Text: {operation.Text})"); }