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