2 // System.Xml.XmlConvertTests.cs
4 // Authors: Atsushi Enomoto (ginga@kit.hi-ho.ne.jp), Jon Kessler (jwkpiano1@comcast.net)
6 // (C) 2003 Atsushi Enomoto, Jon Kessler
10 using System.Globalization;
12 using NUnit.Framework;
14 using AssertType = NUnit.Framework.Assert;
16 namespace MonoTests.System.Xml
19 public class XmlConvertTests : Assertion
21 private void AssertName (string result, string source)
24 XmlConvert.EncodeName (source));
27 private void AssertNmToken (string result, string source)
30 XmlConvert.EncodeNmToken (source));
34 public void DecodeName ()
36 AssertEquals (null, XmlConvert.DecodeName (null));
37 AssertEquals ("", XmlConvert.DecodeName (""));
38 AssertEquals ("Test", XmlConvert.DecodeName ("Test"));
39 AssertEquals ("_Test", XmlConvert.DecodeName ("_Test"));
40 AssertEquals ("_hello_friends", XmlConvert.DecodeName ("_hello_friends"));
41 AssertEquals ("_hello friends", XmlConvert.DecodeName ("_hello friends"));
42 AssertEquals (" ", XmlConvert.DecodeName ("_x0020_"));
46 public void EncodeLocalName ()
48 AssertNull (XmlConvert.EncodeLocalName (null));
49 AssertEquals (String.Empty, XmlConvert.EncodeLocalName (String.Empty));
50 AssertEquals ("Hello_x003A__x0020_", XmlConvert.EncodeLocalName ("Hello: "));
51 AssertEquals ("Hello", XmlConvert.EncodeLocalName ("Hello"));
55 public void EncodeName ()
57 AssertNull (XmlConvert.EncodeName (null));
58 AssertEquals (String.Empty, XmlConvert.EncodeName (String.Empty));
59 AssertName ("Test", "Test");
60 AssertName ("Hello_x0020_my_x0020_friends.", "Hello my friends.");
61 AssertName ("_x0031_23", "123");
62 AssertName ("_x005F_x0031_23", "_x0031_23");
66 public void EncodeNmToken ()
68 AssertNull (XmlConvert.EncodeNmToken (null));
69 AssertNmToken ("Test", "Test");
70 AssertNmToken ("Hello_x0020_my_x0020_friends.", "Hello my friends.");
71 AssertNmToken ("123", "123");
72 AssertNmToken ("_x005F_x0031_23", "_x0031_23");
76 [ExpectedException (typeof (XmlException))]
77 public void EncodeNmTokenError ()
79 XmlConvert.EncodeNmToken (String.Empty);
83 public void ToBoolean ()
85 AssertEquals (true, XmlConvert.ToBoolean (" 1 "));
86 AssertEquals (true, XmlConvert.ToBoolean (" true "));
87 AssertEquals (false, XmlConvert.ToBoolean (" 0 "));
88 AssertEquals (false, XmlConvert.ToBoolean (" false "));
91 AssertEquals (false, XmlConvert.ToBoolean (" invalid "));
93 catch (FormatException)
101 AssertEquals (255, XmlConvert.ToByte ("255"));
105 public void ToChar ()
107 AssertEquals ('x', XmlConvert.ToChar ("x"));
111 public void ToDateTime ()
114 AssertEquals (632001798000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00").Ticks);
115 AssertEquals (632001798000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.0").Ticks);
116 AssertEquals (632001798000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.00").Ticks);
117 AssertEquals (632001798000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.000").Ticks);
118 AssertEquals (632001798000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.0000").Ticks);
119 AssertEquals (632001798000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.00000").Ticks);
120 AssertEquals (632001798000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.000000").Ticks);
121 AssertEquals (632001798000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.0000000").Ticks);
123 // These tests also failed on MS.NET
124 AssertEquals (632001150000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00+13:00").Ticks);
125 AssertEquals (632001150000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.0+13:00").Ticks);
126 AssertEquals (632001150000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.00+13:00").Ticks);
127 AssertEquals (632001150000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.000+13:00").Ticks);
128 AssertEquals (632001150000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.0000+13:00").Ticks);
129 AssertEquals (632001150000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.00000+13:00").Ticks);
130 AssertEquals (632001150000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.000000+13:00").Ticks);
131 AssertEquals (632001150000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.0000000+13:00").Ticks);
132 AssertEquals (632001618000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00Z").Ticks);
133 AssertEquals (632001618000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.0Z").Ticks);
134 AssertEquals (632001618000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.00Z").Ticks);
135 AssertEquals (632001618000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.000Z").Ticks);
136 AssertEquals (632001618000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.0000Z").Ticks);
137 AssertEquals (632001618000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.00000Z").Ticks);
138 AssertEquals (632001618000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.000000Z").Ticks);
139 AssertEquals (632001618000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.0000000Z").Ticks);
142 DateTime t1 = new DateTime (DateTime.Today.Year, 1, 1);
143 t1 = DateTime.Today + new TimeSpan (12,0,0);
144 AssertEquals (t1.Ticks, XmlConvert.ToDateTime ("12:00:00").Ticks);
145 AssertEquals (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.0").Ticks);
146 AssertEquals (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.00").Ticks);
147 AssertEquals (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.000").Ticks);
148 AssertEquals (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.0000").Ticks);
149 AssertEquals (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.00000").Ticks);
150 AssertEquals (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.000000").Ticks);
151 AssertEquals (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.0000000").Ticks);
152 //AssertEquals (t1.Ticks, XmlConvert.ToDateTime ("12:00:00+13:00").Ticks);//doesn't work on .NET
153 //AssertEquals (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.f+13:00").Ticks);//doesn't work on .NET
154 //AssertEquals (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.ff+13:00").Ticks);//doesn't work on .NET
155 //AssertEquals (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.fff+13:00").Ticks);//doesn't work on .NET
156 //AssertEquals (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.ffff+13:00").Ticks);//doesn't work on .NET
157 //AssertEquals (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.fffff+13:00").Ticks);//doesn't work on .NET
158 //AssertEquals (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.ffffff+13:00").Ticks);//doesn't work on .NET
159 //AssertEquals (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.fffffff+13:00").Ticks);//doesn't work on .NET
160 //AssertEquals (t1.Ticks, XmlConvert.ToDateTime ("12:00:00Z").Ticks);//doesn't work on .NET
161 //AssertEquals (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.fZ").Ticks);//doesn't work on .NET
162 //AssertEquals (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.ffZ").Ticks);//doesn't work on .NET
163 //AssertEquals (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.fffZ").Ticks);//doesn't work on .NET
164 //AssertEquals (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.ffffZ").Ticks);//doesn't work on .NET
165 //AssertEquals (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.fffffZ").Ticks);//doesn't work on .NET
166 //AssertEquals (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.ffffffZ").Ticks);//doesn't work on .NET
167 //AssertEquals (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.fffffffZ").Ticks);//doesn't work on .NET
169 AssertEquals (632001312000000000L, XmlConvert.ToDateTime ("2003-09-26").Ticks);
170 // AssertEquals (632000664000000000L, XmlConvert.ToDateTime ("2003-09-26+13:00").Ticks);
171 // AssertEquals (632001132000000000L, XmlConvert.ToDateTime ("2003-09-26Z").Ticks);
173 AssertEquals (631979712000000000L, XmlConvert.ToDateTime ("2003-09").Ticks);
174 // AssertEquals (631979064000000000L, XmlConvert.ToDateTime ("2003-09+13:00").Ticks);
175 // AssertEquals (631979532000000000L, XmlConvert.ToDateTime ("2003-09Z").Ticks);
177 AssertEquals (631769760000000000L, XmlConvert.ToDateTime ("2003").Ticks);
178 // AssertEquals (631769076000000000L, XmlConvert.ToDateTime ("2003+13:00").Ticks);
179 // AssertEquals (631769544000000000L, XmlConvert.ToDateTime ("2003Z").Ticks);
181 // Don't try locale-dependent test
182 // AssertEquals (632001312000000000L, XmlConvert.ToDateTime ("--09-26").Ticks);//shouldn't have a hardcoded value
183 // AssertEquals (632000664000000000L, XmlConvert.ToDateTime ("--09-26+13:00").Ticks);//shouldn't have a hardcoded value
184 // AssertEquals (632001132000000000L, XmlConvert.ToDateTime ("--09-26Z").Ticks);//shouldn't have a hardcoded value
186 // Don't try locale-dependent test
187 // AssertEquals (631791360000000000L, XmlConvert.ToDateTime ("---26").Ticks);//shouldn't have a hardcoded value
188 // AssertEquals (631790676000000000L, XmlConvert.ToDateTime ("---26+13:00").Ticks);//shouldn't have a hardcoded value
189 // AssertEquals (631791144000000000L, XmlConvert.ToDateTime ("---26Z").Ticks);//shouldn't have a hardcoded value
192 AssertEquals (45L, XmlConvert.ToDateTime (";ljdfas;kl").Ticks);
200 public void ToDecimal ()
202 AssertEquals (1.987, XmlConvert.ToDecimal ("1.987"));
206 public void ToDouble ()
208 AssertEquals (1.0d/0.0d, XmlConvert.ToDouble ("INF"));
209 AssertEquals (-1.0d/0.0d, XmlConvert.ToDouble ("-INF"));
210 AssertEquals (0.0d/0.0d, XmlConvert.ToDouble ("NaN"));
211 AssertEquals (789324, XmlConvert.ToDouble ("789324"));
215 public void ToDoubleRoundtrip ()
218 string s = XmlConvert.ToString (double.MaxValue);
219 AssertEquals (double.MaxValue, XmlConvert.ToDouble (s));
223 public void ToGuid ()
225 AssertEquals (new Guid ("ca761232-ed42-11ce-bacd-00aa0057b223"), XmlConvert.ToGuid ("ca761232-ed42-11ce-bacd-00aa0057b223"));
229 public void ToInt16 ()
231 AssertType.AreEqual (0, XmlConvert.ToInt16 ("0"), "0");
232 AssertType.AreEqual (-1, XmlConvert.ToInt16 ("-1"), "-1");
233 AssertType.AreEqual (1, XmlConvert.ToInt16 ("1"), "1");
234 AssertType.AreEqual (32767, XmlConvert.ToInt16 ("32767"), "32767");
235 AssertType.AreEqual (-32768, XmlConvert.ToInt16 ("-32768"), "-32768");
237 XmlConvert.ToInt16 ("32768");
238 AssertType.Fail ("32768");
239 } catch (OverflowException) {
242 XmlConvert.ToInt16 ("-32769");
243 AssertType.Fail ("-32769");
244 } catch (OverflowException) {
247 XmlConvert.ToInt16 ("0x100");
248 AssertType.Fail ("0x100");
249 } catch (FormatException) {
254 public void ToInt32 ()
256 AssertType.AreEqual (0, XmlConvert.ToInt32 ("0"), "0");
257 AssertType.AreEqual (-1, XmlConvert.ToInt32 ("-1"), "-1");
258 AssertType.AreEqual (1, XmlConvert.ToInt32 ("1"), "1");
259 AssertType.AreEqual (int.MaxValue, XmlConvert.ToInt32 ("2147483647"), "2147483647");
260 AssertType.AreEqual (int.MinValue, XmlConvert.ToInt32 ("-2147483648"), "-2147483648");
262 int.Parse ("2147483648", CultureInfo.CurrentCulture);
263 AssertType.Fail ("int.Parse(current culture)");
264 } catch (OverflowException) {
267 int.Parse ("2147483648", CultureInfo.InvariantCulture);
268 AssertType.Fail ("int.Parse(invariant culture)");
269 } catch (OverflowException) {
272 XmlConvert.ToInt32 ("2147483648");
273 AssertType.Fail ("2147483648");
274 } catch (OverflowException) {
277 XmlConvert.ToInt32 ("-2147483649");
278 AssertType.Fail ("-2147483649");
279 } catch (OverflowException) {
282 XmlConvert.ToInt32 ("0x10000");
283 AssertType.Fail ("0x10000");
284 } catch (FormatException) {
289 public void ToInt64 ()
291 AssertType.AreEqual (0, XmlConvert.ToInt64 ("0"), "0");
292 AssertType.AreEqual (-1, XmlConvert.ToInt64 ("-1"), "-1");
293 AssertType.AreEqual (1, XmlConvert.ToInt64 ("1"), "1");
294 AssertType.AreEqual (long.MaxValue, XmlConvert.ToInt64 ("9223372036854775807"), "9223372036854775807");
295 AssertType.AreEqual (long.MinValue, XmlConvert.ToInt64 ("-9223372036854775808"), "-9223372036854775808");
297 XmlConvert.ToInt64 ("9223372036854775808");
298 AssertType.Fail ("9223372036854775808");
299 } catch (OverflowException) {
302 XmlConvert.ToInt64 ("-9223372036854775809");
303 AssertType.Fail ("-9223372036854775809");
304 } catch (OverflowException) {
307 XmlConvert.ToInt64 ("0x10000");
308 AssertType.Fail ("0x10000");
309 } catch (FormatException) {
314 public void ToSByte ()
316 AssertType.AreEqual (0, XmlConvert.ToSByte ("0"), "0");
317 AssertType.AreEqual (-1, XmlConvert.ToSByte ("-1"), "-1");
318 AssertType.AreEqual (1, XmlConvert.ToSByte ("1"), "1");
319 AssertType.AreEqual (127, XmlConvert.ToSByte ("127"), "127");
320 AssertType.AreEqual (-128, XmlConvert.ToSByte ("-128"), "-128");
322 XmlConvert.ToSByte ("128");
323 AssertType.Fail ("128");
324 } catch (OverflowException) {
327 XmlConvert.ToSByte ("-129");
328 AssertType.Fail ("-129");
329 } catch (OverflowException) {
332 XmlConvert.ToSByte ("0x80");
333 AssertType.Fail ("0x80");
334 } catch (FormatException) {
339 public void ToSingle ()//not done
345 public void ToStringTest ()//not done
347 // Don't include TimeZone value for test value.
349 XmlConvert.ToString (new DateTime (2003, 5, 5));
350 AssertEquals (33, dateString.Length);
351 AssertEquals ("2003-05-05T00:00:00.0000000", dateString.Substring (0, 27));
355 public void FromTimeSpan ()
358 TimeSpan t1 = TimeSpan.FromTicks (
359 TimeSpan.TicksPerSecond + 1);
360 AssertEquals ("PT1.0000001S", XmlConvert.ToString (t1));
364 public void ToTimeSpan ()
366 AssertEquals ("#1", new TimeSpan (0, 0, 0, 0, 1),
367 XmlConvert.ToTimeSpan ("PT0.001S"));
369 AssertEquals ("#2", new TimeSpan (0, 0, 0, 0, 100),
370 XmlConvert.ToTimeSpan ("PT0.1S"));
371 AssertEquals ("#3", new TimeSpan (0, 0, 0, 0, 100),
372 XmlConvert.ToTimeSpan ("PT0.100S"));
373 AssertEquals ("#4", new TimeSpan (0, 0, 0, 0, 10),
374 XmlConvert.ToTimeSpan ("PT0.010S"));
375 AssertEquals ("#5", new TimeSpan (0, 0, 0, 0, 10),
376 XmlConvert.ToTimeSpan ("PT0.01S"));
380 TimeSpan.FromTicks (TimeSpan.TicksPerSecond + 1),
381 XmlConvert.ToTimeSpan ("PT1.0000001S"));
385 XmlConvert.ToTimeSpan ("-P10675199DT2H48M5.4775808S"));
389 XmlConvert.ToTimeSpan ("P10675199DT2H48M5.4775807S"));
393 public void ToUInt16 ()
395 AssertType.AreEqual (0, XmlConvert.ToUInt16 ("0"), "0");
396 AssertType.AreEqual (1, XmlConvert.ToUInt16 ("1"), "1");
397 AssertType.AreEqual (ushort.MaxValue, XmlConvert.ToUInt16 ("65535"), "65535");
399 ushort.Parse ("65536", CultureInfo.CurrentCulture);
400 AssertType.Fail ("ushort.Parse(current culture)");
401 } catch (OverflowException) {
404 ushort.Parse ("65536", CultureInfo.InvariantCulture);
405 AssertType.Fail ("ushort.Parse(invariant culture)");
406 } catch (OverflowException) {
409 XmlConvert.ToUInt16 ("65536");
410 AssertType.Fail ("65536");
411 } catch (OverflowException) {
414 XmlConvert.ToUInt16 ("0x10000");
415 AssertType.Fail ("0x10000");
416 } catch (FormatException) {
421 public void ToUInt32 ()
423 AssertType.AreEqual (0, XmlConvert.ToUInt32 ("0"), "0");
424 AssertType.AreEqual (1, XmlConvert.ToUInt32 ("1"), "1");
425 AssertType.AreEqual (uint.MaxValue, XmlConvert.ToUInt32 ("4294967295"), "4294967295");
427 uint.Parse ("4294967296", CultureInfo.CurrentCulture);
428 AssertType.Fail ("uint.Parse(current culture)");
429 } catch (OverflowException) {
432 uint.Parse ("4294967296", CultureInfo.InvariantCulture);
433 AssertType.Fail ("uint.Parse(invariant culture)");
434 } catch (OverflowException) {
437 XmlConvert.ToUInt32 ("4294967296");
438 AssertType.Fail ("4294967296");
439 } catch (OverflowException) {
442 XmlConvert.ToUInt32 ("0x10000");
443 AssertType.Fail ("0x10000");
444 } catch (FormatException) {
449 public void ToUInt64 ()
451 AssertType.AreEqual (0, XmlConvert.ToUInt64 ("0"), "0");
452 AssertType.AreEqual (1, XmlConvert.ToUInt64 ("1"), "1");
453 AssertType.AreEqual (ulong.MaxValue, XmlConvert.ToUInt64 ("18446744073709551615"), "18446744073709551615");
455 ulong.Parse ("18446744073709551616", CultureInfo.CurrentCulture);
456 AssertType.Fail ("ulong.Parse(current culture)");
457 } catch (OverflowException) {
460 ulong.Parse ("18446744073709551616", CultureInfo.InvariantCulture);
461 AssertType.Fail ("ulong.Parse(invariant culture)");
462 } catch (OverflowException) {
465 XmlConvert.ToUInt64 ("18446744073709551616");
466 AssertType.Fail ("18446744073709551616");
467 } catch (OverflowException) {
470 XmlConvert.ToUInt64 ("0x10000");
471 AssertType.Fail ("0x10000");
472 } catch (FormatException) {
477 public void VerifyName ()
479 VerifyNameValid ("a");
480 VerifyNameValid ("a1");
481 VerifyNameValid ("\u3041");
482 VerifyNameValid ("a:b");
483 VerifyNameValid ("_");
484 VerifyNameValid ("__");
485 VerifyNameValid ("_1");
486 VerifyNameValid (":");
487 VerifyNameValid (":a");
488 VerifyNameValid ("a.b");
492 public void VerifyNameInvalid ()
494 VerifyNameInvalid ("!");
495 VerifyNameInvalid ("_a!b");
496 VerifyNameInvalid ("?a");
497 VerifyNameInvalid (" ");
501 [ExpectedException (typeof (ArgumentNullException))]
502 public void VerifyNameNull ()
504 XmlConvert.VerifyName (null);
508 [ExpectedException (typeof (ArgumentNullException))]
509 public void VerifyNameEmpty ()
511 XmlConvert.VerifyName ("");
514 private void VerifyNameValid (string value)
517 XmlConvert.VerifyName (value);
518 } catch (XmlException) {
519 AssertType.Fail (String.Format ("'{0}'", value));
523 private void VerifyNameInvalid (string value)
526 XmlConvert.VerifyName (value);
527 AssertType.Fail (value);
528 } catch (XmlException) {
533 public void VerifyNCName ()
535 AssertEquals ("foo", XmlConvert.VerifyNCName ("foo"));
537 XmlConvert.VerifyNCName ("?foo");
539 } catch (XmlException) {}
541 XmlConvert.VerifyNCName (":foo");
543 } catch (XmlException) {}
545 XmlConvert.VerifyNCName ("foo:bar");
547 } catch (XmlException) {}
549 XmlConvert.VerifyNCName ("foo:bar:baz");
551 } catch (XmlException) {}
555 [ExpectedException (typeof (ArgumentNullException))]
556 public void VerifyNCNameNull ()
558 XmlConvert.VerifyNCName (null);
562 [ExpectedException (typeof (ArgumentNullException))]
563 public void VerifyNCNameEmpty ()
565 XmlConvert.VerifyNCName ("");
569 public void DurationZero () // bug #77350
571 AssertEquals ("PT0S", XmlConvert.ToString (TimeSpan.FromSeconds (0)));
576 public void VerifyTOKEN ()
578 VerifyToken ("", true);
579 VerifyToken (" ", false);
580 VerifyToken ("A", true);
581 VerifyToken ("!", true);
582 VerifyToken (" !", false);
583 VerifyToken ("! ", false);
584 VerifyToken ("! !", true);
585 VerifyToken ("!\t!", false);
586 VerifyToken ("!\n!", false);
587 VerifyToken ("!\r!", false);
588 VerifyToken ("###", true);
591 private void VerifyToken (string s, bool success)
594 XmlConvert.VerifyTOKEN (s);
597 AssertType.Fail (s + "should fail");
598 } catch (XmlException ex) {
600 AssertType.Fail (s + "should not fail");
605 public void XmlDateTimeSerializationModeAndMaxValue ()
607 AssertEquals ("#1", "9999-12-31T23:59:59.9999999", XmlConvert.ToString (DateTime.MaxValue, XmlDateTimeSerializationMode.Unspecified).Substring (0, 27));
608 AssertEquals ("#2", "9999-12-31T23:59:59.9999999Z", XmlConvert.ToString (DateTime.MaxValue, XmlDateTimeSerializationMode.Utc));
609 AssertEquals ("#3", "9999-12-31T23:59:59.9999999", XmlConvert.ToString (DateTime.MaxValue, XmlDateTimeSerializationMode.RoundtripKind));
610 AssertEquals ("#4", "9999-12-31T23:59:59.9999999", XmlConvert.ToString (DateTime.MaxValue, XmlDateTimeSerializationMode.Local).Substring (0, 27));
611 // direct formatting string - no difference
612 AssertEquals ("#5", "9999-12-31T23:59:59.9999999Z", XmlConvert.ToString (DateTime.MaxValue, "yyyy-MM-ddTHH:mm:ss.FFFFFFFZ"));
613 AssertEquals ("#6", "9999-12-31T23:59:59.9999999", XmlConvert.ToString (DateTime.MaxValue, "yyyy-MM-ddTHH:mm:ss.FFFFFFFzzz").Substring (0, 27));
617 public void XmlDateTimeSerializationModeRountripKind ()
619 string format = "yyyy-MM-ddTHH:mm:ss.FFFFFFFK";
620 string s = XmlConvert.ToString (DateTime.UtcNow, format);
621 AssertType.AreEqual ('Z', s [s.Length -1], "#1-1");
622 // LAMESPEC: .NET has a bug here that 'K' in format string does not reflect 'Z' as Utc Kind.
623 // https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=307694
624 //AssertType.AreEqual (DateTimeKind.Utc, XmlConvert.ToDateTime (s, format).Kind, "#1-2");
626 s = XmlConvert.ToString (DateTime.UtcNow, XmlDateTimeSerializationMode.RoundtripKind);
627 AssertType.AreEqual ('Z', s [s.Length -1], "#2-1");
628 AssertType.AreEqual (DateTimeKind.Utc, XmlConvert.ToDateTime (s, XmlDateTimeSerializationMode.RoundtripKind).Kind, "#2-2");
632 public void XmlDateTimeSerializationModeUnspecified ()
634 AssertEquals ("#1", 27, XmlConvert.ToString (new DateTime (DateTime.MaxValue.Ticks, DateTimeKind.Utc), XmlDateTimeSerializationMode.Unspecified).Length);
635 DateTime dt1 = XmlConvert.ToDateTime ("0001-02-03T10:20:30.0000+02:00", XmlDateTimeSerializationMode.Unspecified);
636 DateTime dt2 = XmlConvert.ToDateTime ("0001-02-03T10:20:30.0000", XmlDateTimeSerializationMode.Unspecified);
637 AssertEquals ("#2", false, dt1 == dt2);
638 XmlConvert.ToDateTime ("2006-05-30T09:48:32.0Z", XmlDateTimeSerializationMode.Unspecified);
639 string format = "yyyy-MM-ddTHH:mm:ss.FFFFFFFK";
640 XmlConvert.ToDateTime (XmlConvert.ToString (DateTime.UtcNow, format), XmlDateTimeSerializationMode.Unspecified);
644 public void XmlDateTimeSerializationModeUtc ()
646 AssertEquals ("#1", 27, XmlConvert.ToString (new DateTime (DateTime.MaxValue.Ticks, DateTimeKind.Utc), XmlDateTimeSerializationMode.Unspecified).Length);
647 DateTime dt1 = XmlConvert.ToDateTime ("0001-02-03T10:20:30.0000+02:00", XmlDateTimeSerializationMode.Utc);
648 DateTime dt2 = XmlConvert.ToDateTime ("0001-02-03T10:20:30.0000", XmlDateTimeSerializationMode.Utc);
649 AssertEquals ("#2", false, dt1 == dt2);
650 XmlConvert.ToDateTime ("2006-05-30T09:48:32.0Z", XmlDateTimeSerializationMode.Utc);
651 XmlConvert.ToDateTime ("2006-05-30T09:48:32.0+02:00", XmlDateTimeSerializationMode.Utc);
652 XmlConvert.ToDateTime ("2008-06-11T11:09:47.125Z", XmlDateTimeSerializationMode.Utc);
656 public void XmlDateTimeSerializationModeSeveralFormats ()
658 XmlDateTimeSerializationMode m = XmlDateTimeSerializationMode.RoundtripKind;
659 XmlConvert.ToDateTime ("0001", m);
660 XmlConvert.ToDateTime ("0001Z", m);
661 XmlConvert.ToDateTime ("0001+09:00", m);
662 XmlConvert.ToDateTime ("0001-02", m);
663 XmlConvert.ToDateTime ("0001-02Z", m);
664 XmlConvert.ToDateTime ("0001-02+09:00", m);
665 XmlConvert.ToDateTime ("0001-02-03", m);
666 XmlConvert.ToDateTime ("0001-02-03Z", m);
667 XmlConvert.ToDateTime ("0001-02-03+09:00", m);
668 XmlConvert.ToDateTime ("--02-03", m);
669 XmlConvert.ToDateTime ("--02-03Z", m);
670 XmlConvert.ToDateTime ("--02-03+09:00", m);
671 XmlConvert.ToDateTime ("---03", m);
672 XmlConvert.ToDateTime ("---03Z", m);
673 XmlConvert.ToDateTime ("---03+09:00", m);
674 XmlConvert.ToDateTime ("10:20:30", m);
675 XmlConvert.ToDateTime ("10:20:30Z", m);
676 XmlConvert.ToDateTime ("10:20:30+09:00", m);
677 XmlConvert.ToDateTime ("0001-02-03T10:20:30", m);
678 XmlConvert.ToDateTime ("0001-02-03T10:20:30Z", m);
679 XmlConvert.ToDateTime ("0001-02-03T10:20:30+09:00", m);
680 XmlConvert.ToDateTime ("0001-02-03T10:20:30.00", m);
681 XmlConvert.ToDateTime ("0001-02-03T10:20:30.00Z", m);
682 XmlConvert.ToDateTime ("0001-02-03T10:20:30.00+09:00", m);
683 XmlConvert.ToDateTime ("0001-02-03T10:20:30.0000", m);
684 XmlConvert.ToDateTime ("0001-02-03T10:20:30.0000Z", m);
685 XmlConvert.ToDateTime ("0001-02-03T10:20:30.0000+09:00", m);
688 XmlConvert.ToDateTime ("0001-02-03T", m);
689 AssertType.Fail ("#1");
690 } catch (FormatException) {
693 XmlConvert.ToDateTime ("0001-02-03T10:20", m);
694 AssertType.Fail ("#2");
695 } catch (FormatException) {
698 XmlConvert.ToDateTime ("0001-02-03T10:20:30.", m);
699 AssertType.Fail ("#3");
700 } catch (FormatException) {