Author: atsushi
Date: 2006-01-16 01:06:54 -0500 (Mon, 16 Jan 2006)
New Revision: 55620

Modified:
   trunk/mcs/class/System.XML/System.Xml/ChangeLog
   trunk/mcs/class/System.XML/System.Xml/XmlConvert.cs
   trunk/mcs/class/System.XML/Test/System.Xml/ChangeLog
   trunk/mcs/class/System.XML/Test/System.Xml/XmlConvertTests.cs
Log:
2006-01-16  Atsushi Enomoto <[EMAIL PROTECTED]>

        * XmlConvert.cs : handle Ticks. Fixed bug #77252.

        * XmlConvertTests.cs : added test for bug #77252.



Modified: trunk/mcs/class/System.XML/System.Xml/ChangeLog
===================================================================
--- trunk/mcs/class/System.XML/System.Xml/ChangeLog     2006-01-16 05:33:55 UTC 
(rev 55619)
+++ trunk/mcs/class/System.XML/System.Xml/ChangeLog     2006-01-16 06:06:54 UTC 
(rev 55620)
@@ -1,3 +1,7 @@
+2006-01-16  Atsushi Enomoto <[EMAIL PROTECTED]>
+
+       * XmlConvert.cs : handle Ticks. Fixed bug #77252.
+
 2006-01-13  Atsushi Enomoto <[EMAIL PROTECTED]>
 
        * XmlTextWriter.cs : Fixed bug #77082.

Modified: trunk/mcs/class/System.XML/System.Xml/XmlConvert.cs
===================================================================
--- trunk/mcs/class/System.XML/System.Xml/XmlConvert.cs 2006-01-16 05:33:55 UTC 
(rev 55619)
+++ trunk/mcs/class/System.XML/System.Xml/XmlConvert.cs 2006-01-16 06:06:54 UTC 
(rev 55620)
@@ -439,8 +439,12 @@
                                        builder.Append (value.Minutes).Append 
('M');
                                if (value.Seconds > 0 || value.Milliseconds > 
0) {
                                        builder.Append (value.Seconds);
-                                       if (value.Milliseconds > 0)
+                                       long ticks = value.Ticks % 
TimeSpan.TicksPerMillisecond;
+                                       if (ticks > 0)
+                                               builder.Append 
('.').AppendFormat ("{0:0000000}", value.Ticks % TimeSpan.TicksPerSecond);
+                                       else if (value.Milliseconds > 0)
                                                builder.Append 
('.').AppendFormat ("{0:000}", value.Milliseconds);
+
                                        builder.Append ('S');
                                }
                        }
@@ -542,7 +546,7 @@
                        int hours = 0;
                        int minutes = 0;
                        int seconds = 0;
-                       int milliseconds = 0;
+                       long ticks = 0;
                        int parsedDigits = 0;
 
                        bool error = false;
@@ -563,10 +567,10 @@
                                        parsedDigits = i - start;
                                int value = int.Parse (s.Substring (start, i - 
start), CultureInfo.InvariantCulture);
                                if (parseStep == 7) {
-                                       // adjust to 3 digits so that it makes 
sense as millisecond digits
-                                       for (; parsedDigits > 3; parsedDigits--)
+                                       // adjust to 7 digits so that it makes 
sense as millisecond digits
+                                       for (; parsedDigits > 7; parsedDigits--)
                                                value /= 10;
-                                       for (; parsedDigits < 3; parsedDigits++)
+                                       for (; parsedDigits < 7; parsedDigits++)
                                                value *= 10;
                                }
                                switch (s [i]) {
@@ -604,7 +608,7 @@
                                        break;
                                case 'S':
                                        if (parseStep == 7)
-                                               milliseconds = value;
+                                               ticks = value;
                                        else
                                                seconds = value;
                                        if (!isTime || parseStep > 7)
@@ -629,7 +633,8 @@
                        }
                        if (error)
                                throw new ArgumentException ("Invalid format 
string for duration schema datatype.");
-                       TimeSpan ts = new TimeSpan (days, hours, minutes, 
seconds, milliseconds);
+                       TimeSpan ts = new TimeSpan (days, hours, minutes, 
seconds);
+                       ts = ts.Add (TimeSpan.FromTicks (ticks));
                        return minusValue ? -ts : ts;
                }
 

Modified: trunk/mcs/class/System.XML/Test/System.Xml/ChangeLog
===================================================================
--- trunk/mcs/class/System.XML/Test/System.Xml/ChangeLog        2006-01-16 
05:33:55 UTC (rev 55619)
+++ trunk/mcs/class/System.XML/Test/System.Xml/ChangeLog        2006-01-16 
06:06:54 UTC (rev 55620)
@@ -1,3 +1,7 @@
+2006-01-16  Atsushi Enomoto  <[EMAIL PROTECTED]>
+
+       * XmlConvertTests.cs : added test for bug #77252.
+
 2006-01-13  Atsushi Enomoto  <[EMAIL PROTECTED]>
 
        * XsdValidatingReaderTests.cs : test from bug #77241.

Modified: trunk/mcs/class/System.XML/Test/System.Xml/XmlConvertTests.cs
===================================================================
--- trunk/mcs/class/System.XML/Test/System.Xml/XmlConvertTests.cs       
2006-01-16 05:33:55 UTC (rev 55619)
+++ trunk/mcs/class/System.XML/Test/System.Xml/XmlConvertTests.cs       
2006-01-16 06:06:54 UTC (rev 55620)
@@ -342,8 +342,17 @@
                        AssertEquals (33, dateString.Length);
                        AssertEquals ("2003-05-05T00:00:00.0000000", 
dateString.Substring (0, 27));
                }
-               
+
                [Test]
+               public void FromTimeSpan ()
+               {
+                       // bug #77252
+                       TimeSpan t1 = TimeSpan.FromTicks (
+                               TimeSpan.TicksPerSecond + 1);
+                       AssertEquals ("PT1.0000001S", XmlConvert.ToString (t1));
+               }
+
+               [Test]
                public void ToTimeSpan ()//not done
                {
                        AssertEquals ("#1", new TimeSpan (0, 0, 0, 0, 1),
@@ -357,6 +366,11 @@
                                XmlConvert.ToTimeSpan ("PT0.010S"));
                        AssertEquals ("#5", new TimeSpan (0, 0, 0, 0, 10),
                                XmlConvert.ToTimeSpan ("PT0.01S"));
+
+                       // bug #77252
+                       AssertEquals ("#6",
+                               TimeSpan.FromTicks (TimeSpan.TicksPerSecond + 
1),
+                               XmlConvert.ToTimeSpan ("PT1.0000001S"));
                }
                
                [Test]

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

Reply via email to