@@ -2008,6 +2008,57 @@ public static void Parse_ValidInput_Succeeds(string input, CultureInfo culture,
2008
2008
Assert . Equal ( expected , DateTime . Parse ( input , culture ) ) ;
2009
2009
}
2010
2010
2011
+ public static IEnumerable < object [ ] > FormatAndParse_DifferentUnicodeSpaces_Succeeds_MemberData ( )
2012
+ {
2013
+ char [ ] spaceTypes = new [ ] { ' ' , // space
2014
+ '\u00A0 ' , // no-break space
2015
+ '\u202F ' , // narrow no-break space
2016
+ } ;
2017
+ return spaceTypes . SelectMany ( formatSpaceChar => spaceTypes . Select ( parseSpaceChar => new object [ ] { formatSpaceChar , parseSpaceChar } ) ) ;
2018
+ }
2019
+
2020
+ [ Theory ]
2021
+ [ MemberData ( nameof ( FormatAndParse_DifferentUnicodeSpaces_Succeeds_MemberData ) ) ]
2022
+ public void FormatAndParse_DifferentUnicodeSpaces_Succeeds ( char formatSpaceChar , char parseSpaceChar )
2023
+ {
2024
+ var dateTime = new DateTime ( 2020 , 5 , 7 , 9 , 37 , 40 , DateTimeKind . Local ) ;
2025
+
2026
+ DateTimeFormatInfo formatDtfi = CreateDateTimeFormatInfo ( formatSpaceChar ) ;
2027
+ string formatted = dateTime . ToString ( formatDtfi ) ;
2028
+ Assert . Contains ( formatSpaceChar , formatted ) ;
2029
+
2030
+ DateTimeFormatInfo parseDtfi = CreateDateTimeFormatInfo ( parseSpaceChar ) ;
2031
+ Assert . Equal ( dateTime , DateTime . Parse ( formatted , parseDtfi ) ) ;
2032
+
2033
+ static DateTimeFormatInfo CreateDateTimeFormatInfo ( char spaceChar )
2034
+ {
2035
+ return new DateTimeFormatInfo ( )
2036
+ {
2037
+ Calendar = DateTimeFormatInfo . InvariantInfo . Calendar ,
2038
+ CalendarWeekRule = DateTimeFormatInfo . InvariantInfo . CalendarWeekRule ,
2039
+ FirstDayOfWeek = DayOfWeek . Monday ,
2040
+ AMDesignator = "AM" ,
2041
+ DateSeparator = "/" ,
2042
+ FullDateTimePattern = $ "dddd,{ spaceChar } MMMM{ spaceChar } d,{ spaceChar } yyyy{ spaceChar } h:mm:ss{ spaceChar } tt",
2043
+ LongDatePattern = $ "dddd,{ spaceChar } MMMM{ spaceChar } d,{ spaceChar } yyyy",
2044
+ LongTimePattern = $ "h:mm:ss{ spaceChar } tt",
2045
+ MonthDayPattern = "MMMM d" ,
2046
+ PMDesignator = "PM" ,
2047
+ ShortDatePattern = "M/d/yyyy" ,
2048
+ ShortTimePattern = $ "h:mm{ spaceChar } tt",
2049
+ TimeSeparator = ":" ,
2050
+ YearMonthPattern = $ "MMMM{ spaceChar } yyyy",
2051
+ AbbreviatedDayNames = new [ ] { "Sun" , "Mon" , "Tue" , "Wed" , "Thu" , "Fri" , "Sat" } ,
2052
+ ShortestDayNames = new [ ] { "Su" , "Mo" , "Tu" , "We" , "Th" , "Fr" , "Sa" } ,
2053
+ DayNames = new [ ] { "Sunday" , "Monday" , "Tuesday" , "Wednesday" , "Thursday" , "Friday" , "Saturday" } ,
2054
+ AbbreviatedMonthNames = new [ ] { "Jan" , "Feb" , "Mar" , "Apr" , "May" , "Jun" , "Jul" , "Aug" , "Sep" , "Oct" , "Nov" , "Dec" , "" } ,
2055
+ MonthNames = new [ ] { "January" , "February" , "March" , "April" , "May" , "June" , "July" , "August" , "September" , "October" , "November" , "December" , "" } ,
2056
+ AbbreviatedMonthGenitiveNames = new [ ] { "Jan" , "Feb" , "Mar" , "Apr" , "May" , "Jun" , "Jul" , "Aug" , "Sep" , "Oct" , "Nov" , "Dec" , "" } ,
2057
+ MonthGenitiveNames = new [ ] { "January" , "February" , "March" , "April" , "May" , "June" , "July" , "August" , "September" , "October" , "November" , "December" , "" }
2058
+ } ;
2059
+ }
2060
+ }
2061
+
2011
2062
public static IEnumerable < object [ ] > ParseExact_ValidInput_Succeeds_MemberData ( )
2012
2063
{
2013
2064
foreach ( DateTimeStyles style in new [ ] { DateTimeStyles . None , DateTimeStyles . AllowWhiteSpaces } )
0 commit comments