From 35a598be7a1638ab80c6433f5f996d470d724de4 Mon Sep 17 00:00:00 2001 From: Alexander Radchenko Date: Tue, 20 Jun 2023 03:05:54 +0600 Subject: [PATCH] Fixed System.Tests.DateTimeTests.TryFormat_MatchesToString test (#87693) Co-authored-by: Stephen Toub --- .../tests/System/DateTimeTests.cs | 78 ++++++++++--------- 1 file changed, 42 insertions(+), 36 deletions(-) diff --git a/src/libraries/System.Runtime/tests/System/DateTimeTests.cs b/src/libraries/System.Runtime/tests/System/DateTimeTests.cs index 0b5504a205f..362354f2b54 100644 --- a/src/libraries/System.Runtime/tests/System/DateTimeTests.cs +++ b/src/libraries/System.Runtime/tests/System/DateTimeTests.cs @@ -2735,48 +2735,54 @@ namespace System.Tests public static void TryFormat_MatchesToString(string format) { DateTime dt = DateTime.UtcNow; - string expected = dt.ToString(format); - - // UTF16 + foreach (CultureInfo culture in CultureInfo.GetCultures(CultureTypes.AllCultures)) { - // Just the right length, succeeds - Span dest = new char[expected.Length]; - Assert.True(dt.TryFormat(dest, out int charsWritten, format)); - Assert.Equal(expected.Length, charsWritten); - Assert.Equal(expected.ToCharArray(), dest.ToArray()); + using (new ThreadCultureChange(culture)) + { + string expected = dt.ToString(format); - // Too short, fails - dest = new char[expected.Length - 1]; - Assert.False(dt.TryFormat(dest, out charsWritten, format)); - Assert.Equal(0, charsWritten); + // UTF16 + { + // Just the right length, succeeds + Span dest = new char[expected.Length]; + Assert.True(dt.TryFormat(dest, out int charsWritten, format)); + Assert.Equal(expected.Length, charsWritten); + Assert.Equal(expected.ToCharArray(), dest.ToArray()); - // Longer than needed, succeeds - dest = new char[expected.Length + 1]; - Assert.True(dt.TryFormat(dest, out charsWritten, format)); - Assert.Equal(expected.Length, charsWritten); - Assert.Equal(expected.ToCharArray(), dest.Slice(0, expected.Length).ToArray()); - Assert.Equal(0, dest[dest.Length - 1]); - } + // Too short, fails + dest = new char[expected.Length - 1]; + Assert.False(dt.TryFormat(dest, out charsWritten, format)); + Assert.Equal(0, charsWritten); - // UTF8 - { - // Just the right length, succeeds - Span dest = new byte[Encoding.UTF8.GetByteCount(expected)]; - Assert.True(dt.TryFormat(dest, out int bytesWritten, format)); - Assert.Equal(dest.Length, bytesWritten); - Assert.Equal(expected, Encoding.UTF8.GetString(dest)); + // Longer than needed, succeeds + dest = new char[expected.Length + 1]; + Assert.True(dt.TryFormat(dest, out charsWritten, format)); + Assert.Equal(expected.Length, charsWritten); + Assert.Equal(expected.ToCharArray(), dest.Slice(0, expected.Length).ToArray()); + Assert.Equal(0, dest[dest.Length - 1]); + } - // Too short, fails - dest = new byte[Encoding.UTF8.GetByteCount(expected) - 1]; - Assert.False(dt.TryFormat(dest, out bytesWritten, format)); - Assert.Equal(0, bytesWritten); + // UTF8 + { + // Just the right length, succeeds + Span dest = new byte[Encoding.UTF8.GetByteCount(expected)]; + Assert.True(dt.TryFormat(dest, out int bytesWritten, format)); + Assert.Equal(dest.Length, bytesWritten); + Assert.Equal(expected, Encoding.UTF8.GetString(dest)); - // Longer than needed, succeeds - dest = new byte[Encoding.UTF8.GetByteCount(expected) + 1]; - Assert.True(dt.TryFormat(dest, out bytesWritten, format)); - Assert.Equal(dest.Length - 1, bytesWritten); - Assert.Equal(expected, Encoding.UTF8.GetString(dest.Slice(0, bytesWritten))); - Assert.Equal(0, dest[dest.Length - 1]); + // Too short, fails + dest = new byte[Encoding.UTF8.GetByteCount(expected) - 1]; + Assert.False(dt.TryFormat(dest, out bytesWritten, format)); + Assert.Equal(0, bytesWritten); + + // Longer than needed, succeeds + dest = new byte[Encoding.UTF8.GetByteCount(expected) + 1]; + Assert.True(dt.TryFormat(dest, out bytesWritten, format)); + Assert.Equal(dest.Length - 1, bytesWritten); + Assert.Equal(expected, Encoding.UTF8.GetString(dest.Slice(0, bytesWritten))); + Assert.Equal(0, dest[dest.Length - 1]); + } + } } }