New test.
[mono.git] / mcs / class / System.XML / Test / System.Xml / XmlConvertTests.cs
1 //
2 // System.Xml.XmlConvertTests.cs
3 //
4 // Authors: Atsushi Enomoto (ginga@kit.hi-ho.ne.jp), Jon Kessler (jwkpiano1@comcast.net)
5 //
6 // (C) 2003 Atsushi Enomoto, Jon Kessler
7 //
8
9 using System;
10 using System.Globalization;
11 using System.Xml;
12 using NUnit.Framework;
13
14 using AssertType = NUnit.Framework.Assert;
15
16 namespace MonoTests.System.Xml
17 {
18         [TestFixture]
19         public class XmlConvertTests : Assertion
20         {
21                 private void AssertName (string result, string source)
22                 {
23                         AssertEquals (result,
24                                 XmlConvert.EncodeName (source));
25                 }
26                 
27                 private void AssertNmToken (string result, string source)
28                 {
29                         AssertEquals (result,
30                                 XmlConvert.EncodeNmToken (source));
31                 }
32                 
33                 [Test]
34                 public void DecodeName ()
35                 {
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_"));
43                 }
44                 
45                 [Test]
46                 public void EncodeLocalName ()
47                 {
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"));
52                 }
53                 
54                 [Test]
55                 public void EncodeName ()
56                 {
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");
63                 }
64                 
65                 [Test]
66                 public void EncodeNmToken ()
67                 {
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");
73                 }
74
75                 [Test]
76                 [ExpectedException (typeof (XmlException))]
77                 public void EncodeNmTokenError ()
78                 {
79                         XmlConvert.EncodeNmToken (String.Empty);
80                 }
81
82                 [Test]
83                 public void ToBoolean ()
84                 {
85                         AssertEquals (true, XmlConvert.ToBoolean ("  1 "));
86                         AssertEquals (true, XmlConvert.ToBoolean (" true "));
87                         AssertEquals (false, XmlConvert.ToBoolean (" 0 "));
88                         AssertEquals (false, XmlConvert.ToBoolean (" false "));
89                         try
90                         {
91                                 AssertEquals (false, XmlConvert.ToBoolean (" invalid "));
92                         }
93                         catch (FormatException)
94                         {
95                         }
96                 }
97                 
98                 [Test]
99                 public void ToByte ()
100                 {
101                         AssertEquals (255, XmlConvert.ToByte ("255"));
102                 }
103                 
104                 [Test]
105                 public void ToChar ()
106                 {
107                         AssertEquals ('x', XmlConvert.ToChar ("x"));
108                 }
109                 
110                 [Test]
111                 public void ToDateTime ()//fails on Mono
112                 {
113                         //dateTime
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);
122                         /*
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);
140                         */
141                         //time
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
168                         //date
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);
172                         //gYearMonth
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);
176                         //gYear
177                         AssertEquals (631769760000000000L, XmlConvert.ToDateTime ("2003").Ticks);
178 //                      AssertEquals (631769076000000000L, XmlConvert.ToDateTime ("2003+13:00").Ticks);
179 //                      AssertEquals (631769544000000000L, XmlConvert.ToDateTime ("2003Z").Ticks);
180                         //gMonthDay
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
185                         //gDay
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
190                         try
191                         {
192                                 AssertEquals (45L, XmlConvert.ToDateTime (";ljdfas;kl").Ticks);
193                         }
194                         catch (Exception)
195                         {
196                         }
197                 }
198                 
199                 [Test]
200                 public void ToDecimal ()
201                 {
202                         AssertEquals (1.987, XmlConvert.ToDecimal ("1.987"));
203                 }
204                 
205                 [Test]
206                 public void ToDouble ()
207                 {
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"));
212                 }
213                 
214                 [Test]
215                 public void ToGuid ()
216                 {
217                         AssertEquals (new Guid ("ca761232-ed42-11ce-bacd-00aa0057b223"), XmlConvert.ToGuid ("ca761232-ed42-11ce-bacd-00aa0057b223"));
218                 }
219         
220                 [Test]
221                 public void ToInt16 ()
222                 {
223                         AssertType.AreEqual (0, XmlConvert.ToInt16 ("0"), "0");
224                         AssertType.AreEqual (-1, XmlConvert.ToInt16 ("-1"), "-1");
225                         AssertType.AreEqual (1, XmlConvert.ToInt16 ("1"), "1");
226                         AssertType.AreEqual (32767, XmlConvert.ToInt16 ("32767"), "32767");
227                         AssertType.AreEqual (-32768, XmlConvert.ToInt16 ("-32768"), "-32768");
228                         try {
229                                 XmlConvert.ToInt16 ("32768");
230                                 AssertType.Fail ("32768");
231                         } catch (OverflowException) {
232                         }
233                         try {
234                                 XmlConvert.ToInt16 ("-32769");
235                                 AssertType.Fail ("-32769");
236                         } catch (OverflowException) {
237                         }
238                         try {
239                                 XmlConvert.ToInt16 ("0x100");
240                                 AssertType.Fail ("0x100");
241                         } catch (FormatException) {
242                         }
243                 }
244                 
245                 [Test]
246                 public void ToInt32 ()
247                 {
248                         AssertType.AreEqual (0, XmlConvert.ToInt32 ("0"), "0");
249                         AssertType.AreEqual (-1, XmlConvert.ToInt32 ("-1"), "-1");
250                         AssertType.AreEqual (1, XmlConvert.ToInt32 ("1"), "1");
251                         AssertType.AreEqual (int.MaxValue, XmlConvert.ToInt32 ("2147483647"), "2147483647");
252                         AssertType.AreEqual (int.MinValue, XmlConvert.ToInt32 ("-2147483648"), "-2147483648");
253                         try {
254                                 int.Parse ("2147483648", CultureInfo.CurrentCulture);
255                                 AssertType.Fail ("int.Parse(current culture)");
256                         } catch (OverflowException) {
257                         }
258                         try {
259                                 int.Parse ("2147483648", CultureInfo.InvariantCulture);
260                                 AssertType.Fail ("int.Parse(invariant culture)");
261                         } catch (OverflowException) {
262                         }
263                         try {
264                                 XmlConvert.ToInt32 ("2147483648");
265                                 AssertType.Fail ("2147483648");
266                         } catch (OverflowException) {
267                         }
268                         try {
269                                 XmlConvert.ToInt32 ("-2147483649");
270                                 AssertType.Fail ("-2147483649");
271                         } catch (OverflowException) {
272                         }
273                         try {
274                                 XmlConvert.ToInt32 ("0x10000");
275                                 AssertType.Fail ("0x10000");
276                         } catch (FormatException) {
277                         }
278                 }
279                 
280                 [Test]
281                 public void ToInt64 ()
282                 {
283                         AssertType.AreEqual (0, XmlConvert.ToInt64 ("0"), "0");
284                         AssertType.AreEqual (-1, XmlConvert.ToInt64 ("-1"), "-1");
285                         AssertType.AreEqual (1, XmlConvert.ToInt64 ("1"), "1");
286                         AssertType.AreEqual (long.MaxValue, XmlConvert.ToInt64 ("9223372036854775807"), "9223372036854775807");
287                         AssertType.AreEqual (long.MinValue, XmlConvert.ToInt64 ("-9223372036854775808"), "-9223372036854775808");
288                         try {
289                                 XmlConvert.ToInt64 ("9223372036854775808");
290                                 AssertType.Fail ("9223372036854775808");
291                         } catch (OverflowException) {
292                         }
293                         try {
294                                 XmlConvert.ToInt64 ("-9223372036854775809");
295                                 AssertType.Fail ("-9223372036854775809");
296                         } catch (OverflowException) {
297                         }
298                         try {
299                                 XmlConvert.ToInt64 ("0x10000");
300                                 AssertType.Fail ("0x10000");
301                         } catch (FormatException) {
302                         }
303                 }
304                 
305                 [Test]
306                 public void ToSByte ()
307                 {
308                         AssertType.AreEqual (0, XmlConvert.ToSByte ("0"), "0");
309                         AssertType.AreEqual (-1, XmlConvert.ToSByte ("-1"), "-1");
310                         AssertType.AreEqual (1, XmlConvert.ToSByte ("1"), "1");
311                         AssertType.AreEqual (127, XmlConvert.ToSByte ("127"), "127");
312                         AssertType.AreEqual (-128, XmlConvert.ToSByte ("-128"), "-128");
313                         try {
314                                 XmlConvert.ToSByte ("128");
315                                 AssertType.Fail ("128");
316                         } catch (OverflowException) {
317                         }
318                         try {
319                                 XmlConvert.ToSByte ("-129");
320                                 AssertType.Fail ("-129");
321                         } catch (OverflowException) {
322                         }
323                         try {
324                                 XmlConvert.ToSByte ("0x80");
325                                 AssertType.Fail ("0x80");
326                         } catch (FormatException) {
327                         }
328                 }
329                 
330                 [Test]
331                 public void ToSingle ()//not done
332                 {
333                         
334                 }
335                 
336                 [Test]
337                 public void ToStringTest ()//not done
338                 {
339                         // Don't include TimeZone value for test value.
340                         string dateString = 
341                                 XmlConvert.ToString (new DateTime (2003, 5, 5));
342                         AssertEquals (33, dateString.Length);
343                         AssertEquals ("2003-05-05T00:00:00.0000000", dateString.Substring (0, 27));
344                 }
345
346                 [Test]
347                 public void FromTimeSpan ()
348                 {
349                         // bug #77252
350                         TimeSpan t1 = TimeSpan.FromTicks (
351                                 TimeSpan.TicksPerSecond + 1);
352                         AssertEquals ("PT1.0000001S", XmlConvert.ToString (t1));
353                 }
354
355                 [Test]
356                 public void ToTimeSpan ()
357                 {
358                         AssertEquals ("#1", new TimeSpan (0, 0, 0, 0, 1),
359                                 XmlConvert.ToTimeSpan ("PT0.001S"));
360                         // bug #76328
361                         AssertEquals ("#2", new TimeSpan (0, 0, 0, 0, 100),
362                                 XmlConvert.ToTimeSpan ("PT0.1S"));
363                         AssertEquals ("#3", new TimeSpan (0, 0, 0, 0, 100),
364                                 XmlConvert.ToTimeSpan ("PT0.100S"));
365                         AssertEquals ("#4", new TimeSpan (0, 0, 0, 0, 10),
366                                 XmlConvert.ToTimeSpan ("PT0.010S"));
367                         AssertEquals ("#5", new TimeSpan (0, 0, 0, 0, 10),
368                                 XmlConvert.ToTimeSpan ("PT0.01S"));
369
370                         // bug #77252
371                         AssertEquals ("#6",
372                                 TimeSpan.FromTicks (TimeSpan.TicksPerSecond + 1),
373                                 XmlConvert.ToTimeSpan ("PT1.0000001S"));
374
375                         AssertEquals ("#7",
376                                 TimeSpan.MinValue,
377                                 XmlConvert.ToTimeSpan ("-P10675199DT2H48M5.4775808S"));
378
379                         AssertEquals ("#8",
380                                 TimeSpan.MaxValue,
381                                 XmlConvert.ToTimeSpan ("P10675199DT2H48M5.4775807S"));
382                 }
383                 
384                 [Test]
385                 public void ToUInt16 ()
386                 {
387                         AssertType.AreEqual (0, XmlConvert.ToUInt16 ("0"), "0");
388                         AssertType.AreEqual (1, XmlConvert.ToUInt16 ("1"), "1");
389                         AssertType.AreEqual (ushort.MaxValue, XmlConvert.ToUInt16 ("65535"), "65535");
390                         try {
391                                 ushort.Parse ("65536", CultureInfo.CurrentCulture);
392                                 AssertType.Fail ("ushort.Parse(current culture)");
393                         } catch (OverflowException) {
394                         }
395                         try {
396                                 ushort.Parse ("65536", CultureInfo.InvariantCulture);
397                                 AssertType.Fail ("ushort.Parse(invariant culture)");
398                         } catch (OverflowException) {
399                         }
400                         try {
401                                 XmlConvert.ToUInt16 ("65536");
402                                 AssertType.Fail ("65536");
403                         } catch (OverflowException) {
404                         }
405                         try {
406                                 XmlConvert.ToUInt16 ("0x10000");
407                                 AssertType.Fail ("0x10000");
408                         } catch (FormatException) {
409                         }
410                 }
411                 
412                 [Test]
413                 public void ToUInt32 ()
414                 {
415                         AssertType.AreEqual (0, XmlConvert.ToUInt32 ("0"), "0");
416                         AssertType.AreEqual (1, XmlConvert.ToUInt32 ("1"), "1");
417                         AssertType.AreEqual (uint.MaxValue, XmlConvert.ToUInt32 ("4294967295"), "4294967295");
418                         try {
419                                 uint.Parse ("4294967296", CultureInfo.CurrentCulture);
420                                 AssertType.Fail ("uint.Parse(current culture)");
421                         } catch (OverflowException) {
422                         }
423                         try {
424                                 uint.Parse ("4294967296", CultureInfo.InvariantCulture);
425                                 AssertType.Fail ("uint.Parse(invariant culture)");
426                         } catch (OverflowException) {
427                         }
428                         try {
429                                 XmlConvert.ToUInt32 ("4294967296");
430                                 AssertType.Fail ("4294967296");
431                         } catch (OverflowException) {
432                         }
433                         try {
434                                 XmlConvert.ToUInt32 ("0x10000");
435                                 AssertType.Fail ("0x10000");
436                         } catch (FormatException) {
437                         }
438                 }
439                 
440                 [Test]
441                 public void ToUInt64 ()
442                 {
443                         AssertType.AreEqual (0, XmlConvert.ToUInt64 ("0"), "0");
444                         AssertType.AreEqual (1, XmlConvert.ToUInt64 ("1"), "1");
445                         AssertType.AreEqual (ulong.MaxValue, XmlConvert.ToUInt64 ("18446744073709551615"), "18446744073709551615");
446                         try {
447                                 ulong.Parse ("18446744073709551616", CultureInfo.CurrentCulture);
448                                 AssertType.Fail ("ulong.Parse(current culture)");
449                         } catch (OverflowException) {
450                         }
451                         try {
452                                 ulong.Parse ("18446744073709551616", CultureInfo.InvariantCulture);
453                                 AssertType.Fail ("ulong.Parse(invariant culture)");
454                         } catch (OverflowException) {
455                         }
456                         try {
457                                 XmlConvert.ToUInt64 ("18446744073709551616");
458                                 AssertType.Fail ("18446744073709551616");
459                         } catch (OverflowException) {
460                         }
461                         try {
462                                 XmlConvert.ToUInt64 ("0x10000");
463                                 AssertType.Fail ("0x10000");
464                         } catch (FormatException) {
465                         }
466                 }
467                 
468                 [Test]
469                 public void VerifyName ()
470                 {
471                         VerifyNameValid ("a");
472                         VerifyNameValid ("a1");
473                         VerifyNameValid ("\u3041");
474                         VerifyNameValid ("a:b");
475                         VerifyNameValid ("_");
476                         VerifyNameValid ("__");
477                         VerifyNameValid ("_1");
478                         VerifyNameValid (":");
479                         VerifyNameValid (":a");
480                         VerifyNameValid ("a.b");
481                 }
482
483                 [Test]
484                 public void VerifyNameInvalid ()
485                 {
486                         VerifyNameInvalid ("!");
487                         VerifyNameInvalid ("_a!b");
488                         VerifyNameInvalid ("?a");
489                         VerifyNameInvalid (" ");
490                 }
491
492                 [Test]
493                 [ExpectedException (typeof (ArgumentNullException))]
494                 public void VerifyNameNull ()
495                 {
496                         XmlConvert.VerifyName (null);
497                 }
498
499                 [Test]
500                 [ExpectedException (typeof (ArgumentNullException))]
501                 public void VerifyNameEmpty ()
502                 {
503                         XmlConvert.VerifyName ("");
504                 }
505
506                 private void VerifyNameValid (string value)
507                 {
508                         try {
509                                 XmlConvert.VerifyName (value);
510                         } catch (XmlException) {
511                                 AssertType.Fail (String.Format ("'{0}'", value));
512                         }
513                 }
514
515                 private void VerifyNameInvalid (string value)
516                 {
517                         try {
518                                 XmlConvert.VerifyName (value);
519                                 AssertType.Fail (value);
520                         } catch (XmlException) {
521                         }
522                 }
523
524                 [Test]
525                 public void VerifyNCName ()
526                 {
527                         AssertEquals ("foo", XmlConvert.VerifyNCName ("foo"));
528                         try {
529                                 XmlConvert.VerifyNCName ("?foo");
530                                 Fail ();
531                         } catch (XmlException) {}
532                         try {
533                                 XmlConvert.VerifyNCName (":foo");
534                                 Fail ();
535                         } catch (XmlException) {}
536                         try {
537                                 XmlConvert.VerifyNCName ("foo:bar");
538                                 Fail ();
539                         } catch (XmlException) {}
540                         try {
541                                 XmlConvert.VerifyNCName ("foo:bar:baz");
542                                 Fail ();
543                         } catch (XmlException) {}
544                 }
545
546                 [Test]
547                 [ExpectedException (typeof (ArgumentNullException))]
548                 public void VerifyNCNameNull ()
549                 {
550                         XmlConvert.VerifyNCName (null);
551                 }
552
553                 [Test]
554                 [ExpectedException (typeof (ArgumentNullException))]
555                 public void VerifyNCNameEmpty ()
556                 {
557                         XmlConvert.VerifyNCName ("");
558                 }
559
560                 [Test]
561                 public void DurationZero () // bug #77350
562                 {
563                         AssertEquals ("PT0S", XmlConvert.ToString (TimeSpan.FromSeconds (0)));
564                 }
565
566 #if NET_2_0
567                 [Test]
568                 public void VerifyTOKEN ()
569                 {
570                         VerifyToken ("", true);
571                         VerifyToken (" ", false);
572                         VerifyToken ("A", true);
573                         VerifyToken ("!", true);
574                         VerifyToken (" !", false);
575                         VerifyToken ("! ", false);
576                         VerifyToken ("! !", true);
577                         VerifyToken ("!\t!", false);
578                         VerifyToken ("!\n!", false);
579                         VerifyToken ("!\r!", false);
580                         VerifyToken ("###", true);
581                 }
582
583                 private void VerifyToken (string s, bool success)
584                 {
585                         try {
586                                 XmlConvert.VerifyTOKEN (s);
587                                 if (success)
588                                         return;
589                                 AssertType.Fail (s + "should fail");
590                         } catch (XmlException ex) {
591                                 if (success)
592                                         AssertType.Fail (s + "should not fail");
593                         }
594                 }
595 #endif
596         }
597 }
598