2010-01-15 Atsushi Enomoto <atsushi@ximian.com>
authorAtsushi Eno <atsushieno@gmail.com>
Fri, 15 Jan 2010 10:49:03 +0000 (10:49 -0000)
committerAtsushi Eno <atsushieno@gmail.com>
Fri, 15 Jan 2010 10:49:03 +0000 (10:49 -0000)
* XmlConvert.cs : Do not ignore ticks which are less than a
  millisecond. Remove trailing zeros for milliseconds and ticks.

* XmlConvertTests.cs : add test for ToString(TimeSpan) with small
  ticks.

svn path=/trunk/mcs/; revision=149618

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 a44517fb0178a075dab814d42a6636ad79329e56..093bd5e1bd9e1f4b8edaaf53f6d4b96e3243275f 100644 (file)
@@ -1,3 +1,8 @@
+2010-01-15  Atsushi Enomoto  <atsushi@ximian.com>
+
+       * XmlConvert.cs : Do not ignore ticks which are less than a
+         millisecond. Remove trailing zeros for milliseconds and ticks.
+
 2010-01-15  Atsushi Enomoto  <atsushi@ximian.com>
 
        * XmlConvert.cs : trim spaces when parsing TimeSpan.
index 05a843eaab1a9e653ddac0f428c1be21255e8e3e..4d08f180ac11a777c3b39c619bd4b99d6a1e8edb 100644 (file)
@@ -557,19 +557,25 @@ namespace System.Xml {
                        builder.Append ('P');
                        if (value.Days > 0)
                                builder.Append (value.Days).Append ('D');
-                       if (value.Days > 0 || value.Hours > 0 || value.Minutes > 0 || value.Seconds > 0 || value.Milliseconds > 0) {
+                       long ticks = value.Ticks % TimeSpan.TicksPerMillisecond;
+                       if (value.Days > 0 || value.Hours > 0 || value.Minutes > 0 || value.Seconds > 0 || value.Milliseconds > 0 || ticks > 0) {
                                builder.Append('T');
                                if (value.Hours > 0)
                                        builder.Append (value.Hours).Append ('H');
                                if (value.Minutes > 0) 
                                        builder.Append (value.Minutes).Append ('M');
-                               if (value.Seconds > 0 || value.Milliseconds > 0) {
+                               if (value.Seconds > 0 || value.Milliseconds > 0 || ticks > 0) {
                                        builder.Append (value.Seconds);
-                                       long ticks = value.Ticks % TimeSpan.TicksPerMillisecond;
+                                       bool trimZero = true;
                                        if (ticks > 0)
                                                builder.Append ('.').AppendFormat ("{0:0000000}", value.Ticks % TimeSpan.TicksPerSecond);
                                        else if (value.Milliseconds > 0)
                                                builder.Append ('.').AppendFormat ("{0:000}", value.Milliseconds);
+                                       else
+                                               trimZero = false;
+                                       if (trimZero)
+                                               while (builder [builder.Length - 1] == '0')
+                                                       builder.Remove (builder.Length - 1, 1);
 
                                        builder.Append ('S');
                                }
index ee0829904b43a6d5c25b38bcffa8395daefc68f8..ef94d20275a3fd17dc1c9e4e2123cdb85b50d38c 100644 (file)
@@ -1,3 +1,8 @@
+2010-01-15  Atsushi Enomoto  <atsushi@ximian.com>
+
+       * XmlConvertTests.cs : add test for ToString(TimeSpan) with small
+         ticks.
+
 2010-01-15  Atsushi Enomoto  <atsushi@ximian.com>
 
        * XmlConvertTests.cs : add test for ToTimeSpan() with spaces.
index 15816089a631aff051fcc443f205910aed029527..cc43ddda8b9559ef940a7e5ba0d9f958567ff544 100644 (file)
@@ -370,7 +370,13 @@ namespace MonoTests.System.Xml
                        // bug #77252
                        TimeSpan t1 = TimeSpan.FromTicks (
                                TimeSpan.TicksPerSecond + 1);
-                       Assert.AreEqual ("PT1.0000001S", XmlConvert.ToString (t1));
+                       Assert.AreEqual ("PT1.0000001S", XmlConvert.ToString (t1), "#1");
+
+                       // XAttributeTest.CastTimeSpans():#5d
+                       t1 = new TimeSpan (2710L);
+                       Assert.AreEqual ("PT0.000271S", XmlConvert.ToString (t1), "#2");
+                       t1 = new TimeSpan (27100000L);
+                       Assert.AreEqual ("PT2.71S", XmlConvert.ToString (t1), "#3");
                }
 
                [Test]