2007-04-25 Atsushi Enomoto <atsushi@ximian.com>
authorAtsushi Eno <atsushieno@gmail.com>
Wed, 25 Apr 2007 19:31:47 +0000 (19:31 -0000)
committerAtsushi Eno <atsushieno@gmail.com>
Wed, 25 Apr 2007 19:31:47 +0000 (19:31 -0000)
* 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

mcs/class/System.XML/System.Xml.Serialization/ChangeLog
mcs/class/System.XML/System.Xml.Serialization/XmlCustomFormatter.cs
mcs/class/System.XML/System.Xml/ChangeLog
mcs/class/System.XML/System.Xml/XmlConvert.cs
mcs/class/System.XML/Test/System.Xml/ChangeLog
mcs/class/System.XML/Test/System.Xml/XmlConvertTests.cs

index 97161f1caa6d9945128f831d015b437d967f2d13..9c9b6baa94f8d6da00b8552954c369f153664800 100644 (file)
@@ -1,3 +1,7 @@
+2007-04-25  Atsushi Enomoto  <atsushi@ximian.com>
+
+       * XmlCustomFormatter.cs : fix GenerateToXmlString() as well.
+
 2007-04-25  Atsushi Enomoto  <atsushi@ximian.com>
 
        * XmlCustomFormatter.cs :
index f645ea9d4f05898833b69ecf431e66cf25422a5f..5dfa05f05723851e80d525ac64702b1f97b95121 100644 (file)
@@ -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)";
index 43d60bcb6d89b4a5e6fa904109d4103495cc2682..6b8474c1b987bda4da84c8cadddffc6ecfb108cc 100644 (file)
@@ -1,3 +1,8 @@
+2007-04-25  Atsushi Enomoto  <atsushi@ximian.com>
+
+       * XmlConvert.cs : MinValue and MaxValue are unchanged by the
+         serialization mode (unlike DateTime.ToString()).
+
 2007-04-25  Atsushi Enomoto  <atsushi@ximian.com>
 
        * XmlConvert.cs : in 2.0, use F instead of f in dateTime formatting.
index ebbd8f43f13e684f7016124e0fb2954851d46e41..1c0a63eb88d80c39c5bb5cdd9f338bb1546398ad 100644 (file)
@@ -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;
index 0130bdba5ce2b9e36608f809cf2ca7c97003a55f..31b844ea50f1b252985e57b68c7772661fbb69f3 100644 (file)
@@ -1,3 +1,8 @@
+2007-04-25  Atsushi Enomoto  <atsushi@ximian.com>
+
+       * XmlConvertTests.cs : added test for MaxValue serialization with
+         every XmlDateTimeSerializationMode.
+
 2007-04-25  Atsushi Enomoto  <atsushi@ximian.com>
 
        * XmlReaderCommonTests.cs : added test for bug #81451.
index cc5fd9e69d5e7a5190a1b2f61051634a244be12c..09c73e2ad37bb6a1e432327438d08f62608727ef 100644 (file)
@@ -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
        }
 }