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 namespace MonoTests.System.Xml
17 public class XmlConvertTests
19 private void AssertName (string result, string source)
21 Assert.AreEqual (result,
22 XmlConvert.EncodeName (source));
25 private void AssertNmToken (string result, string source)
27 Assert.AreEqual (result,
28 XmlConvert.EncodeNmToken (source));
32 public void DecodeName ()
34 Assert.AreEqual (null, XmlConvert.DecodeName (null));
35 Assert.AreEqual ("", XmlConvert.DecodeName (""));
36 Assert.AreEqual ("Test", XmlConvert.DecodeName ("Test"));
37 Assert.AreEqual ("_Test", XmlConvert.DecodeName ("_Test"));
38 Assert.AreEqual ("_hello_friends", XmlConvert.DecodeName ("_hello_friends"));
39 Assert.AreEqual ("_hello friends", XmlConvert.DecodeName ("_hello friends"));
40 Assert.AreEqual (" ", XmlConvert.DecodeName ("_x0020_"));
44 public void EncodeLocalName ()
46 Assert.IsNull (XmlConvert.EncodeLocalName (null));
47 Assert.AreEqual (String.Empty, XmlConvert.EncodeLocalName (String.Empty));
48 Assert.AreEqual ("Hello_x003A__x0020_", XmlConvert.EncodeLocalName ("Hello: "));
49 Assert.AreEqual ("Hello", XmlConvert.EncodeLocalName ("Hello"));
53 public void EncodeName ()
55 Assert.IsNull (XmlConvert.EncodeName (null));
56 Assert.AreEqual (String.Empty, XmlConvert.EncodeName (String.Empty));
57 AssertName ("Test", "Test");
58 AssertName ("Hello_x0020_my_x0020_friends.", "Hello my friends.");
59 AssertName ("_x0031_23", "123");
60 AssertName ("_x005F_x0031_23", "_x0031_23");
64 public void EncodeNmToken ()
66 Assert.IsNull (XmlConvert.EncodeNmToken (null));
67 AssertNmToken ("Test", "Test");
68 AssertNmToken ("Hello_x0020_my_x0020_friends.", "Hello my friends.");
69 AssertNmToken ("123", "123");
70 AssertNmToken ("_x005F_x0031_23", "_x0031_23");
74 [ExpectedException (typeof (XmlException))]
75 public void EncodeNmTokenError ()
77 XmlConvert.EncodeNmToken (String.Empty);
81 public void ToBoolean ()
83 Assert.AreEqual (true, XmlConvert.ToBoolean (" 1 "));
84 Assert.AreEqual (true, XmlConvert.ToBoolean (" true "));
85 Assert.AreEqual (false, XmlConvert.ToBoolean (" 0 "));
86 Assert.AreEqual (false, XmlConvert.ToBoolean (" false "));
89 Assert.AreEqual (false, XmlConvert.ToBoolean (" invalid "));
91 catch (FormatException)
99 Assert.AreEqual (255, XmlConvert.ToByte ("255"));
103 public void ToChar ()
105 Assert.AreEqual ('x', XmlConvert.ToChar ("x"));
109 public void ToDateTime ()
112 Assert.AreEqual (632001798000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00").Ticks);
113 Assert.AreEqual (632001798000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.0").Ticks);
114 Assert.AreEqual (632001798000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.00").Ticks);
115 Assert.AreEqual (632001798000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.000").Ticks);
116 Assert.AreEqual (632001798000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.0000").Ticks);
117 Assert.AreEqual (632001798000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.00000").Ticks);
118 Assert.AreEqual (632001798000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.000000").Ticks);
119 Assert.AreEqual (632001798000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.0000000").Ticks);
121 // These tests also failed on MS.NET
122 Assert.AreEqual (632001150000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00+13:00").Ticks);
123 Assert.AreEqual (632001150000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.0+13:00").Ticks);
124 Assert.AreEqual (632001150000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.00+13:00").Ticks);
125 Assert.AreEqual (632001150000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.000+13:00").Ticks);
126 Assert.AreEqual (632001150000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.0000+13:00").Ticks);
127 Assert.AreEqual (632001150000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.00000+13:00").Ticks);
128 Assert.AreEqual (632001150000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.000000+13:00").Ticks);
129 Assert.AreEqual (632001150000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.0000000+13:00").Ticks);
130 Assert.AreEqual (632001618000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00Z").Ticks);
131 Assert.AreEqual (632001618000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.0Z").Ticks);
132 Assert.AreEqual (632001618000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.00Z").Ticks);
133 Assert.AreEqual (632001618000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.000Z").Ticks);
134 Assert.AreEqual (632001618000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.0000Z").Ticks);
135 Assert.AreEqual (632001618000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.00000Z").Ticks);
136 Assert.AreEqual (632001618000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.000000Z").Ticks);
137 Assert.AreEqual (632001618000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.0000000Z").Ticks);
140 DateTime t1 = new DateTime (DateTime.Today.Year, 1, 1);
141 t1 = DateTime.Today + new TimeSpan (12,0,0);
142 Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00").Ticks);
143 Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.0").Ticks);
144 Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.00").Ticks);
145 Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.000").Ticks);
146 Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.0000").Ticks);
147 Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.00000").Ticks);
148 Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.000000").Ticks);
149 Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.0000000").Ticks);
150 //Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00+13:00").Ticks);//doesn't work on .NET
151 //Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.f+13:00").Ticks);//doesn't work on .NET
152 //Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.ff+13:00").Ticks);//doesn't work on .NET
153 //Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.fff+13:00").Ticks);//doesn't work on .NET
154 //Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.ffff+13:00").Ticks);//doesn't work on .NET
155 //Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.fffff+13:00").Ticks);//doesn't work on .NET
156 //Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.ffffff+13:00").Ticks);//doesn't work on .NET
157 //Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.fffffff+13:00").Ticks);//doesn't work on .NET
158 //Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00Z").Ticks);//doesn't work on .NET
159 //Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.fZ").Ticks);//doesn't work on .NET
160 //Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.ffZ").Ticks);//doesn't work on .NET
161 //Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.fffZ").Ticks);//doesn't work on .NET
162 //Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.ffffZ").Ticks);//doesn't work on .NET
163 //Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.fffffZ").Ticks);//doesn't work on .NET
164 //Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.ffffffZ").Ticks);//doesn't work on .NET
165 //Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.fffffffZ").Ticks);//doesn't work on .NET
167 Assert.AreEqual (632001312000000000L, XmlConvert.ToDateTime ("2003-09-26").Ticks);
168 // Assert.AreEqual (632000664000000000L, XmlConvert.ToDateTime ("2003-09-26+13:00").Ticks);
169 // Assert.AreEqual (632001132000000000L, XmlConvert.ToDateTime ("2003-09-26Z").Ticks);
171 Assert.AreEqual (631979712000000000L, XmlConvert.ToDateTime ("2003-09").Ticks);
172 // Assert.AreEqual (631979064000000000L, XmlConvert.ToDateTime ("2003-09+13:00").Ticks);
173 // Assert.AreEqual (631979532000000000L, XmlConvert.ToDateTime ("2003-09Z").Ticks);
175 Assert.AreEqual (631769760000000000L, XmlConvert.ToDateTime ("2003").Ticks);
176 // Assert.AreEqual (631769076000000000L, XmlConvert.ToDateTime ("2003+13:00").Ticks);
177 // Assert.AreEqual (631769544000000000L, XmlConvert.ToDateTime ("2003Z").Ticks);
179 // Don't try locale-dependent test
180 // Assert.AreEqual (632001312000000000L, XmlConvert.ToDateTime ("--09-26").Ticks);//shouldn't have a hardcoded value
181 // Assert.AreEqual (632000664000000000L, XmlConvert.ToDateTime ("--09-26+13:00").Ticks);//shouldn't have a hardcoded value
182 // Assert.AreEqual (632001132000000000L, XmlConvert.ToDateTime ("--09-26Z").Ticks);//shouldn't have a hardcoded value
184 // Don't try locale-dependent test
185 // Assert.AreEqual (631791360000000000L, XmlConvert.ToDateTime ("---26").Ticks);//shouldn't have a hardcoded value
186 // Assert.AreEqual (631790676000000000L, XmlConvert.ToDateTime ("---26+13:00").Ticks);//shouldn't have a hardcoded value
187 // Assert.AreEqual (631791144000000000L, XmlConvert.ToDateTime ("---26Z").Ticks);//shouldn't have a hardcoded value
190 Assert.AreEqual (45L, XmlConvert.ToDateTime (";ljdfas;kl").Ticks);
198 public void ToDecimal ()
200 Assert.AreEqual (1.987, XmlConvert.ToDecimal ("1.987"));
204 public void ToDouble ()
206 Assert.AreEqual (1.0d/0.0d, XmlConvert.ToDouble ("INF"));
207 Assert.AreEqual (-1.0d/0.0d, XmlConvert.ToDouble ("-INF"));
208 Assert.AreEqual (0.0d/0.0d, XmlConvert.ToDouble ("NaN"));
209 Assert.AreEqual (789324, XmlConvert.ToDouble ("789324"));
210 Assert.AreEqual (42, XmlConvert.ToDouble (" 42 "));
211 Assert.AreEqual (double.NaN, XmlConvert.ToDouble (" NaN "));
212 Assert.AreEqual (double.PositiveInfinity, XmlConvert.ToDouble (" Infinity "));
213 Assert.AreEqual (double.NegativeInfinity, XmlConvert.ToDouble (" -Infinity "));
214 Assert.AreEqual (double.PositiveInfinity, XmlConvert.ToDouble (" INF"));
215 Assert.AreEqual (double.NegativeInfinity, XmlConvert.ToDouble (" -INF "));
219 public void ToDoubleRoundtrip ()
222 string s = XmlConvert.ToString (double.MaxValue);
223 Assert.AreEqual (double.MaxValue, XmlConvert.ToDouble (s));
227 public void ToGuid ()
229 Assert.AreEqual (new Guid ("ca761232-ed42-11ce-bacd-00aa0057b223"), XmlConvert.ToGuid ("ca761232-ed42-11ce-bacd-00aa0057b223"));
233 public void ToInt16 ()
235 Assert.AreEqual (0, XmlConvert.ToInt16 ("0"), "0");
236 Assert.AreEqual (-1, XmlConvert.ToInt16 ("-1"), "-1");
237 Assert.AreEqual (1, XmlConvert.ToInt16 ("1"), "1");
238 Assert.AreEqual (32767, XmlConvert.ToInt16 ("32767"), "32767");
239 Assert.AreEqual (-32768, XmlConvert.ToInt16 ("-32768"), "-32768");
241 XmlConvert.ToInt16 ("32768");
242 Assert.Fail ("32768");
243 } catch (OverflowException) {
246 XmlConvert.ToInt16 ("-32769");
247 Assert.Fail ("-32769");
248 } catch (OverflowException) {
251 XmlConvert.ToInt16 ("0x100");
252 Assert.Fail ("0x100");
253 } catch (FormatException) {
258 public void ToInt32 ()
260 Assert.AreEqual (0, XmlConvert.ToInt32 ("0"), "0");
261 Assert.AreEqual (-1, XmlConvert.ToInt32 ("-1"), "-1");
262 Assert.AreEqual (1, XmlConvert.ToInt32 ("1"), "1");
263 Assert.AreEqual (int.MaxValue, XmlConvert.ToInt32 ("2147483647"), "2147483647");
264 Assert.AreEqual (int.MinValue, XmlConvert.ToInt32 ("-2147483648"), "-2147483648");
266 int.Parse ("2147483648", CultureInfo.CurrentCulture);
267 Assert.Fail ("int.Parse(current culture)");
268 } catch (OverflowException) {
271 int.Parse ("2147483648", CultureInfo.InvariantCulture);
272 Assert.Fail ("int.Parse(invariant culture)");
273 } catch (OverflowException) {
276 XmlConvert.ToInt32 ("2147483648");
277 Assert.Fail ("2147483648");
278 } catch (OverflowException) {
281 XmlConvert.ToInt32 ("-2147483649");
282 Assert.Fail ("-2147483649");
283 } catch (OverflowException) {
286 XmlConvert.ToInt32 ("0x10000");
287 Assert.Fail ("0x10000");
288 } catch (FormatException) {
293 public void ToInt64 ()
295 Assert.AreEqual (0, XmlConvert.ToInt64 ("0"), "0");
296 Assert.AreEqual (-1, XmlConvert.ToInt64 ("-1"), "-1");
297 Assert.AreEqual (1, XmlConvert.ToInt64 ("1"), "1");
298 Assert.AreEqual (long.MaxValue, XmlConvert.ToInt64 ("9223372036854775807"), "9223372036854775807");
299 Assert.AreEqual (long.MinValue, XmlConvert.ToInt64 ("-9223372036854775808"), "-9223372036854775808");
301 XmlConvert.ToInt64 ("9223372036854775808");
302 Assert.Fail ("9223372036854775808");
303 } catch (OverflowException) {
306 XmlConvert.ToInt64 ("-9223372036854775809");
307 Assert.Fail ("-9223372036854775809");
308 } catch (OverflowException) {
311 XmlConvert.ToInt64 ("0x10000");
312 Assert.Fail ("0x10000");
313 } catch (FormatException) {
318 public void ToSByte ()
320 Assert.AreEqual (0, XmlConvert.ToSByte ("0"), "0");
321 Assert.AreEqual (-1, XmlConvert.ToSByte ("-1"), "-1");
322 Assert.AreEqual (1, XmlConvert.ToSByte ("1"), "1");
323 Assert.AreEqual (127, XmlConvert.ToSByte ("127"), "127");
324 Assert.AreEqual (-128, XmlConvert.ToSByte ("-128"), "-128");
326 XmlConvert.ToSByte ("128");
328 } catch (OverflowException) {
331 XmlConvert.ToSByte ("-129");
332 Assert.Fail ("-129");
333 } catch (OverflowException) {
336 XmlConvert.ToSByte ("0x80");
337 Assert.Fail ("0x80");
338 } catch (FormatException) {
343 public void ToSingle ()
345 Assert.AreEqual (1.0d/0.0d, XmlConvert.ToSingle ("INF"));
346 Assert.AreEqual (-1.0d/0.0d, XmlConvert.ToSingle ("-INF"));
347 Assert.AreEqual (0.0d/0.0d, XmlConvert.ToSingle ("NaN"));
348 Assert.AreEqual (789324, XmlConvert.ToSingle ("789324"));
349 Assert.AreEqual (42, XmlConvert.ToSingle (" 42 "));
350 Assert.AreEqual (float.NaN, XmlConvert.ToSingle (" NaN "));
351 Assert.AreEqual (float.PositiveInfinity, XmlConvert.ToSingle (" Infinity "));
352 Assert.AreEqual (float.NegativeInfinity, XmlConvert.ToSingle (" -Infinity "));
353 Assert.AreEqual (float.PositiveInfinity, XmlConvert.ToSingle (" INF"));
354 Assert.AreEqual (float.NegativeInfinity, XmlConvert.ToSingle (" -INF "));
358 public void ToStringTest ()//not done
360 // Don't include TimeZone value for test value.
362 XmlConvert.ToString (new DateTime (2003, 5, 5));
363 Assert.AreEqual (33, dateString.Length);
364 Assert.AreEqual (dateString.Substring (0, 27), "2003-05-05T00:00:00.0000000");
366 // Must not throw an exception...
367 Assert.IsNotNull ("-P10675199DT2H48M5.4775808S", XmlConvert.ToString (TimeSpan.MinValue));
371 public void FromTimeSpan ()
374 TimeSpan t1 = TimeSpan.FromTicks (
375 TimeSpan.TicksPerSecond + 1);
376 Assert.AreEqual ("PT1.0000001S", XmlConvert.ToString (t1), "#1");
378 // XAttributeTest.CastTimeSpans():#5d
379 t1 = new TimeSpan (2710L);
380 Assert.AreEqual ("PT0.000271S", XmlConvert.ToString (t1), "#2");
381 t1 = new TimeSpan (27100000L);
382 Assert.AreEqual ("PT2.71S", XmlConvert.ToString (t1), "#3");
386 public void ToTimeSpan ()
388 Assert.AreEqual (new TimeSpan (0, 0, 0, 0, 1), XmlConvert.ToTimeSpan ("PT0.001S"), "#1");
390 Assert.AreEqual (new TimeSpan (0, 0, 0, 0, 100), XmlConvert.ToTimeSpan ("PT0.1S"), "#2");
391 Assert.AreEqual (new TimeSpan (0, 0, 0, 0, 100), XmlConvert.ToTimeSpan ("PT0.100S"), "#3");
392 Assert.AreEqual (new TimeSpan (0, 0, 0, 0, 10), XmlConvert.ToTimeSpan ("PT0.010S"), "#4");
393 Assert.AreEqual (new TimeSpan (0, 0, 0, 0, 10), XmlConvert.ToTimeSpan ("PT0.01S"), "#5");
396 Assert.AreEqual (TimeSpan.FromTicks (TimeSpan.TicksPerSecond + 1), XmlConvert.ToTimeSpan ("PT1.0000001S"), "#6");
398 Assert.AreEqual (TimeSpan.MinValue, XmlConvert.ToTimeSpan ("-P10675199DT2H48M5.4775808S"), "#7");
400 Assert.AreEqual (TimeSpan.MaxValue, XmlConvert.ToTimeSpan ("P10675199DT2H48M5.4775807S"), "#8");
402 Assert.AreEqual (TimeSpan.FromDays (2), XmlConvert.ToTimeSpan (" \r\n \tP2D "), "#9");
406 public void ToUInt16 ()
408 Assert.AreEqual (0, XmlConvert.ToUInt16 ("0"), "0");
409 Assert.AreEqual (1, XmlConvert.ToUInt16 ("1"), "1");
410 Assert.AreEqual (ushort.MaxValue, XmlConvert.ToUInt16 ("65535"), "65535");
412 ushort.Parse ("65536", CultureInfo.CurrentCulture);
413 Assert.Fail ("ushort.Parse(current culture)");
414 } catch (OverflowException) {
417 ushort.Parse ("65536", CultureInfo.InvariantCulture);
418 Assert.Fail ("ushort.Parse(invariant culture)");
419 } catch (OverflowException) {
422 XmlConvert.ToUInt16 ("65536");
423 Assert.Fail ("65536");
424 } catch (OverflowException) {
427 XmlConvert.ToUInt16 ("0x10000");
428 Assert.Fail ("0x10000");
429 } catch (FormatException) {
431 // LAMESPEC: it is not fixable as there is no public
432 // member of UInt16 that treats this as FormatException
433 // while others above as either OverflowException or
434 // FormatException respectively.
435 // (.NET uses internal member in UInt16 here);
437 // XmlConvert.ToUInt16 ("-101");
438 // Assert.Fail ("-101");
439 //} catch (FormatException) {
444 public void ToUInt32 ()
446 Assert.AreEqual (0, XmlConvert.ToUInt32 ("0"), "0");
447 Assert.AreEqual (1, XmlConvert.ToUInt32 ("1"), "1");
448 Assert.AreEqual (uint.MaxValue, XmlConvert.ToUInt32 ("4294967295"), "4294967295");
450 uint.Parse ("4294967296", CultureInfo.CurrentCulture);
451 Assert.Fail ("uint.Parse(current culture)");
452 } catch (OverflowException) {
455 uint.Parse ("4294967296", CultureInfo.InvariantCulture);
456 Assert.Fail ("uint.Parse(invariant culture)");
457 } catch (OverflowException) {
460 XmlConvert.ToUInt32 ("4294967296");
461 Assert.Fail ("4294967296");
462 } catch (OverflowException) {
465 XmlConvert.ToUInt32 ("0x10000");
466 Assert.Fail ("0x10000");
467 } catch (FormatException) {
469 // LAMESPEC: it is not fixable as there is no public
470 // member of UInt32 that treats this as FormatException
471 // while others above as either OverflowException or
472 // FormatException respectively.
473 // (.NET uses internal member in UInt32 here);
475 // XmlConvert.ToUInt32 ("-101");
476 // Assert.Fail ("-101");
477 //} catch (FormatException) {
482 public void ToUInt64 ()
484 Assert.AreEqual (0, XmlConvert.ToUInt64 ("0"), "0");
485 Assert.AreEqual (1, XmlConvert.ToUInt64 ("1"), "1");
486 Assert.AreEqual (ulong.MaxValue, XmlConvert.ToUInt64 ("18446744073709551615"), "18446744073709551615");
488 ulong.Parse ("18446744073709551616", CultureInfo.CurrentCulture);
489 Assert.Fail ("ulong.Parse(current culture)");
490 } catch (OverflowException) {
493 ulong.Parse ("18446744073709551616", CultureInfo.InvariantCulture);
494 Assert.Fail ("ulong.Parse(invariant culture)");
495 } catch (OverflowException) {
498 XmlConvert.ToUInt64 ("18446744073709551616");
499 Assert.Fail ("18446744073709551616");
500 } catch (OverflowException) {
503 XmlConvert.ToUInt64 ("0x10000");
504 Assert.Fail ("0x10000");
505 } catch (FormatException) {
507 // LAMESPEC: it is not fixable as there is no public
508 // member of UInt64 that treats this as FormatException
509 // while others above as either OverflowException or
510 // FormatException respectively.
511 // (.NET uses internal member in UInt64 here);
513 // XmlConvert.ToUInt64 ("-101");
514 // Assert.Fail ("-101");
515 //} catch (FormatException) {
520 public void VerifyName ()
522 VerifyNameValid ("a");
523 VerifyNameValid ("a1");
524 VerifyNameValid ("\u3041");
525 VerifyNameValid ("a:b");
526 VerifyNameValid ("_");
527 VerifyNameValid ("__");
528 VerifyNameValid ("_1");
529 VerifyNameValid (":");
530 VerifyNameValid (":a");
531 VerifyNameValid ("a.b");
535 public void VerifyNameInvalid ()
537 VerifyNameInvalid ("!");
538 VerifyNameInvalid ("_a!b");
539 VerifyNameInvalid ("?a");
540 VerifyNameInvalid (" ");
544 [ExpectedException (typeof (ArgumentNullException))]
545 public void VerifyNameNull ()
547 XmlConvert.VerifyName (null);
551 [ExpectedException (typeof (ArgumentNullException))]
552 public void VerifyNameEmpty ()
554 XmlConvert.VerifyName ("");
557 private void VerifyNameValid (string value)
560 XmlConvert.VerifyName (value);
561 } catch (XmlException) {
562 Assert.Fail (String.Format ("'{0}'", value));
566 private void VerifyNameInvalid (string value)
569 XmlConvert.VerifyName (value);
571 } catch (XmlException) {
576 public void VerifyNCName ()
578 Assert.AreEqual ("foo", XmlConvert.VerifyNCName ("foo"));
580 XmlConvert.VerifyNCName ("?foo");
582 } catch (XmlException) {}
584 XmlConvert.VerifyNCName (":foo");
586 } catch (XmlException) {}
588 XmlConvert.VerifyNCName ("foo:bar");
590 } catch (XmlException) {}
592 XmlConvert.VerifyNCName ("foo:bar:baz");
594 } catch (XmlException) {}
598 [ExpectedException (typeof (ArgumentNullException))]
599 public void VerifyNCNameNull ()
601 XmlConvert.VerifyNCName (null);
605 [ExpectedException (typeof (ArgumentNullException))]
606 public void VerifyNCNameEmpty ()
608 XmlConvert.VerifyNCName ("");
612 public void DurationZero () // bug #77350
614 Assert.AreEqual ("PT0S", XmlConvert.ToString (TimeSpan.FromSeconds (0)));
619 public void VerifyTOKEN ()
621 VerifyToken ("", true);
622 VerifyToken (" ", false);
623 VerifyToken ("A", true);
624 VerifyToken ("!", true);
625 VerifyToken (" !", false);
626 VerifyToken ("! ", false);
627 VerifyToken ("! !", true);
628 VerifyToken ("!\t!", false);
629 VerifyToken ("!\n!", false);
630 VerifyToken ("!\r!", false);
631 VerifyToken ("###", true);
634 private void VerifyToken (string s, bool success)
637 XmlConvert.VerifyTOKEN (s);
640 Assert.Fail (s + "should fail");
641 } catch (XmlException ex) {
643 Assert.Fail (s + "should not fail");
648 public void XmlDateTimeSerializationModeAndMaxValue ()
650 Assert.AreEqual ("9999-12-31T23:59:59.9999999", XmlConvert.ToString (DateTime.MaxValue, XmlDateTimeSerializationMode.Unspecified).Substring (0, 27), "#1");
651 Assert.AreEqual ("9999-12-31T23:59:59.9999999Z", XmlConvert.ToString (DateTime.MaxValue, XmlDateTimeSerializationMode.Utc), "#2");
652 Assert.AreEqual ("9999-12-31T23:59:59.9999999", XmlConvert.ToString (DateTime.MaxValue, XmlDateTimeSerializationMode.RoundtripKind), "#3");
653 Assert.AreEqual ("9999-12-31T23:59:59.9999999", XmlConvert.ToString (DateTime.MaxValue, XmlDateTimeSerializationMode.Local).Substring (0, 27), "#4");
654 // direct formatting string - no difference
655 Assert.AreEqual ("9999-12-31T23:59:59.9999999Z", XmlConvert.ToString (DateTime.MaxValue, "yyyy-MM-ddTHH:mm:ss.FFFFFFFZ"), "#5");
656 Assert.AreEqual ("9999-12-31T23:59:59.9999999", XmlConvert.ToString (DateTime.MaxValue, "yyyy-MM-ddTHH:mm:ss.FFFFFFFzzz").Substring (0, 27), "#6");
660 public void XmlDateTimeSerializationModeRountripKind ()
662 string format = "yyyy-MM-ddTHH:mm:ss.FFFFFFFK";
663 string s = XmlConvert.ToString (DateTime.UtcNow, format);
664 Assert.AreEqual ('Z', s [s.Length -1], "#1-1");
665 // LAMESPEC: .NET has a bug here that 'K' in format string does not reflect 'Z' as Utc Kind.
666 // https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=307694
667 //Assert.AreEqual (DateTimeKind.Utc, XmlConvert.ToDateTime (s, format).Kind, "#1-2");
669 s = XmlConvert.ToString (DateTime.UtcNow, XmlDateTimeSerializationMode.RoundtripKind);
670 Assert.AreEqual ('Z', s [s.Length -1], "#2-1");
671 Assert.AreEqual (DateTimeKind.Utc, XmlConvert.ToDateTime (s, XmlDateTimeSerializationMode.RoundtripKind).Kind, "#2-2");
675 public void XmlDateTimeSerializationModeUnspecified ()
677 Assert.AreEqual (27, XmlConvert.ToString (new DateTime (DateTime.MaxValue.Ticks, DateTimeKind.Utc), XmlDateTimeSerializationMode.Unspecified).Length, "#1");
678 DateTime dt1 = XmlConvert.ToDateTime ("0001-02-03T10:20:30.0000+02:00", XmlDateTimeSerializationMode.Unspecified);
679 DateTime dt2 = XmlConvert.ToDateTime ("0001-02-03T10:20:30.0000", XmlDateTimeSerializationMode.Unspecified);
680 Assert.AreEqual (false, dt1 == dt2, "#2");
681 XmlConvert.ToDateTime ("2006-05-30T09:48:32.0Z", XmlDateTimeSerializationMode.Unspecified);
682 string format = "yyyy-MM-ddTHH:mm:ss.FFFFFFFK";
683 XmlConvert.ToDateTime (XmlConvert.ToString (DateTime.UtcNow, format), XmlDateTimeSerializationMode.Unspecified);
687 public void XmlDateTimeSerializationModeLocal ()
689 XmlConvert.ToDateTime ("2010-11-10", XmlDateTimeSerializationMode.Local); // bug #655089
690 XmlConvert.ToDateTime ("2010-11", XmlDateTimeSerializationMode.Local);
694 public void XmlDateTimeSerializationModeUtc ()
696 Assert.AreEqual (27, XmlConvert.ToString (new DateTime (DateTime.MaxValue.Ticks, DateTimeKind.Utc), XmlDateTimeSerializationMode.Unspecified).Length, "#1");
697 DateTime dt1 = XmlConvert.ToDateTime ("0001-02-03T10:20:30.0000+02:00", XmlDateTimeSerializationMode.Utc);
698 DateTime dt2 = XmlConvert.ToDateTime ("0001-02-03T10:20:30.0000", XmlDateTimeSerializationMode.Utc);
699 Assert.AreEqual (false, dt1 == dt2, "#2");
700 XmlConvert.ToDateTime ("2006-05-30T09:48:32.0Z", XmlDateTimeSerializationMode.Utc);
701 XmlConvert.ToDateTime ("2006-05-30T09:48:32.0+02:00", XmlDateTimeSerializationMode.Utc);
702 XmlConvert.ToDateTime ("2008-06-11T11:09:47.125Z", XmlDateTimeSerializationMode.Utc);
706 public void XmlDateTimeSerializationModeSeveralFormats ()
708 XmlDateTimeSerializationMode m = XmlDateTimeSerializationMode.RoundtripKind;
709 XmlConvert.ToDateTime ("0001", m);
710 XmlConvert.ToDateTime ("0001Z", m);
711 XmlConvert.ToDateTime ("0001+09:00", m);
712 XmlConvert.ToDateTime ("0001-02", m);
713 XmlConvert.ToDateTime ("0001-02Z", m);
714 XmlConvert.ToDateTime ("0001-02+09:00", m);
715 XmlConvert.ToDateTime ("0001-02-03", m);
716 XmlConvert.ToDateTime ("0001-02-03Z", m);
717 XmlConvert.ToDateTime ("0001-02-03+09:00", m);
718 XmlConvert.ToDateTime ("--02-03", m);
719 XmlConvert.ToDateTime ("--02-03Z", m);
720 XmlConvert.ToDateTime ("--02-03+09:00", m);
721 XmlConvert.ToDateTime ("---03", m);
722 XmlConvert.ToDateTime ("---03Z", m);
723 XmlConvert.ToDateTime ("---03+09:00", m);
724 XmlConvert.ToDateTime ("10:20:30", m);
725 XmlConvert.ToDateTime ("10:20:30Z", m);
726 XmlConvert.ToDateTime ("10:20:30+09:00", m);
727 XmlConvert.ToDateTime ("0001-02-03T10:20:30", m);
728 XmlConvert.ToDateTime ("0001-02-03T10:20:30Z", m);
729 XmlConvert.ToDateTime ("0001-02-03T10:20:30+09:00", m);
730 XmlConvert.ToDateTime ("0001-02-03T10:20:30.00", m);
731 XmlConvert.ToDateTime ("0001-02-03T10:20:30.00Z", m);
732 XmlConvert.ToDateTime ("0001-02-03T10:20:30.00+09:00", m);
733 XmlConvert.ToDateTime ("0001-02-03T10:20:30.0000", m);
734 XmlConvert.ToDateTime ("0001-02-03T10:20:30.0000Z", m);
735 XmlConvert.ToDateTime ("0001-02-03T10:20:30.0000+09:00", m);
738 XmlConvert.ToDateTime ("0001-02-03T", m);
740 } catch (FormatException) {
743 XmlConvert.ToDateTime ("0001-02-03T10:20", m);
745 } catch (FormatException) {
748 XmlConvert.ToDateTime ("0001-02-03T10:20:30.", m);
750 } catch (FormatException) {
754 [Test] // see http://smdn.invisiblefulmoon.net/misc/forum/programming/#n10
755 public void DateTimeOffsetTimezoneRoundtrip ()
757 Assert.AreEqual (new DateTimeOffset (2009, 11, 05, 20, 16, 22, TimeSpan.FromHours (9)), XmlConvert.ToDateTimeOffset ("2009-11-05T20:16:22+09:00"), "#1");
761 public void DateTimeOffsetWithWhitespace ()
763 var s = " 2010-01-02T00:00:00Z \t";
764 XmlConvert.ToDateTime (s);
768 public void ToDateTimeUtc ()
771 var date = XmlConvert.ToDateTime ("2010-12-29T22:01:15.1619814", XmlDateTimeSerializationMode.Utc);
772 Assert.AreEqual (22, date.Hour, "#1");