Author: atsushi
Date: 2007-11-09 09:30:00 -0500 (Fri, 09 Nov 2007)
New Revision: 89316

Modified:
   branches/mono-1-2-6/mcs/class/System.XML/System.Xml/ChangeLog
   branches/mono-1-2-6/mcs/class/System.XML/System.Xml/XmlConvert.cs
   branches/mono-1-2-6/mcs/class/System.XML/Test/System.Xml/ChangeLog
   branches/mono-1-2-6/mcs/class/System.XML/Test/System.Xml/XmlConvertTests.cs
Log:
backport r89305.



Modified: branches/mono-1-2-6/mcs/class/System.XML/System.Xml/ChangeLog
===================================================================
--- branches/mono-1-2-6/mcs/class/System.XML/System.Xml/ChangeLog       
2007-11-09 13:47:37 UTC (rev 89315)
+++ branches/mono-1-2-6/mcs/class/System.XML/System.Xml/ChangeLog       
2007-11-09 14:30:00 UTC (rev 89316)
@@ -1,3 +1,8 @@
+2007-11-09  Atsushi Enomoto  <[EMAIL PROTECTED]>
+
+       * XmlConvert.cs : ToDateTime(XmlDateTimeSerializationMode) should
+         allow more strings than existing one. Fixed bug #339004.
+
 2007-10-30  Atsushi Enomoto  <[EMAIL PROTECTED]>
 
        * XmlConvert.cs : ToDateTime(string,string) should use ParseExact(),

Modified: branches/mono-1-2-6/mcs/class/System.XML/System.Xml/XmlConvert.cs
===================================================================
--- branches/mono-1-2-6/mcs/class/System.XML/System.Xml/XmlConvert.cs   
2007-11-09 13:47:37 UTC (rev 89315)
+++ branches/mono-1-2-6/mcs/class/System.XML/System.Xml/XmlConvert.cs   
2007-11-09 14:30:00 UTC (rev 89316)
@@ -118,7 +118,38 @@
                  "---ddzzz",
                  "---ddZ",
                };
-               
+
+#if NET_2_0
+               static readonly string [] defaultDateTimeFormats = new string 
[] {
+                       "yyyy-MM-ddTHH:mm:ss", // dateTime(1)
+                       "yyyy-MM-ddTHH:mm:ss.FFFFFFF", // dateTime(2)
+                       "yyyy-MM-dd", // date
+                       "HH:mm:ss", // time
+                       "yyyy-MM", // gYearMonth
+                       "yyyy", // gYear
+                       "--MM-dd", // gMonthDay
+                       "---dd", // gDay
+                       };
+
+               static readonly string [] roundtripDateTimeFormats;
+               static readonly string [] localDateTimeFormats;
+               static readonly string [] utcDateTimeFormats;
+
+               static XmlConvert ()
+               {
+                       int l = defaultDateTimeFormats.Length;
+                       roundtripDateTimeFormats = new string [l];
+                       localDateTimeFormats = new string [l];
+                       utcDateTimeFormats = new string [l];
+                       for (int i = 0; i < l; i++) {
+                               string s = defaultDateTimeFormats [i];
+                               localDateTimeFormats [i] = s + "zzz";
+                               roundtripDateTimeFormats [i] = s + 'K';
+                               utcDateTimeFormats [i] = s + 'Z';
+                       }
+               }
+#endif
+
                public XmlConvert()
                {}
 
@@ -298,16 +329,16 @@
                        DateTime dt;
                        switch (mode) {
                        case XmlDateTimeSerializationMode.Local:
-                               dt = ToDateTime (value, 
"yyyy-MM-ddTHH:mm:ss.FFFFFFFzzz");
+                               dt = ToDateTime (value, localDateTimeFormats);
                                return dt == DateTime.MinValue || dt == 
DateTime.MaxValue ? dt : dt.ToLocalTime ();
                        case XmlDateTimeSerializationMode.RoundtripKind:
-                               return ToDateTime (value, 
"yyyy-MM-ddTHH:mm:ss.FFFFFFFK");
+                               return ToDateTime (value, 
roundtripDateTimeFormats);
                        case XmlDateTimeSerializationMode.Utc:
-                               dt = ToDateTime (value, 
"yyyy-MM-ddTHH:mm:ss.FFFFFFFZ");
+                               dt = ToDateTime (value, utcDateTimeFormats);
                                return dt == DateTime.MinValue || dt == 
DateTime.MaxValue ? dt : dt.ToUniversalTime ();
                        case XmlDateTimeSerializationMode.Unspecified:
                        default:
-                               return ToDateTime (value, 
"yyyy-MM-ddTHH:mm:ss.FFFFFFF");
+                               return ToDateTime (value, 
defaultDateTimeFormats);
                        }
                }
 #endif

Modified: branches/mono-1-2-6/mcs/class/System.XML/Test/System.Xml/ChangeLog
===================================================================
--- branches/mono-1-2-6/mcs/class/System.XML/Test/System.Xml/ChangeLog  
2007-11-09 13:47:37 UTC (rev 89315)
+++ branches/mono-1-2-6/mcs/class/System.XML/Test/System.Xml/ChangeLog  
2007-11-09 14:30:00 UTC (rev 89316)
@@ -1,3 +1,7 @@
+2007-11-09  Atsushi Enomoto  <[EMAIL PROTECTED]>
+
+       * XmlConvertTests.cs : added test for #339004 and more.
+
 2007-10-31  Gert Driesen  <[EMAIL PROTECTED]>
 
        * XmlConvertTests.cs: Added link to MS bug report.

Modified: 
branches/mono-1-2-6/mcs/class/System.XML/Test/System.Xml/XmlConvertTests.cs
===================================================================
--- branches/mono-1-2-6/mcs/class/System.XML/Test/System.Xml/XmlConvertTests.cs 
2007-11-09 13:47:37 UTC (rev 89315)
+++ branches/mono-1-2-6/mcs/class/System.XML/Test/System.Xml/XmlConvertTests.cs 
2007-11-09 14:30:00 UTC (rev 89316)
@@ -619,6 +619,55 @@
                        AssertType.AreEqual ('Z', s [s.Length -1], "#2-1");
                        AssertType.AreEqual (DateTimeKind.Utc, 
XmlConvert.ToDateTime (s, XmlDateTimeSerializationMode.RoundtripKind).Kind, 
"#2-2");
                }
+
+               [Test]
+               public void XmlDateTimeSerializationModeSeveralFormats ()
+               {
+                       XmlDateTimeSerializationMode m = 
XmlDateTimeSerializationMode.RoundtripKind;
+                       XmlConvert.ToDateTime ("0001", m);
+                       XmlConvert.ToDateTime ("0001Z", m);
+                       XmlConvert.ToDateTime ("0001+09:00", m);
+                       XmlConvert.ToDateTime ("0001-02", m);
+                       XmlConvert.ToDateTime ("0001-02Z", m);
+                       XmlConvert.ToDateTime ("0001-02+09:00", m);
+                       XmlConvert.ToDateTime ("0001-02-03", m);
+                       XmlConvert.ToDateTime ("0001-02-03Z", m);
+                       XmlConvert.ToDateTime ("0001-02-03+09:00", m);
+                       XmlConvert.ToDateTime ("--02-03", m);
+                       XmlConvert.ToDateTime ("--02-03Z", m);
+                       XmlConvert.ToDateTime ("--02-03+09:00", m);
+                       XmlConvert.ToDateTime ("---03", m);
+                       XmlConvert.ToDateTime ("---03Z", m);
+                       XmlConvert.ToDateTime ("---03+09:00", m);
+                       XmlConvert.ToDateTime ("10:20:30", m);
+                       XmlConvert.ToDateTime ("10:20:30Z", m);
+                       XmlConvert.ToDateTime ("10:20:30+09:00", m);
+                       XmlConvert.ToDateTime ("0001-02-03T10:20:30", m);
+                       XmlConvert.ToDateTime ("0001-02-03T10:20:30Z", m);
+                       XmlConvert.ToDateTime ("0001-02-03T10:20:30+09:00", m);
+                       XmlConvert.ToDateTime ("0001-02-03T10:20:30.00", m);
+                       XmlConvert.ToDateTime ("0001-02-03T10:20:30.00Z", m);
+                       XmlConvert.ToDateTime ("0001-02-03T10:20:30.00+09:00", 
m);
+                       XmlConvert.ToDateTime ("0001-02-03T10:20:30.0000", m);
+                       XmlConvert.ToDateTime ("0001-02-03T10:20:30.0000Z", m);
+                       XmlConvert.ToDateTime 
("0001-02-03T10:20:30.0000+09:00", m);
+
+                       try {
+                               XmlConvert.ToDateTime ("0001-02-03T", m);
+                               AssertType.Fail ("#1");
+                       } catch (FormatException) {
+                       }
+                       try {
+                               XmlConvert.ToDateTime ("0001-02-03T10:20", m);
+                               AssertType.Fail ("#2");
+                       } catch (FormatException) {
+                       }
+                       try {
+                               XmlConvert.ToDateTime ("0001-02-03T10:20:30.", 
m);
+                               AssertType.Fail ("#3");
+                       } catch (FormatException) {
+                       }
+               }
 #endif
        }
 }

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to