Fix/31527 invalid currentculture applying (#85297)
authorMaksim Golev <mixim33@yandex.ru>
Sun, 30 Apr 2023 16:58:26 +0000 (20:58 +0400)
committerGitHub <noreply@github.com>
Sun, 30 Apr 2023 16:58:26 +0000 (09:58 -0700)
Co-authored-by: Maksim Golev <mgolev@htc-cs.ru>
src/libraries/System.ComponentModel.TypeConverter/src/System/ComponentModel/DateOnlyConverter.cs
src/libraries/System.ComponentModel.TypeConverter/src/System/ComponentModel/DateTimeConverter.cs
src/libraries/System.ComponentModel.TypeConverter/src/System/ComponentModel/DateTimeOffsetConverter.cs
src/libraries/System.ComponentModel.TypeConverter/src/System/ComponentModel/TimeOnlyConverter.cs
src/libraries/System.ComponentModel.TypeConverter/tests/DateOnlyConverterTests.cs
src/libraries/System.ComponentModel.TypeConverter/tests/DateTimeConverterTests.cs
src/libraries/System.ComponentModel.TypeConverter/tests/DateTimeOffsetConverterTests.cs
src/libraries/System.ComponentModel.TypeConverter/tests/TimeOnlyConverterTests.cs
src/libraries/System.ComponentModel.TypeConverter/tests/TypeConverterTestBase.cs

index 5bfe822..098aab5 100644 (file)
@@ -4,7 +4,6 @@
 using System.ComponentModel.Design.Serialization;
 using System.Diagnostics.CodeAnalysis;
 using System.Globalization;
-using System.Reflection;
 
 namespace System.ComponentModel
 {
@@ -86,16 +85,12 @@ namespace System.ComponentModel
 
                 culture ??= CultureInfo.CurrentCulture;
 
-                DateTimeFormatInfo? formatInfo = (DateTimeFormatInfo?)culture.GetFormat(typeof(DateTimeFormatInfo));
-
                 if (culture == CultureInfo.InvariantCulture)
                 {
                     return dateOnly.ToString("yyyy-MM-dd", culture);
                 }
 
-                string format = formatInfo!.ShortDatePattern;
-
-                return dateOnly.ToString(format, CultureInfo.CurrentCulture);
+                return dateOnly.ToString(culture.DateTimeFormat.ShortDatePattern, culture);
             }
 
             if (destinationType == typeof(InstanceDescriptor) && value is DateOnly date)
index 9eeffb9..8f94f44 100644 (file)
@@ -114,7 +114,7 @@ namespace System.ComponentModel
                     format = formatInfo!.ShortDatePattern + " " + formatInfo.ShortTimePattern;
                 }
 
-                return dt.ToString(format, CultureInfo.CurrentCulture);
+                return dt.ToString(format, culture);
             }
 
             if (destinationType == typeof(InstanceDescriptor) && value is DateTime)
index 7ac65b5..3c7608b 100644 (file)
@@ -126,7 +126,7 @@ namespace System.ComponentModel
                     format = formatInfo!.ShortDatePattern + " " + formatInfo.ShortTimePattern + " zzz";
                 }
 
-                return dto.ToString(format, CultureInfo.CurrentCulture);
+                return dto.ToString(format, culture);
             }
             if (destinationType == typeof(InstanceDescriptor) && value is DateTimeOffset)
             {
index 4180508..4995940 100644 (file)
@@ -4,7 +4,6 @@
 using System.ComponentModel.Design.Serialization;
 using System.Diagnostics.CodeAnalysis;
 using System.Globalization;
-using System.Reflection;
 
 namespace System.ComponentModel
 {
@@ -86,9 +85,7 @@ namespace System.ComponentModel
 
                 culture ??= CultureInfo.CurrentCulture;
 
-                DateTimeFormatInfo formatInfo = (DateTimeFormatInfo)culture.GetFormat(typeof(DateTimeFormatInfo))!;
-
-                return timeOnly.ToString(formatInfo.ShortTimePattern, CultureInfo.CurrentCulture);
+                return timeOnly.ToString(culture.DateTimeFormat.ShortTimePattern, culture);
             }
 
             if (destinationType == typeof(InstanceDescriptor) && value is TimeOnly time)
index 8759db9..55d7414 100644 (file)
@@ -4,8 +4,6 @@
 using System.Collections.Generic;
 using System.ComponentModel.Design.Serialization;
 using System.Globalization;
-using System.Reflection;
-using Microsoft.DotNet.RemoteExecutor;
 using Xunit;
 
 namespace System.ComponentModel.Tests
@@ -31,12 +29,19 @@ namespace System.ComponentModel.Tests
 
         public override IEnumerable<ConvertTest> ConvertToTestData()
         {
+            CultureInfo frenchCulture = new CultureInfo("fr-FR");
             CultureInfo polandCulture = new CultureInfo("pl-PL");
             DateTimeFormatInfo formatInfo = CultureInfo.CurrentCulture.DateTimeFormat;
             DateOnly dateOnly = new DateOnly(1998, 12, 5);
             yield return ConvertTest.Valid(dateOnly, dateOnly.ToString(formatInfo.ShortDatePattern));
-            yield return ConvertTest.Valid(dateOnly, dateOnly.ToString(polandCulture.DateTimeFormat.ShortDatePattern, polandCulture.DateTimeFormat))
+            yield return ConvertTest.Valid(dateOnly, dateOnly.ToString(frenchCulture.DateTimeFormat.ShortDatePattern, frenchCulture.DateTimeFormat), frenchCulture)
+                .WithRemoteInvokeCulture(frenchCulture);
+            yield return ConvertTest.Valid(dateOnly, dateOnly.ToString(frenchCulture.DateTimeFormat.ShortDatePattern, frenchCulture.DateTimeFormat), frenchCulture)
                 .WithRemoteInvokeCulture(polandCulture);
+            yield return ConvertTest.Valid(dateOnly, dateOnly.ToString(polandCulture.DateTimeFormat.ShortDatePattern, polandCulture.DateTimeFormat), polandCulture)
+                .WithRemoteInvokeCulture(polandCulture);
+            yield return ConvertTest.Valid(dateOnly, dateOnly.ToString(polandCulture.DateTimeFormat.ShortDatePattern, polandCulture.DateTimeFormat), polandCulture)
+                .WithRemoteInvokeCulture(frenchCulture);
             yield return ConvertTest.Valid(dateOnly, "1998-12-05", CultureInfo.InvariantCulture)
                 .WithRemoteInvokeCulture(polandCulture);
 
index 0b4da49..076e50b 100644 (file)
@@ -4,8 +4,6 @@
 using System.Collections.Generic;
 using System.ComponentModel.Design.Serialization;
 using System.Globalization;
-using System.Reflection;
-using Microsoft.DotNet.RemoteExecutor;
 using Xunit;
 
 namespace System.ComponentModel.Tests
@@ -31,19 +29,32 @@ namespace System.ComponentModel.Tests
 
         public override IEnumerable<ConvertTest> ConvertToTestData()
         {
+            CultureInfo frenchCulture = new CultureInfo("fr-FR");
             CultureInfo polandCulture = new CultureInfo("pl-PL");
             DateTimeFormatInfo formatInfo = CultureInfo.CurrentCulture.DateTimeFormat;
             DateTime date = new DateTime(1998, 12, 5);
             yield return ConvertTest.Valid(date, date.ToString(formatInfo.ShortDatePattern));
-            yield return ConvertTest.Valid(date, date.ToString(polandCulture.DateTimeFormat.ShortDatePattern, polandCulture.DateTimeFormat))
+            yield return ConvertTest.Valid(date, date.ToString(frenchCulture.DateTimeFormat.ShortDatePattern, frenchCulture.DateTimeFormat), frenchCulture)
+                .WithRemoteInvokeCulture(frenchCulture);
+            yield return ConvertTest.Valid(date, date.ToString(frenchCulture.DateTimeFormat.ShortDatePattern, frenchCulture.DateTimeFormat), frenchCulture)
                 .WithRemoteInvokeCulture(polandCulture);
+            yield return ConvertTest.Valid(date, date.ToString(polandCulture.DateTimeFormat.ShortDatePattern, polandCulture.DateTimeFormat), polandCulture)
+                .WithRemoteInvokeCulture(polandCulture);
+            yield return ConvertTest.Valid(date, date.ToString(polandCulture.DateTimeFormat.ShortDatePattern, polandCulture.DateTimeFormat), polandCulture)
+                .WithRemoteInvokeCulture(frenchCulture);
             yield return ConvertTest.Valid(date, "1998-12-05", CultureInfo.InvariantCulture)
                 .WithRemoteInvokeCulture(polandCulture);
 
             DateTime dateWithTime = new DateTime(1998, 12, 5, 22, 30, 30);
             yield return ConvertTest.Valid(dateWithTime, dateWithTime.ToString(formatInfo.ShortDatePattern + " " + formatInfo.ShortTimePattern));
-            yield return ConvertTest.Valid(dateWithTime, dateWithTime.ToString(polandCulture.DateTimeFormat.ShortDatePattern + " " + polandCulture.DateTimeFormat.ShortTimePattern, polandCulture.DateTimeFormat))
+            yield return ConvertTest.Valid(dateWithTime, dateWithTime.ToString(frenchCulture.DateTimeFormat.ShortDatePattern + " " + frenchCulture.DateTimeFormat.ShortTimePattern, frenchCulture.DateTimeFormat), frenchCulture)
+                .WithRemoteInvokeCulture(frenchCulture);
+            yield return ConvertTest.Valid(dateWithTime, dateWithTime.ToString(frenchCulture.DateTimeFormat.ShortDatePattern + " " + frenchCulture.DateTimeFormat.ShortTimePattern, frenchCulture.DateTimeFormat), frenchCulture)
+                .WithRemoteInvokeCulture(polandCulture);
+            yield return ConvertTest.Valid(dateWithTime, dateWithTime.ToString(polandCulture.DateTimeFormat.ShortDatePattern + " " + polandCulture.DateTimeFormat.ShortTimePattern, polandCulture.DateTimeFormat), polandCulture)
                 .WithRemoteInvokeCulture(polandCulture);
+            yield return ConvertTest.Valid(dateWithTime, dateWithTime.ToString(polandCulture.DateTimeFormat.ShortDatePattern + " " + polandCulture.DateTimeFormat.ShortTimePattern, polandCulture.DateTimeFormat), polandCulture)
+                .WithRemoteInvokeCulture(frenchCulture);
             yield return ConvertTest.Valid(dateWithTime, "12/05/1998 22:30:30", CultureInfo.InvariantCulture)
                 .WithRemoteInvokeCulture(polandCulture);
 
index 9ff1db0..52727ff 100644 (file)
@@ -29,19 +29,32 @@ namespace System.ComponentModel.Tests
 
         public override IEnumerable<ConvertTest> ConvertToTestData()
         {
+            CultureInfo frenchCulture = new CultureInfo("fr-FR");
             CultureInfo polandCulture = new CultureInfo("pl-PL");
             DateTimeFormatInfo formatInfo = CultureInfo.CurrentCulture.DateTimeFormat;
             DateTimeOffset offset = new DateTimeOffset(new DateTime(1998, 12, 5));
             yield return ConvertTest.Valid(offset, offset.ToString(formatInfo.ShortDatePattern + " zzz"));
-            yield return ConvertTest.Valid(offset, offset.ToString(polandCulture.DateTimeFormat.ShortDatePattern + " zzz", polandCulture.DateTimeFormat))
-                .WithRemoteInvokeCulture(polandCulture);
+            yield return ConvertTest.Valid(offset, offset.ToString(frenchCulture.DateTimeFormat.ShortDatePattern + " zzz", frenchCulture.DateTimeFormat), frenchCulture)
+            .WithRemoteInvokeCulture(frenchCulture);
+            yield return ConvertTest.Valid(offset, offset.ToString(frenchCulture.DateTimeFormat.ShortDatePattern + " zzz", frenchCulture.DateTimeFormat), frenchCulture)
+            .WithRemoteInvokeCulture(polandCulture);
+            yield return ConvertTest.Valid(offset, offset.ToString(polandCulture.DateTimeFormat.ShortDatePattern + " zzz", polandCulture.DateTimeFormat), polandCulture)
+            .WithRemoteInvokeCulture(polandCulture);
+            yield return ConvertTest.Valid(offset, offset.ToString(polandCulture.DateTimeFormat.ShortDatePattern + " zzz", polandCulture.DateTimeFormat), polandCulture)
+                .WithRemoteInvokeCulture(frenchCulture);
             yield return ConvertTest.Valid(offset, offset.ToString("yyyy-MM-dd zzz", CultureInfo.InvariantCulture), CultureInfo.InvariantCulture)
                 .WithRemoteInvokeCulture(polandCulture);
 
             DateTimeOffset offsetWithTime = new DateTimeOffset(new DateTime(1998, 12, 5, 22, 30, 30));
             yield return ConvertTest.Valid(offsetWithTime, offsetWithTime.ToString(formatInfo.ShortDatePattern + " " + formatInfo.ShortTimePattern + " zzz"));
-            yield return ConvertTest.Valid(offsetWithTime, offsetWithTime.ToString(polandCulture.DateTimeFormat.ShortDatePattern + " " + polandCulture.DateTimeFormat.ShortTimePattern + " zzz", polandCulture.DateTimeFormat))
+            yield return ConvertTest.Valid(offsetWithTime, offsetWithTime.ToString(frenchCulture.DateTimeFormat.ShortDatePattern + " " + frenchCulture.DateTimeFormat.ShortTimePattern + " zzz", frenchCulture.DateTimeFormat), frenchCulture)
+                .WithRemoteInvokeCulture(frenchCulture);
+            yield return ConvertTest.Valid(offsetWithTime, offsetWithTime.ToString(frenchCulture.DateTimeFormat.ShortDatePattern + " " + frenchCulture.DateTimeFormat.ShortTimePattern + " zzz", frenchCulture.DateTimeFormat), frenchCulture)
+                .WithRemoteInvokeCulture(polandCulture);
+            yield return ConvertTest.Valid(offsetWithTime, offsetWithTime.ToString(polandCulture.DateTimeFormat.ShortDatePattern + " " + polandCulture.DateTimeFormat.ShortTimePattern + " zzz", polandCulture.DateTimeFormat), polandCulture)
                 .WithRemoteInvokeCulture(polandCulture);
+            yield return ConvertTest.Valid(offsetWithTime, offsetWithTime.ToString(polandCulture.DateTimeFormat.ShortDatePattern + " " + polandCulture.DateTimeFormat.ShortTimePattern + " zzz", polandCulture.DateTimeFormat), polandCulture)
+                .WithRemoteInvokeCulture(frenchCulture);
             yield return ConvertTest.Valid(offsetWithTime, offsetWithTime.ToString(CultureInfo.InvariantCulture), CultureInfo.InvariantCulture)
                 .WithRemoteInvokeCulture(polandCulture);
 
index 15cf43e..c9d032e 100644 (file)
@@ -4,8 +4,6 @@
 using System.Collections.Generic;
 using System.ComponentModel.Design.Serialization;
 using System.Globalization;
-using System.Reflection;
-using Microsoft.DotNet.RemoteExecutor;
 using Xunit;
 
 namespace System.ComponentModel.Tests
@@ -37,18 +35,30 @@ namespace System.ComponentModel.Tests
 
         public override IEnumerable<ConvertTest> ConvertToTestData()
         {
+            CultureInfo egyptCulture = new CultureInfo("ar-EG");
             CultureInfo polandCulture = new CultureInfo("pl-PL");
             DateTimeFormatInfo formatInfo = CultureInfo.CurrentCulture.DateTimeFormat;
             TimeOnly timeOnly = new TimeOnly(10, 30, 50);
+            TimeOnly timeOnlyWithMultipleRepresentation = new TimeOnly(13, 14, 15);
 
             yield return ConvertTest.Valid(timeOnly, timeOnly.ToString(formatInfo.ShortTimePattern));
 
             yield return ConvertTest.Valid(timeOnly, timeOnly.ToString(polandCulture.DateTimeFormat.ShortTimePattern, polandCulture.DateTimeFormat))
                 .WithRemoteInvokeCulture(polandCulture);
 
+            yield return ConvertTest.Valid(timeOnly, timeOnly.ToString(polandCulture.DateTimeFormat.ShortTimePattern, polandCulture.DateTimeFormat), polandCulture)
+                .WithRemoteInvokeCulture(egyptCulture);
+
             yield return ConvertTest.Valid(timeOnly, "10:30", CultureInfo.InvariantCulture);
 
 
+            yield return ConvertTest.Valid(timeOnlyWithMultipleRepresentation, timeOnlyWithMultipleRepresentation.ToString(egyptCulture.DateTimeFormat.ShortTimePattern, egyptCulture.DateTimeFormat), egyptCulture)
+                .WithRemoteInvokeCulture(egyptCulture);
+
+            yield return ConvertTest.Valid(timeOnlyWithMultipleRepresentation, timeOnlyWithMultipleRepresentation.ToString(egyptCulture.DateTimeFormat.ShortTimePattern, egyptCulture.DateTimeFormat), egyptCulture)
+                .WithRemoteInvokeCulture(polandCulture);
+
+
             yield return ConvertTest.Valid(TimeOnly.MinValue, string.Empty);
 
             yield return ConvertTest.Valid(
index 5277393..ce84f05 100644 (file)
@@ -3,15 +3,13 @@
 
 using System.Collections.Generic;
 using System.ComponentModel.Design.Serialization;
-using System.Diagnostics;
 using System.Globalization;
-using System.Linq;
 using System.IO;
+using System.Linq;
 using System.Runtime.Serialization;
 using System.Runtime.Serialization.Formatters.Binary;
-using Microsoft.DotNet.RemoteExecutor;
-using Xunit;
 using System.Tests;
+using Xunit;
 
 namespace System.ComponentModel.Tests
 {