XmlConvertTests.cs 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694
  1. //
  2. // System.Xml.XmlConvertTests.cs
  3. //
  4. // Authors: Atsushi Enomoto ([email protected]), Jon Kessler ([email protected])
  5. //
  6. // (C) 2003 Atsushi Enomoto, Jon Kessler
  7. //
  8. using System;
  9. using System.Globalization;
  10. using System.Xml;
  11. using NUnit.Framework;
  12. using AssertType = NUnit.Framework.Assert;
  13. namespace MonoTests.System.Xml
  14. {
  15. [TestFixture]
  16. public class XmlConvertTests : Assertion
  17. {
  18. private void AssertName (string result, string source)
  19. {
  20. AssertEquals (result,
  21. XmlConvert.EncodeName (source));
  22. }
  23. private void AssertNmToken (string result, string source)
  24. {
  25. AssertEquals (result,
  26. XmlConvert.EncodeNmToken (source));
  27. }
  28. [Test]
  29. public void DecodeName ()
  30. {
  31. AssertEquals (null, XmlConvert.DecodeName (null));
  32. AssertEquals ("", XmlConvert.DecodeName (""));
  33. AssertEquals ("Test", XmlConvert.DecodeName ("Test"));
  34. AssertEquals ("_Test", XmlConvert.DecodeName ("_Test"));
  35. AssertEquals ("_hello_friends", XmlConvert.DecodeName ("_hello_friends"));
  36. AssertEquals ("_hello friends", XmlConvert.DecodeName ("_hello friends"));
  37. AssertEquals (" ", XmlConvert.DecodeName ("_x0020_"));
  38. }
  39. [Test]
  40. public void EncodeLocalName ()
  41. {
  42. AssertNull (XmlConvert.EncodeLocalName (null));
  43. AssertEquals (String.Empty, XmlConvert.EncodeLocalName (String.Empty));
  44. AssertEquals ("Hello_x003A__x0020_", XmlConvert.EncodeLocalName ("Hello: "));
  45. AssertEquals ("Hello", XmlConvert.EncodeLocalName ("Hello"));
  46. }
  47. [Test]
  48. public void EncodeName ()
  49. {
  50. AssertNull (XmlConvert.EncodeName (null));
  51. AssertEquals (String.Empty, XmlConvert.EncodeName (String.Empty));
  52. AssertName ("Test", "Test");
  53. AssertName ("Hello_x0020_my_x0020_friends.", "Hello my friends.");
  54. AssertName ("_x0031_23", "123");
  55. AssertName ("_x005F_x0031_23", "_x0031_23");
  56. }
  57. [Test]
  58. public void EncodeNmToken ()
  59. {
  60. AssertNull (XmlConvert.EncodeNmToken (null));
  61. AssertNmToken ("Test", "Test");
  62. AssertNmToken ("Hello_x0020_my_x0020_friends.", "Hello my friends.");
  63. AssertNmToken ("123", "123");
  64. AssertNmToken ("_x005F_x0031_23", "_x0031_23");
  65. }
  66. [Test]
  67. [ExpectedException (typeof (XmlException))]
  68. public void EncodeNmTokenError ()
  69. {
  70. XmlConvert.EncodeNmToken (String.Empty);
  71. }
  72. [Test]
  73. public void ToBoolean ()
  74. {
  75. AssertEquals (true, XmlConvert.ToBoolean (" 1 "));
  76. AssertEquals (true, XmlConvert.ToBoolean (" true "));
  77. AssertEquals (false, XmlConvert.ToBoolean (" 0 "));
  78. AssertEquals (false, XmlConvert.ToBoolean (" false "));
  79. try
  80. {
  81. AssertEquals (false, XmlConvert.ToBoolean (" invalid "));
  82. }
  83. catch (FormatException)
  84. {
  85. }
  86. }
  87. [Test]
  88. public void ToByte ()
  89. {
  90. AssertEquals (255, XmlConvert.ToByte ("255"));
  91. }
  92. [Test]
  93. public void ToChar ()
  94. {
  95. AssertEquals ('x', XmlConvert.ToChar ("x"));
  96. }
  97. [Test]
  98. public void ToDateTime ()
  99. {
  100. //dateTime
  101. AssertEquals (632001798000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00").Ticks);
  102. AssertEquals (632001798000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.0").Ticks);
  103. AssertEquals (632001798000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.00").Ticks);
  104. AssertEquals (632001798000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.000").Ticks);
  105. AssertEquals (632001798000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.0000").Ticks);
  106. AssertEquals (632001798000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.00000").Ticks);
  107. AssertEquals (632001798000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.000000").Ticks);
  108. AssertEquals (632001798000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.0000000").Ticks);
  109. /*
  110. // These tests also failed on MS.NET
  111. AssertEquals (632001150000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00+13:00").Ticks);
  112. AssertEquals (632001150000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.0+13:00").Ticks);
  113. AssertEquals (632001150000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.00+13:00").Ticks);
  114. AssertEquals (632001150000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.000+13:00").Ticks);
  115. AssertEquals (632001150000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.0000+13:00").Ticks);
  116. AssertEquals (632001150000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.00000+13:00").Ticks);
  117. AssertEquals (632001150000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.000000+13:00").Ticks);
  118. AssertEquals (632001150000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.0000000+13:00").Ticks);
  119. AssertEquals (632001618000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00Z").Ticks);
  120. AssertEquals (632001618000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.0Z").Ticks);
  121. AssertEquals (632001618000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.00Z").Ticks);
  122. AssertEquals (632001618000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.000Z").Ticks);
  123. AssertEquals (632001618000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.0000Z").Ticks);
  124. AssertEquals (632001618000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.00000Z").Ticks);
  125. AssertEquals (632001618000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.000000Z").Ticks);
  126. AssertEquals (632001618000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.0000000Z").Ticks);
  127. */
  128. //time
  129. DateTime t1 = new DateTime (DateTime.Today.Year, 1, 1);
  130. t1 = DateTime.Today + new TimeSpan (12,0,0);
  131. AssertEquals (t1.Ticks, XmlConvert.ToDateTime ("12:00:00").Ticks);
  132. AssertEquals (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.0").Ticks);
  133. AssertEquals (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.00").Ticks);
  134. AssertEquals (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.000").Ticks);
  135. AssertEquals (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.0000").Ticks);
  136. AssertEquals (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.00000").Ticks);
  137. AssertEquals (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.000000").Ticks);
  138. AssertEquals (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.0000000").Ticks);
  139. //AssertEquals (t1.Ticks, XmlConvert.ToDateTime ("12:00:00+13:00").Ticks);//doesn't work on .NET
  140. //AssertEquals (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.f+13:00").Ticks);//doesn't work on .NET
  141. //AssertEquals (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.ff+13:00").Ticks);//doesn't work on .NET
  142. //AssertEquals (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.fff+13:00").Ticks);//doesn't work on .NET
  143. //AssertEquals (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.ffff+13:00").Ticks);//doesn't work on .NET
  144. //AssertEquals (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.fffff+13:00").Ticks);//doesn't work on .NET
  145. //AssertEquals (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.ffffff+13:00").Ticks);//doesn't work on .NET
  146. //AssertEquals (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.fffffff+13:00").Ticks);//doesn't work on .NET
  147. //AssertEquals (t1.Ticks, XmlConvert.ToDateTime ("12:00:00Z").Ticks);//doesn't work on .NET
  148. //AssertEquals (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.fZ").Ticks);//doesn't work on .NET
  149. //AssertEquals (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.ffZ").Ticks);//doesn't work on .NET
  150. //AssertEquals (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.fffZ").Ticks);//doesn't work on .NET
  151. //AssertEquals (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.ffffZ").Ticks);//doesn't work on .NET
  152. //AssertEquals (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.fffffZ").Ticks);//doesn't work on .NET
  153. //AssertEquals (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.ffffffZ").Ticks);//doesn't work on .NET
  154. //AssertEquals (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.fffffffZ").Ticks);//doesn't work on .NET
  155. //date
  156. AssertEquals (632001312000000000L, XmlConvert.ToDateTime ("2003-09-26").Ticks);
  157. // AssertEquals (632000664000000000L, XmlConvert.ToDateTime ("2003-09-26+13:00").Ticks);
  158. // AssertEquals (632001132000000000L, XmlConvert.ToDateTime ("2003-09-26Z").Ticks);
  159. //gYearMonth
  160. AssertEquals (631979712000000000L, XmlConvert.ToDateTime ("2003-09").Ticks);
  161. // AssertEquals (631979064000000000L, XmlConvert.ToDateTime ("2003-09+13:00").Ticks);
  162. // AssertEquals (631979532000000000L, XmlConvert.ToDateTime ("2003-09Z").Ticks);
  163. //gYear
  164. AssertEquals (631769760000000000L, XmlConvert.ToDateTime ("2003").Ticks);
  165. // AssertEquals (631769076000000000L, XmlConvert.ToDateTime ("2003+13:00").Ticks);
  166. // AssertEquals (631769544000000000L, XmlConvert.ToDateTime ("2003Z").Ticks);
  167. //gMonthDay
  168. // Don't try locale-dependent test
  169. // AssertEquals (632001312000000000L, XmlConvert.ToDateTime ("--09-26").Ticks);//shouldn't have a hardcoded value
  170. // AssertEquals (632000664000000000L, XmlConvert.ToDateTime ("--09-26+13:00").Ticks);//shouldn't have a hardcoded value
  171. // AssertEquals (632001132000000000L, XmlConvert.ToDateTime ("--09-26Z").Ticks);//shouldn't have a hardcoded value
  172. //gDay
  173. // Don't try locale-dependent test
  174. // AssertEquals (631791360000000000L, XmlConvert.ToDateTime ("---26").Ticks);//shouldn't have a hardcoded value
  175. // AssertEquals (631790676000000000L, XmlConvert.ToDateTime ("---26+13:00").Ticks);//shouldn't have a hardcoded value
  176. // AssertEquals (631791144000000000L, XmlConvert.ToDateTime ("---26Z").Ticks);//shouldn't have a hardcoded value
  177. try
  178. {
  179. AssertEquals (45L, XmlConvert.ToDateTime (";ljdfas;kl").Ticks);
  180. }
  181. catch (Exception)
  182. {
  183. }
  184. }
  185. [Test]
  186. public void ToDecimal ()
  187. {
  188. AssertEquals (1.987, XmlConvert.ToDecimal ("1.987"));
  189. }
  190. [Test]
  191. public void ToDouble ()
  192. {
  193. AssertEquals (1.0d/0.0d, XmlConvert.ToDouble ("INF"));
  194. AssertEquals (-1.0d/0.0d, XmlConvert.ToDouble ("-INF"));
  195. AssertEquals (0.0d/0.0d, XmlConvert.ToDouble ("NaN"));
  196. AssertEquals (789324, XmlConvert.ToDouble ("789324"));
  197. }
  198. [Test]
  199. public void ToDoubleRoundtrip ()
  200. {
  201. // bug #320424
  202. string s = XmlConvert.ToString (double.MaxValue);
  203. AssertEquals (double.MaxValue, XmlConvert.ToDouble (s));
  204. }
  205. [Test]
  206. public void ToGuid ()
  207. {
  208. AssertEquals (new Guid ("ca761232-ed42-11ce-bacd-00aa0057b223"), XmlConvert.ToGuid ("ca761232-ed42-11ce-bacd-00aa0057b223"));
  209. }
  210. [Test]
  211. public void ToInt16 ()
  212. {
  213. AssertType.AreEqual (0, XmlConvert.ToInt16 ("0"), "0");
  214. AssertType.AreEqual (-1, XmlConvert.ToInt16 ("-1"), "-1");
  215. AssertType.AreEqual (1, XmlConvert.ToInt16 ("1"), "1");
  216. AssertType.AreEqual (32767, XmlConvert.ToInt16 ("32767"), "32767");
  217. AssertType.AreEqual (-32768, XmlConvert.ToInt16 ("-32768"), "-32768");
  218. try {
  219. XmlConvert.ToInt16 ("32768");
  220. AssertType.Fail ("32768");
  221. } catch (OverflowException) {
  222. }
  223. try {
  224. XmlConvert.ToInt16 ("-32769");
  225. AssertType.Fail ("-32769");
  226. } catch (OverflowException) {
  227. }
  228. try {
  229. XmlConvert.ToInt16 ("0x100");
  230. AssertType.Fail ("0x100");
  231. } catch (FormatException) {
  232. }
  233. }
  234. [Test]
  235. public void ToInt32 ()
  236. {
  237. AssertType.AreEqual (0, XmlConvert.ToInt32 ("0"), "0");
  238. AssertType.AreEqual (-1, XmlConvert.ToInt32 ("-1"), "-1");
  239. AssertType.AreEqual (1, XmlConvert.ToInt32 ("1"), "1");
  240. AssertType.AreEqual (int.MaxValue, XmlConvert.ToInt32 ("2147483647"), "2147483647");
  241. AssertType.AreEqual (int.MinValue, XmlConvert.ToInt32 ("-2147483648"), "-2147483648");
  242. try {
  243. int.Parse ("2147483648", CultureInfo.CurrentCulture);
  244. AssertType.Fail ("int.Parse(current culture)");
  245. } catch (OverflowException) {
  246. }
  247. try {
  248. int.Parse ("2147483648", CultureInfo.InvariantCulture);
  249. AssertType.Fail ("int.Parse(invariant culture)");
  250. } catch (OverflowException) {
  251. }
  252. try {
  253. XmlConvert.ToInt32 ("2147483648");
  254. AssertType.Fail ("2147483648");
  255. } catch (OverflowException) {
  256. }
  257. try {
  258. XmlConvert.ToInt32 ("-2147483649");
  259. AssertType.Fail ("-2147483649");
  260. } catch (OverflowException) {
  261. }
  262. try {
  263. XmlConvert.ToInt32 ("0x10000");
  264. AssertType.Fail ("0x10000");
  265. } catch (FormatException) {
  266. }
  267. }
  268. [Test]
  269. public void ToInt64 ()
  270. {
  271. AssertType.AreEqual (0, XmlConvert.ToInt64 ("0"), "0");
  272. AssertType.AreEqual (-1, XmlConvert.ToInt64 ("-1"), "-1");
  273. AssertType.AreEqual (1, XmlConvert.ToInt64 ("1"), "1");
  274. AssertType.AreEqual (long.MaxValue, XmlConvert.ToInt64 ("9223372036854775807"), "9223372036854775807");
  275. AssertType.AreEqual (long.MinValue, XmlConvert.ToInt64 ("-9223372036854775808"), "-9223372036854775808");
  276. try {
  277. XmlConvert.ToInt64 ("9223372036854775808");
  278. AssertType.Fail ("9223372036854775808");
  279. } catch (OverflowException) {
  280. }
  281. try {
  282. XmlConvert.ToInt64 ("-9223372036854775809");
  283. AssertType.Fail ("-9223372036854775809");
  284. } catch (OverflowException) {
  285. }
  286. try {
  287. XmlConvert.ToInt64 ("0x10000");
  288. AssertType.Fail ("0x10000");
  289. } catch (FormatException) {
  290. }
  291. }
  292. [Test]
  293. public void ToSByte ()
  294. {
  295. AssertType.AreEqual (0, XmlConvert.ToSByte ("0"), "0");
  296. AssertType.AreEqual (-1, XmlConvert.ToSByte ("-1"), "-1");
  297. AssertType.AreEqual (1, XmlConvert.ToSByte ("1"), "1");
  298. AssertType.AreEqual (127, XmlConvert.ToSByte ("127"), "127");
  299. AssertType.AreEqual (-128, XmlConvert.ToSByte ("-128"), "-128");
  300. try {
  301. XmlConvert.ToSByte ("128");
  302. AssertType.Fail ("128");
  303. } catch (OverflowException) {
  304. }
  305. try {
  306. XmlConvert.ToSByte ("-129");
  307. AssertType.Fail ("-129");
  308. } catch (OverflowException) {
  309. }
  310. try {
  311. XmlConvert.ToSByte ("0x80");
  312. AssertType.Fail ("0x80");
  313. } catch (FormatException) {
  314. }
  315. }
  316. [Test]
  317. public void ToSingle ()//not done
  318. {
  319. }
  320. [Test]
  321. public void ToStringTest ()//not done
  322. {
  323. // Don't include TimeZone value for test value.
  324. string dateString =
  325. XmlConvert.ToString (new DateTime (2003, 5, 5));
  326. AssertEquals (33, dateString.Length);
  327. AssertEquals ("2003-05-05T00:00:00.0000000", dateString.Substring (0, 27));
  328. }
  329. [Test]
  330. public void FromTimeSpan ()
  331. {
  332. // bug #77252
  333. TimeSpan t1 = TimeSpan.FromTicks (
  334. TimeSpan.TicksPerSecond + 1);
  335. AssertEquals ("PT1.0000001S", XmlConvert.ToString (t1));
  336. }
  337. [Test]
  338. public void ToTimeSpan ()
  339. {
  340. AssertEquals ("#1", new TimeSpan (0, 0, 0, 0, 1),
  341. XmlConvert.ToTimeSpan ("PT0.001S"));
  342. // bug #76328
  343. AssertEquals ("#2", new TimeSpan (0, 0, 0, 0, 100),
  344. XmlConvert.ToTimeSpan ("PT0.1S"));
  345. AssertEquals ("#3", new TimeSpan (0, 0, 0, 0, 100),
  346. XmlConvert.ToTimeSpan ("PT0.100S"));
  347. AssertEquals ("#4", new TimeSpan (0, 0, 0, 0, 10),
  348. XmlConvert.ToTimeSpan ("PT0.010S"));
  349. AssertEquals ("#5", new TimeSpan (0, 0, 0, 0, 10),
  350. XmlConvert.ToTimeSpan ("PT0.01S"));
  351. // bug #77252
  352. AssertEquals ("#6",
  353. TimeSpan.FromTicks (TimeSpan.TicksPerSecond + 1),
  354. XmlConvert.ToTimeSpan ("PT1.0000001S"));
  355. AssertEquals ("#7",
  356. TimeSpan.MinValue,
  357. XmlConvert.ToTimeSpan ("-P10675199DT2H48M5.4775808S"));
  358. AssertEquals ("#8",
  359. TimeSpan.MaxValue,
  360. XmlConvert.ToTimeSpan ("P10675199DT2H48M5.4775807S"));
  361. }
  362. [Test]
  363. public void ToUInt16 ()
  364. {
  365. AssertType.AreEqual (0, XmlConvert.ToUInt16 ("0"), "0");
  366. AssertType.AreEqual (1, XmlConvert.ToUInt16 ("1"), "1");
  367. AssertType.AreEqual (ushort.MaxValue, XmlConvert.ToUInt16 ("65535"), "65535");
  368. try {
  369. ushort.Parse ("65536", CultureInfo.CurrentCulture);
  370. AssertType.Fail ("ushort.Parse(current culture)");
  371. } catch (OverflowException) {
  372. }
  373. try {
  374. ushort.Parse ("65536", CultureInfo.InvariantCulture);
  375. AssertType.Fail ("ushort.Parse(invariant culture)");
  376. } catch (OverflowException) {
  377. }
  378. try {
  379. XmlConvert.ToUInt16 ("65536");
  380. AssertType.Fail ("65536");
  381. } catch (OverflowException) {
  382. }
  383. try {
  384. XmlConvert.ToUInt16 ("0x10000");
  385. AssertType.Fail ("0x10000");
  386. } catch (FormatException) {
  387. }
  388. }
  389. [Test]
  390. public void ToUInt32 ()
  391. {
  392. AssertType.AreEqual (0, XmlConvert.ToUInt32 ("0"), "0");
  393. AssertType.AreEqual (1, XmlConvert.ToUInt32 ("1"), "1");
  394. AssertType.AreEqual (uint.MaxValue, XmlConvert.ToUInt32 ("4294967295"), "4294967295");
  395. try {
  396. uint.Parse ("4294967296", CultureInfo.CurrentCulture);
  397. AssertType.Fail ("uint.Parse(current culture)");
  398. } catch (OverflowException) {
  399. }
  400. try {
  401. uint.Parse ("4294967296", CultureInfo.InvariantCulture);
  402. AssertType.Fail ("uint.Parse(invariant culture)");
  403. } catch (OverflowException) {
  404. }
  405. try {
  406. XmlConvert.ToUInt32 ("4294967296");
  407. AssertType.Fail ("4294967296");
  408. } catch (OverflowException) {
  409. }
  410. try {
  411. XmlConvert.ToUInt32 ("0x10000");
  412. AssertType.Fail ("0x10000");
  413. } catch (FormatException) {
  414. }
  415. }
  416. [Test]
  417. public void ToUInt64 ()
  418. {
  419. AssertType.AreEqual (0, XmlConvert.ToUInt64 ("0"), "0");
  420. AssertType.AreEqual (1, XmlConvert.ToUInt64 ("1"), "1");
  421. AssertType.AreEqual (ulong.MaxValue, XmlConvert.ToUInt64 ("18446744073709551615"), "18446744073709551615");
  422. try {
  423. ulong.Parse ("18446744073709551616", CultureInfo.CurrentCulture);
  424. AssertType.Fail ("ulong.Parse(current culture)");
  425. } catch (OverflowException) {
  426. }
  427. try {
  428. ulong.Parse ("18446744073709551616", CultureInfo.InvariantCulture);
  429. AssertType.Fail ("ulong.Parse(invariant culture)");
  430. } catch (OverflowException) {
  431. }
  432. try {
  433. XmlConvert.ToUInt64 ("18446744073709551616");
  434. AssertType.Fail ("18446744073709551616");
  435. } catch (OverflowException) {
  436. }
  437. try {
  438. XmlConvert.ToUInt64 ("0x10000");
  439. AssertType.Fail ("0x10000");
  440. } catch (FormatException) {
  441. }
  442. }
  443. [Test]
  444. public void VerifyName ()
  445. {
  446. VerifyNameValid ("a");
  447. VerifyNameValid ("a1");
  448. VerifyNameValid ("\u3041");
  449. VerifyNameValid ("a:b");
  450. VerifyNameValid ("_");
  451. VerifyNameValid ("__");
  452. VerifyNameValid ("_1");
  453. VerifyNameValid (":");
  454. VerifyNameValid (":a");
  455. VerifyNameValid ("a.b");
  456. }
  457. [Test]
  458. public void VerifyNameInvalid ()
  459. {
  460. VerifyNameInvalid ("!");
  461. VerifyNameInvalid ("_a!b");
  462. VerifyNameInvalid ("?a");
  463. VerifyNameInvalid (" ");
  464. }
  465. [Test]
  466. [ExpectedException (typeof (ArgumentNullException))]
  467. public void VerifyNameNull ()
  468. {
  469. XmlConvert.VerifyName (null);
  470. }
  471. [Test]
  472. [ExpectedException (typeof (ArgumentNullException))]
  473. public void VerifyNameEmpty ()
  474. {
  475. XmlConvert.VerifyName ("");
  476. }
  477. private void VerifyNameValid (string value)
  478. {
  479. try {
  480. XmlConvert.VerifyName (value);
  481. } catch (XmlException) {
  482. AssertType.Fail (String.Format ("'{0}'", value));
  483. }
  484. }
  485. private void VerifyNameInvalid (string value)
  486. {
  487. try {
  488. XmlConvert.VerifyName (value);
  489. AssertType.Fail (value);
  490. } catch (XmlException) {
  491. }
  492. }
  493. [Test]
  494. public void VerifyNCName ()
  495. {
  496. AssertEquals ("foo", XmlConvert.VerifyNCName ("foo"));
  497. try {
  498. XmlConvert.VerifyNCName ("?foo");
  499. Fail ();
  500. } catch (XmlException) {}
  501. try {
  502. XmlConvert.VerifyNCName (":foo");
  503. Fail ();
  504. } catch (XmlException) {}
  505. try {
  506. XmlConvert.VerifyNCName ("foo:bar");
  507. Fail ();
  508. } catch (XmlException) {}
  509. try {
  510. XmlConvert.VerifyNCName ("foo:bar:baz");
  511. Fail ();
  512. } catch (XmlException) {}
  513. }
  514. [Test]
  515. [ExpectedException (typeof (ArgumentNullException))]
  516. public void VerifyNCNameNull ()
  517. {
  518. XmlConvert.VerifyNCName (null);
  519. }
  520. [Test]
  521. [ExpectedException (typeof (ArgumentNullException))]
  522. public void VerifyNCNameEmpty ()
  523. {
  524. XmlConvert.VerifyNCName ("");
  525. }
  526. [Test]
  527. public void DurationZero () // bug #77350
  528. {
  529. AssertEquals ("PT0S", XmlConvert.ToString (TimeSpan.FromSeconds (0)));
  530. }
  531. #if NET_2_0
  532. [Test]
  533. public void VerifyTOKEN ()
  534. {
  535. VerifyToken ("", true);
  536. VerifyToken (" ", false);
  537. VerifyToken ("A", true);
  538. VerifyToken ("!", true);
  539. VerifyToken (" !", false);
  540. VerifyToken ("! ", false);
  541. VerifyToken ("! !", true);
  542. VerifyToken ("!\t!", false);
  543. VerifyToken ("!\n!", false);
  544. VerifyToken ("!\r!", false);
  545. VerifyToken ("###", true);
  546. }
  547. private void VerifyToken (string s, bool success)
  548. {
  549. try {
  550. XmlConvert.VerifyTOKEN (s);
  551. if (success)
  552. return;
  553. AssertType.Fail (s + "should fail");
  554. } catch (XmlException ex) {
  555. if (success)
  556. AssertType.Fail (s + "should not fail");
  557. }
  558. }
  559. [Test]
  560. public void XmlDateTimeSerializationModeAndMaxValue ()
  561. {
  562. AssertEquals ("#1", "9999-12-31T23:59:59.9999999", XmlConvert.ToString (DateTime.MaxValue, XmlDateTimeSerializationMode.Unspecified).Substring (0, 27));
  563. AssertEquals ("#2", "9999-12-31T23:59:59.9999999Z", XmlConvert.ToString (DateTime.MaxValue, XmlDateTimeSerializationMode.Utc));
  564. AssertEquals ("#3", "9999-12-31T23:59:59.9999999", XmlConvert.ToString (DateTime.MaxValue, XmlDateTimeSerializationMode.RoundtripKind));
  565. AssertEquals ("#4", "9999-12-31T23:59:59.9999999", XmlConvert.ToString (DateTime.MaxValue, XmlDateTimeSerializationMode.Local).Substring (0, 27));
  566. // direct formatting string - no difference
  567. AssertEquals ("#5", "9999-12-31T23:59:59.9999999Z", XmlConvert.ToString (DateTime.MaxValue, "yyyy-MM-ddTHH:mm:ss.FFFFFFFZ"));
  568. AssertEquals ("#6", "9999-12-31T23:59:59.9999999", XmlConvert.ToString (DateTime.MaxValue, "yyyy-MM-ddTHH:mm:ss.FFFFFFFzzz").Substring (0, 27));
  569. }
  570. [Test]
  571. public void XmlDateTimeSerializationModeRountripKind ()
  572. {
  573. string format = "yyyy-MM-ddTHH:mm:ss.FFFFFFFK";
  574. string s = XmlConvert.ToString (DateTime.UtcNow, format);
  575. AssertType.AreEqual ('Z', s [s.Length -1], "#1-1");
  576. // LAMESPEC: .NET has a bug here that 'K' in format string does not reflect 'Z' as Utc Kind.
  577. // https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=307694
  578. //AssertType.AreEqual (DateTimeKind.Utc, XmlConvert.ToDateTime (s, format).Kind, "#1-2");
  579. s = XmlConvert.ToString (DateTime.UtcNow, XmlDateTimeSerializationMode.RoundtripKind);
  580. AssertType.AreEqual ('Z', s [s.Length -1], "#2-1");
  581. AssertType.AreEqual (DateTimeKind.Utc, XmlConvert.ToDateTime (s, XmlDateTimeSerializationMode.RoundtripKind).Kind, "#2-2");
  582. }
  583. [Test]
  584. public void XmlDateTimeSerializationModeUnspecified ()
  585. {
  586. AssertEquals ("#1", 27, XmlConvert.ToString (new DateTime (DateTime.MaxValue.Ticks, DateTimeKind.Utc), XmlDateTimeSerializationMode.Unspecified).Length);
  587. DateTime dt1 = XmlConvert.ToDateTime ("0001-02-03T10:20:30.0000+02:00", XmlDateTimeSerializationMode.Unspecified);
  588. DateTime dt2 = XmlConvert.ToDateTime ("0001-02-03T10:20:30.0000", XmlDateTimeSerializationMode.Unspecified);
  589. AssertEquals ("#2", false, dt1 == dt2);
  590. XmlConvert.ToDateTime ("2006-05-30T09:48:32.0Z", XmlDateTimeSerializationMode.Unspecified);
  591. string format = "yyyy-MM-ddTHH:mm:ss.FFFFFFFK";
  592. XmlConvert.ToDateTime (XmlConvert.ToString (DateTime.UtcNow, format), XmlDateTimeSerializationMode.Unspecified);
  593. }
  594. [Test]
  595. public void XmlDateTimeSerializationModeSeveralFormats ()
  596. {
  597. XmlDateTimeSerializationMode m = XmlDateTimeSerializationMode.RoundtripKind;
  598. XmlConvert.ToDateTime ("0001", m);
  599. XmlConvert.ToDateTime ("0001Z", m);
  600. XmlConvert.ToDateTime ("0001+09:00", m);
  601. XmlConvert.ToDateTime ("0001-02", m);
  602. XmlConvert.ToDateTime ("0001-02Z", m);
  603. XmlConvert.ToDateTime ("0001-02+09:00", m);
  604. XmlConvert.ToDateTime ("0001-02-03", m);
  605. XmlConvert.ToDateTime ("0001-02-03Z", m);
  606. XmlConvert.ToDateTime ("0001-02-03+09:00", m);
  607. XmlConvert.ToDateTime ("--02-03", m);
  608. XmlConvert.ToDateTime ("--02-03Z", m);
  609. XmlConvert.ToDateTime ("--02-03+09:00", m);
  610. XmlConvert.ToDateTime ("---03", m);
  611. XmlConvert.ToDateTime ("---03Z", m);
  612. XmlConvert.ToDateTime ("---03+09:00", m);
  613. XmlConvert.ToDateTime ("10:20:30", m);
  614. XmlConvert.ToDateTime ("10:20:30Z", m);
  615. XmlConvert.ToDateTime ("10:20:30+09:00", m);
  616. XmlConvert.ToDateTime ("0001-02-03T10:20:30", m);
  617. XmlConvert.ToDateTime ("0001-02-03T10:20:30Z", m);
  618. XmlConvert.ToDateTime ("0001-02-03T10:20:30+09:00", m);
  619. XmlConvert.ToDateTime ("0001-02-03T10:20:30.00", m);
  620. XmlConvert.ToDateTime ("0001-02-03T10:20:30.00Z", m);
  621. XmlConvert.ToDateTime ("0001-02-03T10:20:30.00+09:00", m);
  622. XmlConvert.ToDateTime ("0001-02-03T10:20:30.0000", m);
  623. XmlConvert.ToDateTime ("0001-02-03T10:20:30.0000Z", m);
  624. XmlConvert.ToDateTime ("0001-02-03T10:20:30.0000+09:00", m);
  625. try {
  626. XmlConvert.ToDateTime ("0001-02-03T", m);
  627. AssertType.Fail ("#1");
  628. } catch (FormatException) {
  629. }
  630. try {
  631. XmlConvert.ToDateTime ("0001-02-03T10:20", m);
  632. AssertType.Fail ("#2");
  633. } catch (FormatException) {
  634. }
  635. try {
  636. XmlConvert.ToDateTime ("0001-02-03T10:20:30.", m);
  637. AssertType.Fail ("#3");
  638. } catch (FormatException) {
  639. }
  640. }
  641. #endif
  642. }
  643. }