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