@@ -2008,6 +2008,57 @@ public static void Parse_ValidInput_Succeeds(string input, CultureInfo culture,
20082008 Assert . Equal ( expected , DateTime . Parse ( input , culture ) ) ;
20092009 }
20102010
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+
20112062 public static IEnumerable < object [ ] > ParseExact_ValidInput_Succeeds_MemberData ( )
20122063 {
20132064 foreach ( DateTimeStyles style in new [ ] { DateTimeStyles . None , DateTimeStyles . AllowWhiteSpaces } )
0 commit comments