Browse Source

2007-04-25 Atsushi Enomoto <[email protected]>

	* XmlConvert.cs : MinValue and MaxValue are unchanged by the
	  serialization mode (unlike DateTime.ToString()).

	* XmlCustomFormatter.cs : fix GenerateToXmlString() as well.

	* XmlConvertTests.cs : added test for MaxValue serialization with
	  every XmlDateTimeSerializationMode.


svn path=/trunk/mcs/; revision=76275
Atsushi Eno 18 years ago
parent
commit
044e2c1ec4

+ 4 - 0
mcs/class/System.XML/System.Xml.Serialization/ChangeLog

@@ -1,3 +1,7 @@
+2007-04-25  Atsushi Enomoto  <[email protected]>
+
+	* XmlCustomFormatter.cs : fix GenerateToXmlString() as well.
+
 2007-04-25  Atsushi Enomoto  <[email protected]>
 
 	* XmlCustomFormatter.cs :

+ 6 - 0
mcs/class/System.XML/System.Xml.Serialization/XmlCustomFormatter.cs

@@ -313,9 +313,15 @@ namespace System.Xml.Serialization {
 				case "boolean": return "(" + value + "?\"true\":\"false\")";
 				case "unsignedByte": return value + ".ToString(CultureInfo.InvariantCulture)";
 				case "char": return "((int)(" + value + ")).ToString(CultureInfo.InvariantCulture)";
+#if NET_2_0
+				case "dateTime": return value + ".ToString(\"yyyy-MM-ddTHH:mm:ss.FFFFFFF\", CultureInfo.InvariantCulture)";
+				case "date": return value + ".ToString(\"yyyy-MM-dd\", CultureInfo.InvariantCulture)";
+				case "time": return value + ".ToString(\"HH:mm:ss.FFFFFFF\", CultureInfo.InvariantCulture)";
+#else
 				case "dateTime": return value + ".ToString(\"yyyy-MM-ddTHH:mm:ss.fffffffzzz\", CultureInfo.InvariantCulture)";
 				case "date": return value + ".ToString(\"yyyy-MM-dd\", CultureInfo.InvariantCulture)";
 				case "time": return value + ".ToString(\"HH:mm:ss.fffffffzzz\", CultureInfo.InvariantCulture)";
+#endif
 				case "decimal": return "XmlConvert.ToString (" + value + ")";
 				case "double": return "XmlConvert.ToString (" + value + ")";
 				case "short": return value + ".ToString(CultureInfo.InvariantCulture)";

+ 5 - 0
mcs/class/System.XML/System.Xml/ChangeLog

@@ -1,3 +1,8 @@
+2007-04-25  Atsushi Enomoto  <[email protected]>
+
+	* XmlConvert.cs : MinValue and MaxValue are unchanged by the
+	  serialization mode (unlike DateTime.ToString()).
+
 2007-04-25  Atsushi Enomoto  <[email protected]>
 
 	* XmlConvert.cs : in 2.0, use F instead of f in dateTime formatting.

+ 11 - 1
mcs/class/System.XML/System.Xml/XmlConvert.cs

@@ -493,17 +493,27 @@ namespace System.Xml {
 #if NET_2_0
 		public static string ToString (DateTime value, XmlDateTimeSerializationMode mode)
 		{
+			// Unlike usual DateTime formatting, it preserves
+			// MaxValue/MinValue as is.
 			string modestr = null;
 			switch (mode) {
 			case XmlDateTimeSerializationMode.Local:
+				return (value == DateTime.MinValue ? DateTime.MinValue : value == DateTime.MaxValue ? value : value.ToLocalTime ()).ToString (
+					"yyyy-MM-ddTHH:mm:ss.FFFFFFFzzz",
+					CultureInfo.InvariantCulture);
+				break;
 			case XmlDateTimeSerializationMode.RoundtripKind:
+				return value.ToString (
+					"yyyy-MM-ddTHH:mm:ss.FFFFFFF",
+					CultureInfo.InvariantCulture);
+				break;
 			default:
 				return value.ToString (
 					"yyyy-MM-ddTHH:mm:ss.FFFFFFFzzz",
 					CultureInfo.InvariantCulture);
 				break;
 			case XmlDateTimeSerializationMode.Utc:
-				return value.ToUniversalTime ().ToString (
+				return (value == DateTime.MinValue ? DateTime.MinValue : value == DateTime.MaxValue ? value : value.ToUniversalTime ()).ToString (
 					"yyyy-MM-ddTHH:mm:ss.FFFFFFFZ",
 					CultureInfo.InvariantCulture);
 				break;

+ 5 - 0
mcs/class/System.XML/Test/System.Xml/ChangeLog

@@ -1,3 +1,8 @@
+2007-04-25  Atsushi Enomoto  <[email protected]>
+
+	* XmlConvertTests.cs : added test for MaxValue serialization with
+	  every XmlDateTimeSerializationMode.
+
 2007-04-25  Atsushi Enomoto  <[email protected]>
 
 	* XmlReaderCommonTests.cs : added test for bug #81451.

+ 12 - 0
mcs/class/System.XML/Test/System.Xml/XmlConvertTests.cs

@@ -592,6 +592,18 @@ namespace MonoTests.System.Xml
 					AssertType.Fail (s + "should not fail");
 			}
 		}
+
+		[Test]
+		public void XmlDateTimeSerializationModeAndMaxValue ()
+		{
+			AssertEquals ("#1", "9999-12-31T23:59:59.9999999", XmlConvert.ToString (DateTime.MaxValue, XmlDateTimeSerializationMode.Unspecified).Substring (0, 27));
+			AssertEquals ("#2", "9999-12-31T23:59:59.9999999Z", XmlConvert.ToString (DateTime.MaxValue, XmlDateTimeSerializationMode.Utc));
+			AssertEquals ("#3", "9999-12-31T23:59:59.9999999", XmlConvert.ToString (DateTime.MaxValue, XmlDateTimeSerializationMode.RoundtripKind));
+			AssertEquals ("#4", "9999-12-31T23:59:59.9999999", XmlConvert.ToString (DateTime.MaxValue, XmlDateTimeSerializationMode.Local).Substring (0, 27));
+			// direct formatting string - no difference
+			AssertEquals ("#5", "9999-12-31T23:59:59.9999999Z", XmlConvert.ToString (DateTime.MaxValue, "yyyy-MM-ddTHH:mm:ss.FFFFFFFZ"));
+			AssertEquals ("#6", "9999-12-31T23:59:59.9999999", XmlConvert.ToString (DateTime.MaxValue, "yyyy-MM-ddTHH:mm:ss.FFFFFFFzzz").Substring (0, 27));
+		}
 #endif
 	}
 }