XmlConvertTests.cs 57 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090
  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. namespace MonoTests.System.Xml
  13. {
  14. [TestFixture]
  15. public class XmlConvertTests
  16. {
  17. private void AssertName (string result, string source)
  18. {
  19. Assert.AreEqual (result,
  20. XmlConvert.EncodeName (source));
  21. }
  22. private void AssertNmToken (string result, string source)
  23. {
  24. Assert.AreEqual (result,
  25. XmlConvert.EncodeNmToken (source));
  26. }
  27. [Test]
  28. public void DecodeName ()
  29. {
  30. Assert.AreEqual (null, XmlConvert.DecodeName (null));
  31. Assert.AreEqual ("", XmlConvert.DecodeName (""));
  32. Assert.AreEqual ("Test", XmlConvert.DecodeName ("Test"));
  33. Assert.AreEqual ("_Test", XmlConvert.DecodeName ("_Test"));
  34. Assert.AreEqual ("_hello_friends", XmlConvert.DecodeName ("_hello_friends"));
  35. Assert.AreEqual ("_hello friends", XmlConvert.DecodeName ("_hello friends"));
  36. Assert.AreEqual (" ", XmlConvert.DecodeName ("_x0020_"));
  37. }
  38. [Test]
  39. public void EncodeLocalName ()
  40. {
  41. Assert.IsNull (XmlConvert.EncodeLocalName (null));
  42. Assert.AreEqual (String.Empty, XmlConvert.EncodeLocalName (String.Empty));
  43. Assert.AreEqual ("Hello_x003A__x0020_", XmlConvert.EncodeLocalName ("Hello: "));
  44. Assert.AreEqual ("Hello", XmlConvert.EncodeLocalName ("Hello"));
  45. }
  46. [Test]
  47. public void EncodeName ()
  48. {
  49. Assert.IsNull (XmlConvert.EncodeName (null));
  50. Assert.AreEqual (String.Empty, XmlConvert.EncodeName (String.Empty));
  51. AssertName ("Test", "Test");
  52. AssertName ("Hello_x0020_my_x0020_friends.", "Hello my friends.");
  53. AssertName ("_x0031_23", "123");
  54. AssertName ("_x005F_x0031_23", "_x0031_23");
  55. }
  56. [Test]
  57. public void EncodeNmToken ()
  58. {
  59. Assert.IsNull (XmlConvert.EncodeNmToken (null));
  60. AssertNmToken ("Test", "Test");
  61. AssertNmToken ("Hello_x0020_my_x0020_friends.", "Hello my friends.");
  62. AssertNmToken ("123", "123");
  63. AssertNmToken ("_x005F_x0031_23", "_x0031_23");
  64. }
  65. [Test]
  66. public void EncodeNmTokenError ()
  67. {
  68. XmlConvert.EncodeNmToken (String.Empty);
  69. }
  70. [Test]
  71. public void ToBoolean ()
  72. {
  73. Assert.AreEqual (true, XmlConvert.ToBoolean (" 1 "));
  74. Assert.AreEqual (true, XmlConvert.ToBoolean (" true "));
  75. Assert.AreEqual (false, XmlConvert.ToBoolean (" 0 "));
  76. Assert.AreEqual (false, XmlConvert.ToBoolean (" false "));
  77. try
  78. {
  79. Assert.AreEqual (false, XmlConvert.ToBoolean (" invalid "));
  80. }
  81. catch (FormatException)
  82. {
  83. }
  84. }
  85. [Test]
  86. public void ToByte ()
  87. {
  88. Assert.AreEqual (255, XmlConvert.ToByte ("255"));
  89. }
  90. [Test]
  91. public void ToChar ()
  92. {
  93. Assert.AreEqual ('x', XmlConvert.ToChar ("x"));
  94. }
  95. [Test]
  96. public void ToDateTime ()
  97. {
  98. //dateTime
  99. Assert.AreEqual (632001798000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00").Ticks);
  100. Assert.AreEqual (632001798000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.0").Ticks);
  101. Assert.AreEqual (632001798000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.00").Ticks);
  102. Assert.AreEqual (632001798000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.000").Ticks);
  103. Assert.AreEqual (632001798000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.0000").Ticks);
  104. Assert.AreEqual (632001798000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.00000").Ticks);
  105. Assert.AreEqual (632001798000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.000000").Ticks);
  106. Assert.AreEqual (632001798000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.0000000").Ticks);
  107. /*
  108. // These tests also failed on MS.NET
  109. Assert.AreEqual (632001150000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00+13:00").Ticks);
  110. Assert.AreEqual (632001150000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.0+13:00").Ticks);
  111. Assert.AreEqual (632001150000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.00+13:00").Ticks);
  112. Assert.AreEqual (632001150000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.000+13:00").Ticks);
  113. Assert.AreEqual (632001150000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.0000+13:00").Ticks);
  114. Assert.AreEqual (632001150000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.00000+13:00").Ticks);
  115. Assert.AreEqual (632001150000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.000000+13:00").Ticks);
  116. Assert.AreEqual (632001150000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.0000000+13:00").Ticks);
  117. Assert.AreEqual (632001618000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00Z").Ticks);
  118. Assert.AreEqual (632001618000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.0Z").Ticks);
  119. Assert.AreEqual (632001618000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.00Z").Ticks);
  120. Assert.AreEqual (632001618000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.000Z").Ticks);
  121. Assert.AreEqual (632001618000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.0000Z").Ticks);
  122. Assert.AreEqual (632001618000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.00000Z").Ticks);
  123. Assert.AreEqual (632001618000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.000000Z").Ticks);
  124. Assert.AreEqual (632001618000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.0000000Z").Ticks);
  125. */
  126. //time
  127. DateTime t1 = new DateTime (DateTime.Today.Year, 1, 1);
  128. t1 = DateTime.Today + new TimeSpan (12,0,0);
  129. Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00").Ticks);
  130. Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.0").Ticks);
  131. Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.00").Ticks);
  132. Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.000").Ticks);
  133. Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.0000").Ticks);
  134. Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.00000").Ticks);
  135. Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.000000").Ticks);
  136. Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.0000000").Ticks);
  137. //Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00+13:00").Ticks);//doesn't work on .NET
  138. //Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.f+13:00").Ticks);//doesn't work on .NET
  139. //Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.ff+13:00").Ticks);//doesn't work on .NET
  140. //Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.fff+13:00").Ticks);//doesn't work on .NET
  141. //Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.ffff+13:00").Ticks);//doesn't work on .NET
  142. //Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.fffff+13:00").Ticks);//doesn't work on .NET
  143. //Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.ffffff+13:00").Ticks);//doesn't work on .NET
  144. //Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.fffffff+13:00").Ticks);//doesn't work on .NET
  145. //Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00Z").Ticks);//doesn't work on .NET
  146. //Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.fZ").Ticks);//doesn't work on .NET
  147. //Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.ffZ").Ticks);//doesn't work on .NET
  148. //Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.fffZ").Ticks);//doesn't work on .NET
  149. //Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.ffffZ").Ticks);//doesn't work on .NET
  150. //Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.fffffZ").Ticks);//doesn't work on .NET
  151. //Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.ffffffZ").Ticks);//doesn't work on .NET
  152. //Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.fffffffZ").Ticks);//doesn't work on .NET
  153. //date
  154. Assert.AreEqual (632001312000000000L, XmlConvert.ToDateTime ("2003-09-26").Ticks);
  155. // Assert.AreEqual (632000664000000000L, XmlConvert.ToDateTime ("2003-09-26+13:00").Ticks);
  156. // Assert.AreEqual (632001132000000000L, XmlConvert.ToDateTime ("2003-09-26Z").Ticks);
  157. //gYearMonth
  158. Assert.AreEqual (631979712000000000L, XmlConvert.ToDateTime ("2003-09").Ticks);
  159. // Assert.AreEqual (631979064000000000L, XmlConvert.ToDateTime ("2003-09+13:00").Ticks);
  160. // Assert.AreEqual (631979532000000000L, XmlConvert.ToDateTime ("2003-09Z").Ticks);
  161. //gYear
  162. Assert.AreEqual (631769760000000000L, XmlConvert.ToDateTime ("2003").Ticks);
  163. // Assert.AreEqual (631769076000000000L, XmlConvert.ToDateTime ("2003+13:00").Ticks);
  164. // Assert.AreEqual (631769544000000000L, XmlConvert.ToDateTime ("2003Z").Ticks);
  165. //gMonthDay
  166. // Don't try locale-dependent test
  167. // Assert.AreEqual (632001312000000000L, XmlConvert.ToDateTime ("--09-26").Ticks);//shouldn't have a hardcoded value
  168. // Assert.AreEqual (632000664000000000L, XmlConvert.ToDateTime ("--09-26+13:00").Ticks);//shouldn't have a hardcoded value
  169. // Assert.AreEqual (632001132000000000L, XmlConvert.ToDateTime ("--09-26Z").Ticks);//shouldn't have a hardcoded value
  170. //gDay
  171. // Don't try locale-dependent test
  172. // Assert.AreEqual (631791360000000000L, XmlConvert.ToDateTime ("---26").Ticks);//shouldn't have a hardcoded value
  173. // Assert.AreEqual (631790676000000000L, XmlConvert.ToDateTime ("---26+13:00").Ticks);//shouldn't have a hardcoded value
  174. // Assert.AreEqual (631791144000000000L, XmlConvert.ToDateTime ("---26Z").Ticks);//shouldn't have a hardcoded value
  175. try
  176. {
  177. Assert.AreEqual (45L, XmlConvert.ToDateTime (";ljdfas;kl").Ticks);
  178. }
  179. catch (Exception)
  180. {
  181. }
  182. }
  183. [Test]
  184. public void ToDateTimeWithSerializationMode ()
  185. {
  186. //check resulting datetime depending on serialization mode
  187. foreach (XmlDateTimeSerializationMode dateTimeSerializationMode in Enum.GetValues (typeof (XmlDateTimeSerializationMode))) {
  188. //dateTime local
  189. Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 000).Ticks,
  190. XmlConvert.ToDateTime ("2003-09-26T13:30:44", dateTimeSerializationMode).Ticks);
  191. Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 000).Ticks,
  192. XmlConvert.ToDateTime ("2003-09-26T13:30:44.0", dateTimeSerializationMode).Ticks);
  193. Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 000).Ticks,
  194. XmlConvert.ToDateTime ("2003-09-26T13:30:44.00", dateTimeSerializationMode).Ticks);
  195. Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 000).Ticks,
  196. XmlConvert.ToDateTime ("2003-09-26T13:30:44.000", dateTimeSerializationMode).Ticks);
  197. Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 000).Ticks,
  198. XmlConvert.ToDateTime ("2003-09-26T13:30:44.0000", dateTimeSerializationMode).Ticks);
  199. Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 000).Ticks,
  200. XmlConvert.ToDateTime ("2003-09-26T13:30:44.00000", dateTimeSerializationMode).Ticks);
  201. Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 000).Ticks,
  202. XmlConvert.ToDateTime ("2003-09-26T13:30:44.000000", dateTimeSerializationMode).Ticks);
  203. Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 000).Ticks,
  204. XmlConvert.ToDateTime ("2003-09-26T13:30:44.0000000", dateTimeSerializationMode).Ticks);
  205. Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 123).Ticks,
  206. XmlConvert.ToDateTime ("2003-09-26T13:30:44.123", dateTimeSerializationMode).Ticks);
  207. //dateTime with zero timezone
  208. if (dateTimeSerializationMode == XmlDateTimeSerializationMode.Local) {
  209. Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 000, DateTimeKind.Utc).ToLocalTime ().Ticks,
  210. XmlConvert.ToDateTime ("2003-09-26T13:30:44Z", dateTimeSerializationMode).Ticks);
  211. Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 000, DateTimeKind.Utc).ToLocalTime ().Ticks,
  212. XmlConvert.ToDateTime ("2003-09-26T13:30:44.0Z", dateTimeSerializationMode).Ticks);
  213. Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 000, DateTimeKind.Utc).ToLocalTime ().Ticks,
  214. XmlConvert.ToDateTime ("2003-09-26T13:30:44.00Z", dateTimeSerializationMode).Ticks);
  215. Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 000, DateTimeKind.Utc).ToLocalTime ().Ticks,
  216. XmlConvert.ToDateTime ("2003-09-26T13:30:44.000Z", dateTimeSerializationMode).Ticks);
  217. Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 000, DateTimeKind.Utc).ToLocalTime ().Ticks,
  218. XmlConvert.ToDateTime ("2003-09-26T13:30:44.0000Z", dateTimeSerializationMode).Ticks);
  219. Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 000, DateTimeKind.Utc).ToLocalTime ().Ticks,
  220. XmlConvert.ToDateTime ("2003-09-26T13:30:44.00000Z", dateTimeSerializationMode).Ticks);
  221. Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 000, DateTimeKind.Utc).ToLocalTime ().Ticks,
  222. XmlConvert.ToDateTime ("2003-09-26T13:30:44.000000Z", dateTimeSerializationMode).Ticks);
  223. Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 000, DateTimeKind.Utc).ToLocalTime ().Ticks,
  224. XmlConvert.ToDateTime ("2003-09-26T13:30:44.0000000Z", dateTimeSerializationMode).Ticks);
  225. Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 123, DateTimeKind.Utc).ToLocalTime ().Ticks,
  226. XmlConvert.ToDateTime ("2003-09-26T13:30:44.123Z", dateTimeSerializationMode).Ticks);
  227. } else {
  228. Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 000, DateTimeKind.Local).Ticks,
  229. XmlConvert.ToDateTime ("2003-09-26T13:30:44Z", dateTimeSerializationMode).Ticks);
  230. Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 000, DateTimeKind.Local).Ticks,
  231. XmlConvert.ToDateTime ("2003-09-26T13:30:44.0Z", dateTimeSerializationMode).Ticks);
  232. Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 000, DateTimeKind.Local).Ticks,
  233. XmlConvert.ToDateTime ("2003-09-26T13:30:44.00Z", dateTimeSerializationMode).Ticks);
  234. Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 000, DateTimeKind.Local).Ticks,
  235. XmlConvert.ToDateTime ("2003-09-26T13:30:44.000Z", dateTimeSerializationMode).Ticks);
  236. Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 000, DateTimeKind.Local).Ticks,
  237. XmlConvert.ToDateTime ("2003-09-26T13:30:44.0000Z", dateTimeSerializationMode).Ticks);
  238. Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 000, DateTimeKind.Local).Ticks,
  239. XmlConvert.ToDateTime ("2003-09-26T13:30:44.00000Z", dateTimeSerializationMode).Ticks);
  240. Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 000, DateTimeKind.Local).Ticks,
  241. XmlConvert.ToDateTime ("2003-09-26T13:30:44.000000Z", dateTimeSerializationMode).Ticks);
  242. Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 000, DateTimeKind.Local).Ticks,
  243. XmlConvert.ToDateTime ("2003-09-26T13:30:44.0000000Z", dateTimeSerializationMode).Ticks);
  244. Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 123, DateTimeKind.Local).Ticks,
  245. XmlConvert.ToDateTime ("2003-09-26T13:30:44.123Z", dateTimeSerializationMode).Ticks);
  246. }
  247. //dateTime with timezone
  248. if (dateTimeSerializationMode == XmlDateTimeSerializationMode.Utc) {
  249. Assert.AreEqual (new DateTimeOffset (2003, 09, 26, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToUniversalTime ().Ticks,
  250. XmlConvert.ToDateTime ("2003-09-26T13:30:44+13:00", dateTimeSerializationMode).Ticks);
  251. Assert.AreEqual (new DateTimeOffset (2003, 09, 26, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToUniversalTime ().Ticks,
  252. XmlConvert.ToDateTime ("2003-09-26T13:30:44.0+13:00", dateTimeSerializationMode).Ticks);
  253. Assert.AreEqual (new DateTimeOffset (2003, 09, 26, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToUniversalTime ().Ticks,
  254. XmlConvert.ToDateTime ("2003-09-26T13:30:44.00+13:00", dateTimeSerializationMode).Ticks);
  255. Assert.AreEqual (new DateTimeOffset (2003, 09, 26, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToUniversalTime ().Ticks,
  256. XmlConvert.ToDateTime ("2003-09-26T13:30:44.000+13:00", dateTimeSerializationMode).Ticks);
  257. Assert.AreEqual (new DateTimeOffset (2003, 09, 26, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToUniversalTime ().Ticks,
  258. XmlConvert.ToDateTime ("2003-09-26T13:30:44.0000+13:00", dateTimeSerializationMode).Ticks);
  259. Assert.AreEqual (new DateTimeOffset (2003, 09, 26, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToUniversalTime ().Ticks,
  260. XmlConvert.ToDateTime ("2003-09-26T13:30:44.00000+13:00", dateTimeSerializationMode).Ticks);
  261. Assert.AreEqual (new DateTimeOffset (2003, 09, 26, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToUniversalTime ().Ticks,
  262. XmlConvert.ToDateTime ("2003-09-26T13:30:44.000000+13:00", dateTimeSerializationMode).Ticks);
  263. Assert.AreEqual (new DateTimeOffset (2003, 09, 26, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToUniversalTime ().Ticks,
  264. XmlConvert.ToDateTime ("2003-09-26T13:30:44.0000000+13:00", dateTimeSerializationMode).Ticks);
  265. Assert.AreEqual (new DateTimeOffset (2003, 09, 26, 13, 30, 44, 123, new TimeSpan (13, 0, 0)).ToUniversalTime ().Ticks,
  266. XmlConvert.ToDateTime ("2003-09-26T13:30:44.123+13:00", dateTimeSerializationMode).Ticks);
  267. } else {
  268. Assert.AreEqual (new DateTimeOffset (2003, 09, 26, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToLocalTime ().Ticks,
  269. XmlConvert.ToDateTime ("2003-09-26T13:30:44+13:00", dateTimeSerializationMode).Ticks);
  270. Assert.AreEqual (new DateTimeOffset (2003, 09, 26, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToLocalTime ().Ticks,
  271. XmlConvert.ToDateTime ("2003-09-26T13:30:44.0+13:00", dateTimeSerializationMode).Ticks);
  272. Assert.AreEqual (new DateTimeOffset (2003, 09, 26, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToLocalTime ().Ticks,
  273. XmlConvert.ToDateTime ("2003-09-26T13:30:44.00+13:00", dateTimeSerializationMode).Ticks);
  274. Assert.AreEqual (new DateTimeOffset (2003, 09, 26, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToLocalTime ().Ticks,
  275. XmlConvert.ToDateTime ("2003-09-26T13:30:44.000+13:00", dateTimeSerializationMode).Ticks);
  276. Assert.AreEqual (new DateTimeOffset (2003, 09, 26, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToLocalTime ().Ticks,
  277. XmlConvert.ToDateTime ("2003-09-26T13:30:44.0000+13:00", dateTimeSerializationMode).Ticks);
  278. Assert.AreEqual (new DateTimeOffset (2003, 09, 26, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToLocalTime ().Ticks,
  279. XmlConvert.ToDateTime ("2003-09-26T13:30:44.00000+13:00", dateTimeSerializationMode).Ticks);
  280. Assert.AreEqual (new DateTimeOffset (2003, 09, 26, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToLocalTime ().Ticks,
  281. XmlConvert.ToDateTime ("2003-09-26T13:30:44.000000+13:00", dateTimeSerializationMode).Ticks);
  282. Assert.AreEqual (new DateTimeOffset (2003, 09, 26, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToLocalTime ().Ticks,
  283. XmlConvert.ToDateTime ("2003-09-26T13:30:44.0000000+13:00", dateTimeSerializationMode).Ticks);
  284. Assert.AreEqual (new DateTimeOffset (2003, 09, 26, 13, 30, 44, 123, new TimeSpan (13, 0, 0)).ToLocalTime ().Ticks,
  285. XmlConvert.ToDateTime ("2003-09-26T13:30:44.123+13:00", dateTimeSerializationMode).Ticks);
  286. }
  287. //time local
  288. Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000).Ticks,
  289. XmlConvert.ToDateTime ("13:30:44", dateTimeSerializationMode).Ticks);
  290. Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000).Ticks,
  291. XmlConvert.ToDateTime ("13:30:44.0", dateTimeSerializationMode).Ticks);
  292. Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000).Ticks,
  293. XmlConvert.ToDateTime ("13:30:44.00", dateTimeSerializationMode).Ticks);
  294. Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000).Ticks,
  295. XmlConvert.ToDateTime ("13:30:44.000", dateTimeSerializationMode).Ticks);
  296. Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000).Ticks,
  297. XmlConvert.ToDateTime ("13:30:44.0000", dateTimeSerializationMode).Ticks);
  298. Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000).Ticks,
  299. XmlConvert.ToDateTime ("13:30:44.00000", dateTimeSerializationMode).Ticks);
  300. Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000).Ticks,
  301. XmlConvert.ToDateTime ("13:30:44.000000", dateTimeSerializationMode).Ticks);
  302. Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000).Ticks,
  303. XmlConvert.ToDateTime ("13:30:44.0000000", dateTimeSerializationMode).Ticks);
  304. Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 123).Ticks,
  305. XmlConvert.ToDateTime ("13:30:44.123", dateTimeSerializationMode).Ticks);
  306. //time with zero timezone
  307. if (dateTimeSerializationMode == XmlDateTimeSerializationMode.Local) {
  308. Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, DateTimeKind.Utc).ToLocalTime ().Ticks,
  309. XmlConvert.ToDateTime ("13:30:44Z", dateTimeSerializationMode).Ticks);
  310. Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, DateTimeKind.Utc).ToLocalTime ().Ticks,
  311. XmlConvert.ToDateTime ("13:30:44.0Z", dateTimeSerializationMode).Ticks);
  312. Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, DateTimeKind.Utc).ToLocalTime ().Ticks,
  313. XmlConvert.ToDateTime ("13:30:44.00Z", dateTimeSerializationMode).Ticks);
  314. Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, DateTimeKind.Utc).ToLocalTime ().Ticks,
  315. XmlConvert.ToDateTime ("13:30:44.000Z", dateTimeSerializationMode).Ticks);
  316. Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, DateTimeKind.Utc).ToLocalTime ().Ticks,
  317. XmlConvert.ToDateTime ("13:30:44.0000Z", dateTimeSerializationMode).Ticks);
  318. Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, DateTimeKind.Utc).ToLocalTime ().Ticks,
  319. XmlConvert.ToDateTime ("13:30:44.00000Z", dateTimeSerializationMode).Ticks);
  320. Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, DateTimeKind.Utc).ToLocalTime ().Ticks,
  321. XmlConvert.ToDateTime ("13:30:44.000000Z", dateTimeSerializationMode).Ticks);
  322. Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, DateTimeKind.Utc).ToLocalTime ().Ticks,
  323. XmlConvert.ToDateTime ("13:30:44.0000000Z", dateTimeSerializationMode).Ticks);
  324. Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 123, DateTimeKind.Utc).ToLocalTime ().Ticks,
  325. XmlConvert.ToDateTime ("13:30:44.123Z", dateTimeSerializationMode).Ticks);
  326. } else {
  327. Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, DateTimeKind.Local).Ticks,
  328. XmlConvert.ToDateTime ("13:30:44Z", dateTimeSerializationMode).Ticks);
  329. Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, DateTimeKind.Local).Ticks,
  330. XmlConvert.ToDateTime ("13:30:44.0Z", dateTimeSerializationMode).Ticks);
  331. Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, DateTimeKind.Local).Ticks,
  332. XmlConvert.ToDateTime ("13:30:44.00Z", dateTimeSerializationMode).Ticks);
  333. Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, DateTimeKind.Local).Ticks,
  334. XmlConvert.ToDateTime ("13:30:44.000Z", dateTimeSerializationMode).Ticks);
  335. Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, DateTimeKind.Local).Ticks,
  336. XmlConvert.ToDateTime ("13:30:44.0000Z", dateTimeSerializationMode).Ticks);
  337. Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, DateTimeKind.Local).Ticks,
  338. XmlConvert.ToDateTime ("13:30:44.00000Z", dateTimeSerializationMode).Ticks);
  339. Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, DateTimeKind.Local).Ticks,
  340. XmlConvert.ToDateTime ("13:30:44.000000Z", dateTimeSerializationMode).Ticks);
  341. Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, DateTimeKind.Local).Ticks,
  342. XmlConvert.ToDateTime ("13:30:44.0000000Z", dateTimeSerializationMode).Ticks);
  343. Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 123, DateTimeKind.Local).Ticks,
  344. XmlConvert.ToDateTime ("13:30:44.123Z", dateTimeSerializationMode).Ticks);
  345. }
  346. //time with timezone
  347. if (dateTimeSerializationMode == XmlDateTimeSerializationMode.Utc) {
  348. Assert.AreEqual (new DateTimeOffset (DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToUniversalTime ().Ticks,
  349. XmlConvert.ToDateTime ("13:30:44+13:00", dateTimeSerializationMode).Ticks);
  350. Assert.AreEqual (new DateTimeOffset (DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToUniversalTime ().Ticks,
  351. XmlConvert.ToDateTime ("13:30:44.0+13:00", dateTimeSerializationMode).Ticks);
  352. Assert.AreEqual (new DateTimeOffset (DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToUniversalTime ().Ticks,
  353. XmlConvert.ToDateTime ("13:30:44.00+13:00", dateTimeSerializationMode).Ticks);
  354. Assert.AreEqual (new DateTimeOffset (DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToUniversalTime ().Ticks,
  355. XmlConvert.ToDateTime ("13:30:44.000+13:00", dateTimeSerializationMode).Ticks);
  356. Assert.AreEqual (new DateTimeOffset (DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToUniversalTime ().Ticks,
  357. XmlConvert.ToDateTime ("13:30:44.0000+13:00", dateTimeSerializationMode).Ticks);
  358. Assert.AreEqual (new DateTimeOffset (DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToUniversalTime ().Ticks,
  359. XmlConvert.ToDateTime ("13:30:44.00000+13:00", dateTimeSerializationMode).Ticks);
  360. Assert.AreEqual (new DateTimeOffset (DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToUniversalTime ().Ticks,
  361. XmlConvert.ToDateTime ("13:30:44.000000+13:00", dateTimeSerializationMode).Ticks);
  362. Assert.AreEqual (new DateTimeOffset (DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToUniversalTime ().Ticks,
  363. XmlConvert.ToDateTime ("13:30:44.0000000+13:00", dateTimeSerializationMode).Ticks);
  364. Assert.AreEqual (new DateTimeOffset (DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 123, new TimeSpan (13, 0, 0)).ToUniversalTime ().Ticks,
  365. XmlConvert.ToDateTime ("13:30:44.123+13:00", dateTimeSerializationMode).Ticks);
  366. } else {
  367. Assert.AreEqual (new DateTimeOffset (DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToLocalTime ().Ticks,
  368. XmlConvert.ToDateTime ("13:30:44+13:00", dateTimeSerializationMode).Ticks);
  369. Assert.AreEqual (new DateTimeOffset (DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToLocalTime ().Ticks,
  370. XmlConvert.ToDateTime ("13:30:44.0+13:00", dateTimeSerializationMode).Ticks);
  371. Assert.AreEqual (new DateTimeOffset (DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToLocalTime ().Ticks,
  372. XmlConvert.ToDateTime ("13:30:44.00+13:00", dateTimeSerializationMode).Ticks);
  373. Assert.AreEqual (new DateTimeOffset (DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToLocalTime ().Ticks,
  374. XmlConvert.ToDateTime ("13:30:44.000+13:00", dateTimeSerializationMode).Ticks);
  375. Assert.AreEqual (new DateTimeOffset (DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToLocalTime ().Ticks,
  376. XmlConvert.ToDateTime ("13:30:44.0000+13:00", dateTimeSerializationMode).Ticks);
  377. Assert.AreEqual (new DateTimeOffset (DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToLocalTime ().Ticks,
  378. XmlConvert.ToDateTime ("13:30:44.00000+13:00", dateTimeSerializationMode).Ticks);
  379. Assert.AreEqual (new DateTimeOffset (DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToLocalTime ().Ticks,
  380. XmlConvert.ToDateTime ("13:30:44.000000+13:00", dateTimeSerializationMode).Ticks);
  381. Assert.AreEqual (new DateTimeOffset (DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToLocalTime ().Ticks,
  382. XmlConvert.ToDateTime ("13:30:44.0000000+13:00", dateTimeSerializationMode).Ticks);
  383. Assert.AreEqual (new DateTimeOffset (DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 123, new TimeSpan (13, 0, 0)).ToLocalTime ().Ticks,
  384. XmlConvert.ToDateTime ("13:30:44.123+13:00", dateTimeSerializationMode).Ticks);
  385. }
  386. //date
  387. Assert.AreEqual (new DateTime(2003, 09, 26, 00, 00, 00, 000).Ticks, XmlConvert.ToDateTime ("2003-09-26", dateTimeSerializationMode).Ticks);
  388. if (dateTimeSerializationMode == XmlDateTimeSerializationMode.Local)
  389. Assert.AreEqual (new DateTime(2003, 09, 26, 00, 00, 00, 000, DateTimeKind.Utc).ToLocalTime ().Ticks,
  390. XmlConvert.ToDateTime ("2003-09-26Z", dateTimeSerializationMode).Ticks);
  391. else
  392. Assert.AreEqual (new DateTime(2003, 09, 26, 00, 00, 00, 000, DateTimeKind.Local).Ticks,
  393. XmlConvert.ToDateTime ("2003-09-26Z", dateTimeSerializationMode).Ticks);
  394. if (dateTimeSerializationMode == XmlDateTimeSerializationMode.Utc)
  395. Assert.AreEqual (new DateTimeOffset (2003, 09, 26, 00, 00, 00, 000, new TimeSpan (13, 0, 0)).ToUniversalTime ().Ticks,
  396. XmlConvert.ToDateTime ("2003-09-26+13:00", dateTimeSerializationMode).Ticks);
  397. else
  398. Assert.AreEqual (new DateTimeOffset (2003, 09, 26, 00, 00, 00, 000, new TimeSpan (13, 0, 0)).ToLocalTime ().Ticks,
  399. XmlConvert.ToDateTime ("2003-09-26+13:00", dateTimeSerializationMode).Ticks);
  400. //gYearMonth
  401. Assert.AreEqual (new DateTime(2003, 09, 01, 00, 00, 00, 000).Ticks, XmlConvert.ToDateTime ("2003-09", dateTimeSerializationMode).Ticks);
  402. if (dateTimeSerializationMode == XmlDateTimeSerializationMode.Local)
  403. Assert.AreEqual (new DateTime(2003, 09, 01, 00, 00, 00, 000, DateTimeKind.Utc).ToLocalTime ().Ticks,
  404. XmlConvert.ToDateTime ("2003-09Z", dateTimeSerializationMode).Ticks);
  405. else
  406. Assert.AreEqual (new DateTime(2003, 09, 01, 00, 00, 00, 000, DateTimeKind.Local).Ticks,
  407. XmlConvert.ToDateTime ("2003-09Z", dateTimeSerializationMode).Ticks);
  408. if (dateTimeSerializationMode == XmlDateTimeSerializationMode.Utc)
  409. Assert.AreEqual (new DateTimeOffset (2003, 09, 01, 00, 00, 00, 000, new TimeSpan (13, 0, 0)).ToUniversalTime ().Ticks,
  410. XmlConvert.ToDateTime ("2003-09+13:00", dateTimeSerializationMode).Ticks);
  411. else
  412. Assert.AreEqual (new DateTimeOffset (2003, 09, 01, 00, 00, 00, 000, new TimeSpan (13, 0, 0)).ToLocalTime ().Ticks,
  413. XmlConvert.ToDateTime ("2003-09+13:00", dateTimeSerializationMode).Ticks);
  414. //gYear
  415. Assert.AreEqual (new DateTime(2003, 01, 01, 00, 00, 00, 000).Ticks, XmlConvert.ToDateTime ("2003", dateTimeSerializationMode).Ticks);
  416. if (dateTimeSerializationMode == XmlDateTimeSerializationMode.Local)
  417. Assert.AreEqual (new DateTime(2003, 01, 01, 00, 00, 00, 000, DateTimeKind.Utc).ToLocalTime ().Ticks,
  418. XmlConvert.ToDateTime ("2003Z", dateTimeSerializationMode).Ticks);
  419. else
  420. Assert.AreEqual (new DateTime(2003, 01, 01, 00, 00, 00, 000, DateTimeKind.Local).Ticks,
  421. XmlConvert.ToDateTime ("2003Z", dateTimeSerializationMode).Ticks);
  422. if (dateTimeSerializationMode == XmlDateTimeSerializationMode.Utc)
  423. Assert.AreEqual (new DateTimeOffset (2003, 01, 01, 00, 00, 00, 000, new TimeSpan (13, 0, 0)).ToUniversalTime ().Ticks,
  424. XmlConvert.ToDateTime ("2003+13:00", dateTimeSerializationMode).Ticks);
  425. else
  426. Assert.AreEqual (new DateTimeOffset (2003, 01, 01, 00, 00, 00, 000, new TimeSpan (13, 0, 0)).ToLocalTime ().Ticks,
  427. XmlConvert.ToDateTime ("2003+13:00", dateTimeSerializationMode).Ticks);
  428. //gDay
  429. Assert.AreEqual (new DateTime(DateTime.Now.Year, 01, 26, 00, 00, 00, 000).Ticks, XmlConvert.ToDateTime ("---26", dateTimeSerializationMode).Ticks);
  430. if (dateTimeSerializationMode == XmlDateTimeSerializationMode.Local)
  431. Assert.AreEqual (new DateTime(DateTime.Now.Year, 01, 26, 00, 00, 00, 000, DateTimeKind.Utc).ToLocalTime ().Ticks,
  432. XmlConvert.ToDateTime ("---26Z", dateTimeSerializationMode).Ticks);
  433. else
  434. Assert.AreEqual (new DateTime(DateTime.Now.Year, 01, 26, 00, 00, 00, 000, DateTimeKind.Local).Ticks,
  435. XmlConvert.ToDateTime ("---26Z", dateTimeSerializationMode).Ticks);
  436. if (dateTimeSerializationMode == XmlDateTimeSerializationMode.Utc)
  437. Assert.AreEqual (new DateTimeOffset (DateTime.Now.Year, 01, 26, 00, 00, 00, 000, new TimeSpan (13, 0, 0)).ToUniversalTime ().Ticks,
  438. XmlConvert.ToDateTime ("---26+13:00", dateTimeSerializationMode).Ticks);
  439. else
  440. Assert.AreEqual (new DateTimeOffset (DateTime.Now.Year, 01, 26, 00, 00, 00, 000, new TimeSpan (13, 0, 0)).ToLocalTime ().Ticks,
  441. XmlConvert.ToDateTime ("---26+13:00", dateTimeSerializationMode).Ticks);
  442. }
  443. //check resulting date kind
  444. Assert.AreEqual (DateTimeKind.Local, XmlConvert.ToDateTime ("2003-09-26T13:30:44", XmlDateTimeSerializationMode.Local).Kind);
  445. Assert.AreEqual (DateTimeKind.Local, XmlConvert.ToDateTime ("2003-09-26T13:30:44Z", XmlDateTimeSerializationMode.Local).Kind);
  446. Assert.AreEqual (DateTimeKind.Local, XmlConvert.ToDateTime ("2003-09-26T13:30:44+13:00", XmlDateTimeSerializationMode.Local).Kind);
  447. Assert.AreEqual (DateTimeKind.Utc, XmlConvert.ToDateTime ("2003-09-26T13:30:44", XmlDateTimeSerializationMode.Utc).Kind);
  448. Assert.AreEqual (DateTimeKind.Utc, XmlConvert.ToDateTime ("2003-09-26T13:30:44Z", XmlDateTimeSerializationMode.Utc).Kind);
  449. Assert.AreEqual (DateTimeKind.Utc, XmlConvert.ToDateTime ("2003-09-26T13:30:44+13:00", XmlDateTimeSerializationMode.Utc).Kind);
  450. Assert.AreEqual (DateTimeKind.Unspecified, XmlConvert.ToDateTime ("2003-09-26T13:30:44", XmlDateTimeSerializationMode.Unspecified).Kind);
  451. Assert.AreEqual (DateTimeKind.Unspecified, XmlConvert.ToDateTime ("2003-09-26T13:30:44Z", XmlDateTimeSerializationMode.Unspecified).Kind);
  452. Assert.AreEqual (DateTimeKind.Unspecified, XmlConvert.ToDateTime ("2003-09-26T13:30:44+13:00", XmlDateTimeSerializationMode.Unspecified).Kind);
  453. Assert.AreEqual (DateTimeKind.Unspecified, XmlConvert.ToDateTime ("2003-09-26T13:30:44", XmlDateTimeSerializationMode.RoundtripKind).Kind);
  454. Assert.AreEqual (DateTimeKind.Utc, XmlConvert.ToDateTime ("2003-09-26T13:30:44Z", XmlDateTimeSerializationMode.RoundtripKind).Kind);
  455. Assert.AreEqual (DateTimeKind.Local, XmlConvert.ToDateTime ("2003-09-26T13:30:44+13:00", XmlDateTimeSerializationMode.RoundtripKind).Kind);
  456. }
  457. [Test]
  458. public void ToDecimal ()
  459. {
  460. Assert.AreEqual (1.987, XmlConvert.ToDecimal ("1.987"));
  461. }
  462. [Test]
  463. public void ToDouble ()
  464. {
  465. Assert.AreEqual (1.0d/0.0d, XmlConvert.ToDouble ("INF"));
  466. Assert.AreEqual (-1.0d/0.0d, XmlConvert.ToDouble ("-INF"));
  467. Assert.AreEqual (0.0d/0.0d, XmlConvert.ToDouble ("NaN"));
  468. Assert.AreEqual (789324, XmlConvert.ToDouble ("789324"));
  469. Assert.AreEqual (42, XmlConvert.ToDouble (" 42 "));
  470. Assert.AreEqual (double.NaN, XmlConvert.ToDouble (" NaN "));
  471. Assert.AreEqual (double.PositiveInfinity, XmlConvert.ToDouble (" Infinity "));
  472. Assert.AreEqual (double.NegativeInfinity, XmlConvert.ToDouble (" -Infinity "));
  473. Assert.AreEqual (double.PositiveInfinity, XmlConvert.ToDouble (" INF"));
  474. Assert.AreEqual (double.NegativeInfinity, XmlConvert.ToDouble (" -INF "));
  475. }
  476. [Test]
  477. public void ToDoubleRoundtrip ()
  478. {
  479. // bug #320424
  480. string s = XmlConvert.ToString (double.MaxValue);
  481. Assert.AreEqual (double.MaxValue, XmlConvert.ToDouble (s));
  482. }
  483. [Test]
  484. public void ToGuid ()
  485. {
  486. Assert.AreEqual (new Guid ("ca761232-ed42-11ce-bacd-00aa0057b223"), XmlConvert.ToGuid ("ca761232-ed42-11ce-bacd-00aa0057b223"));
  487. }
  488. [Test]
  489. public void ToInt16 ()
  490. {
  491. Assert.AreEqual (0, XmlConvert.ToInt16 ("0"), "0");
  492. Assert.AreEqual (-1, XmlConvert.ToInt16 ("-1"), "-1");
  493. Assert.AreEqual (1, XmlConvert.ToInt16 ("1"), "1");
  494. Assert.AreEqual (32767, XmlConvert.ToInt16 ("32767"), "32767");
  495. Assert.AreEqual (-32768, XmlConvert.ToInt16 ("-32768"), "-32768");
  496. try {
  497. XmlConvert.ToInt16 ("32768");
  498. Assert.Fail ("32768");
  499. } catch (OverflowException) {
  500. }
  501. try {
  502. XmlConvert.ToInt16 ("-32769");
  503. Assert.Fail ("-32769");
  504. } catch (OverflowException) {
  505. }
  506. try {
  507. XmlConvert.ToInt16 ("0x100");
  508. Assert.Fail ("0x100");
  509. } catch (FormatException) {
  510. }
  511. }
  512. [Test]
  513. public void ToInt32 ()
  514. {
  515. Assert.AreEqual (0, XmlConvert.ToInt32 ("0"), "0");
  516. Assert.AreEqual (-1, XmlConvert.ToInt32 ("-1"), "-1");
  517. Assert.AreEqual (1, XmlConvert.ToInt32 ("1"), "1");
  518. Assert.AreEqual (int.MaxValue, XmlConvert.ToInt32 ("2147483647"), "2147483647");
  519. Assert.AreEqual (int.MinValue, XmlConvert.ToInt32 ("-2147483648"), "-2147483648");
  520. try {
  521. int.Parse ("2147483648", CultureInfo.CurrentCulture);
  522. Assert.Fail ("int.Parse(current culture)");
  523. } catch (OverflowException) {
  524. }
  525. try {
  526. int.Parse ("2147483648", CultureInfo.InvariantCulture);
  527. Assert.Fail ("int.Parse(invariant culture)");
  528. } catch (OverflowException) {
  529. }
  530. try {
  531. XmlConvert.ToInt32 ("2147483648");
  532. Assert.Fail ("2147483648");
  533. } catch (OverflowException) {
  534. }
  535. try {
  536. XmlConvert.ToInt32 ("-2147483649");
  537. Assert.Fail ("-2147483649");
  538. } catch (OverflowException) {
  539. }
  540. try {
  541. XmlConvert.ToInt32 ("0x10000");
  542. Assert.Fail ("0x10000");
  543. } catch (FormatException) {
  544. }
  545. }
  546. [Test]
  547. public void ToInt64 ()
  548. {
  549. Assert.AreEqual (0, XmlConvert.ToInt64 ("0"), "0");
  550. Assert.AreEqual (-1, XmlConvert.ToInt64 ("-1"), "-1");
  551. Assert.AreEqual (1, XmlConvert.ToInt64 ("1"), "1");
  552. Assert.AreEqual (long.MaxValue, XmlConvert.ToInt64 ("9223372036854775807"), "9223372036854775807");
  553. Assert.AreEqual (long.MinValue, XmlConvert.ToInt64 ("-9223372036854775808"), "-9223372036854775808");
  554. try {
  555. XmlConvert.ToInt64 ("9223372036854775808");
  556. Assert.Fail ("9223372036854775808");
  557. } catch (OverflowException) {
  558. }
  559. try {
  560. XmlConvert.ToInt64 ("-9223372036854775809");
  561. Assert.Fail ("-9223372036854775809");
  562. } catch (OverflowException) {
  563. }
  564. try {
  565. XmlConvert.ToInt64 ("0x10000");
  566. Assert.Fail ("0x10000");
  567. } catch (FormatException) {
  568. }
  569. }
  570. [Test]
  571. public void ToSByte ()
  572. {
  573. Assert.AreEqual (0, XmlConvert.ToSByte ("0"), "0");
  574. Assert.AreEqual (-1, XmlConvert.ToSByte ("-1"), "-1");
  575. Assert.AreEqual (1, XmlConvert.ToSByte ("1"), "1");
  576. Assert.AreEqual (127, XmlConvert.ToSByte ("127"), "127");
  577. Assert.AreEqual (-128, XmlConvert.ToSByte ("-128"), "-128");
  578. try {
  579. XmlConvert.ToSByte ("128");
  580. Assert.Fail ("128");
  581. } catch (OverflowException) {
  582. }
  583. try {
  584. XmlConvert.ToSByte ("-129");
  585. Assert.Fail ("-129");
  586. } catch (OverflowException) {
  587. }
  588. try {
  589. XmlConvert.ToSByte ("0x80");
  590. Assert.Fail ("0x80");
  591. } catch (FormatException) {
  592. }
  593. }
  594. [Test]
  595. public void ToSingle ()
  596. {
  597. Assert.AreEqual (1.0d/0.0d, XmlConvert.ToSingle ("INF"));
  598. Assert.AreEqual (-1.0d/0.0d, XmlConvert.ToSingle ("-INF"));
  599. Assert.AreEqual (0.0d/0.0d, XmlConvert.ToSingle ("NaN"));
  600. Assert.AreEqual (789324, XmlConvert.ToSingle ("789324"));
  601. Assert.AreEqual (42, XmlConvert.ToSingle (" 42 "));
  602. Assert.AreEqual (float.NaN, XmlConvert.ToSingle (" NaN "));
  603. Assert.AreEqual (float.PositiveInfinity, XmlConvert.ToSingle (" Infinity "));
  604. Assert.AreEqual (float.NegativeInfinity, XmlConvert.ToSingle (" -Infinity "));
  605. Assert.AreEqual (float.PositiveInfinity, XmlConvert.ToSingle (" INF"));
  606. Assert.AreEqual (float.NegativeInfinity, XmlConvert.ToSingle (" -INF "));
  607. }
  608. [Test]
  609. public void ToStringTest ()//not done
  610. {
  611. // Don't include TimeZone value for test value.
  612. string dateString =
  613. XmlConvert.ToString (new DateTime (2003, 5, 5));
  614. Assert.AreEqual (33, dateString.Length);
  615. Assert.AreEqual (dateString.Substring (0, 27), "2003-05-05T00:00:00.0000000");
  616. // Must not throw an exception...
  617. Assert.IsNotNull ("-P10675199DT2H48M5.4775808S", XmlConvert.ToString (TimeSpan.MinValue));
  618. }
  619. [Test]
  620. public void TimeSpanToStringShouldNotHaveTimeSuffixIfTimeIsZero()
  621. {
  622. string s = XmlConvert.ToString(new TimeSpan (345, 0, 0, 0));
  623. Assert.AreEqual("P345D", s);
  624. }
  625. [Test]
  626. public void FromTimeSpan ()
  627. {
  628. // bug #77252
  629. TimeSpan t1 = TimeSpan.FromTicks (
  630. TimeSpan.TicksPerSecond + 1);
  631. Assert.AreEqual ("PT1.0000001S", XmlConvert.ToString (t1), "#1");
  632. // XAttributeTest.CastTimeSpans():#5d
  633. t1 = new TimeSpan (2710L);
  634. Assert.AreEqual ("PT0.000271S", XmlConvert.ToString (t1), "#2");
  635. t1 = new TimeSpan (27100000L);
  636. Assert.AreEqual ("PT2.71S", XmlConvert.ToString (t1), "#3");
  637. }
  638. [Test]
  639. public void ToTimeSpan ()
  640. {
  641. Assert.AreEqual (new TimeSpan (0, 0, 0, 0, 1), XmlConvert.ToTimeSpan ("PT0.001S"), "#1");
  642. // bug #76328
  643. Assert.AreEqual (new TimeSpan (0, 0, 0, 0, 100), XmlConvert.ToTimeSpan ("PT0.1S"), "#2");
  644. Assert.AreEqual (new TimeSpan (0, 0, 0, 0, 100), XmlConvert.ToTimeSpan ("PT0.100S"), "#3");
  645. Assert.AreEqual (new TimeSpan (0, 0, 0, 0, 10), XmlConvert.ToTimeSpan ("PT0.010S"), "#4");
  646. Assert.AreEqual (new TimeSpan (0, 0, 0, 0, 10), XmlConvert.ToTimeSpan ("PT0.01S"), "#5");
  647. // bug #77252
  648. Assert.AreEqual (TimeSpan.FromTicks (TimeSpan.TicksPerSecond + 1), XmlConvert.ToTimeSpan ("PT1.0000001S"), "#6");
  649. Assert.AreEqual (TimeSpan.MinValue, XmlConvert.ToTimeSpan ("-P10675199DT2H48M5.4775808S"), "#7");
  650. Assert.AreEqual (TimeSpan.MaxValue, XmlConvert.ToTimeSpan ("P10675199DT2H48M5.4775807S"), "#8");
  651. Assert.AreEqual (TimeSpan.FromDays (2), XmlConvert.ToTimeSpan (" \r\n \tP2D "), "#9");
  652. }
  653. [Test]
  654. public void ToUInt16 ()
  655. {
  656. Assert.AreEqual (0, XmlConvert.ToUInt16 ("0"), "0");
  657. Assert.AreEqual (1, XmlConvert.ToUInt16 ("1"), "1");
  658. Assert.AreEqual (ushort.MaxValue, XmlConvert.ToUInt16 ("65535"), "65535");
  659. try {
  660. ushort.Parse ("65536", CultureInfo.CurrentCulture);
  661. Assert.Fail ("ushort.Parse(current culture)");
  662. } catch (OverflowException) {
  663. }
  664. try {
  665. ushort.Parse ("65536", CultureInfo.InvariantCulture);
  666. Assert.Fail ("ushort.Parse(invariant culture)");
  667. } catch (OverflowException) {
  668. }
  669. try {
  670. XmlConvert.ToUInt16 ("65536");
  671. Assert.Fail ("65536");
  672. } catch (OverflowException) {
  673. }
  674. try {
  675. XmlConvert.ToUInt16 ("0x10000");
  676. Assert.Fail ("0x10000");
  677. } catch (FormatException) {
  678. }
  679. // LAMESPEC: it is not fixable as there is no public
  680. // member of UInt16 that treats this as FormatException
  681. // while others above as either OverflowException or
  682. // FormatException respectively.
  683. // (.NET uses internal member in UInt16 here);
  684. //try {
  685. // XmlConvert.ToUInt16 ("-101");
  686. // Assert.Fail ("-101");
  687. //} catch (FormatException) {
  688. //}
  689. }
  690. [Test]
  691. public void ToUInt32 ()
  692. {
  693. Assert.AreEqual (0, XmlConvert.ToUInt32 ("0"), "0");
  694. Assert.AreEqual (1, XmlConvert.ToUInt32 ("1"), "1");
  695. Assert.AreEqual (uint.MaxValue, XmlConvert.ToUInt32 ("4294967295"), "4294967295");
  696. try {
  697. uint.Parse ("4294967296", CultureInfo.CurrentCulture);
  698. Assert.Fail ("uint.Parse(current culture)");
  699. } catch (OverflowException) {
  700. }
  701. try {
  702. uint.Parse ("4294967296", CultureInfo.InvariantCulture);
  703. Assert.Fail ("uint.Parse(invariant culture)");
  704. } catch (OverflowException) {
  705. }
  706. try {
  707. XmlConvert.ToUInt32 ("4294967296");
  708. Assert.Fail ("4294967296");
  709. } catch (OverflowException) {
  710. }
  711. try {
  712. XmlConvert.ToUInt32 ("0x10000");
  713. Assert.Fail ("0x10000");
  714. } catch (FormatException) {
  715. }
  716. // LAMESPEC: it is not fixable as there is no public
  717. // member of UInt32 that treats this as FormatException
  718. // while others above as either OverflowException or
  719. // FormatException respectively.
  720. // (.NET uses internal member in UInt32 here);
  721. //try {
  722. // XmlConvert.ToUInt32 ("-101");
  723. // Assert.Fail ("-101");
  724. //} catch (FormatException) {
  725. //}
  726. }
  727. [Test]
  728. public void ToUInt64 ()
  729. {
  730. Assert.AreEqual (0, XmlConvert.ToUInt64 ("0"), "0");
  731. Assert.AreEqual (1, XmlConvert.ToUInt64 ("1"), "1");
  732. Assert.AreEqual (ulong.MaxValue, XmlConvert.ToUInt64 ("18446744073709551615"), "18446744073709551615");
  733. try {
  734. ulong.Parse ("18446744073709551616", CultureInfo.CurrentCulture);
  735. Assert.Fail ("ulong.Parse(current culture)");
  736. } catch (OverflowException) {
  737. }
  738. try {
  739. ulong.Parse ("18446744073709551616", CultureInfo.InvariantCulture);
  740. Assert.Fail ("ulong.Parse(invariant culture)");
  741. } catch (OverflowException) {
  742. }
  743. try {
  744. XmlConvert.ToUInt64 ("18446744073709551616");
  745. Assert.Fail ("18446744073709551616");
  746. } catch (OverflowException) {
  747. }
  748. try {
  749. XmlConvert.ToUInt64 ("0x10000");
  750. Assert.Fail ("0x10000");
  751. } catch (FormatException) {
  752. }
  753. // LAMESPEC: it is not fixable as there is no public
  754. // member of UInt64 that treats this as FormatException
  755. // while others above as either OverflowException or
  756. // FormatException respectively.
  757. // (.NET uses internal member in UInt64 here);
  758. //try {
  759. // XmlConvert.ToUInt64 ("-101");
  760. // Assert.Fail ("-101");
  761. //} catch (FormatException) {
  762. //}
  763. }
  764. [Test]
  765. public void VerifyName ()
  766. {
  767. VerifyNameValid ("a");
  768. VerifyNameValid ("a1");
  769. VerifyNameValid ("\u3041");
  770. VerifyNameValid ("a:b");
  771. VerifyNameValid ("_");
  772. VerifyNameValid ("__");
  773. VerifyNameValid ("_1");
  774. VerifyNameValid (":");
  775. VerifyNameValid (":a");
  776. VerifyNameValid ("a.b");
  777. }
  778. [Test]
  779. public void VerifyNameInvalid ()
  780. {
  781. VerifyNameInvalid ("!");
  782. VerifyNameInvalid ("_a!b");
  783. VerifyNameInvalid ("?a");
  784. VerifyNameInvalid (" ");
  785. }
  786. [Test]
  787. [ExpectedException (typeof (ArgumentNullException))]
  788. public void VerifyNameNull ()
  789. {
  790. XmlConvert.VerifyName (null);
  791. }
  792. [Test]
  793. [ExpectedException (typeof (ArgumentNullException))]
  794. public void VerifyNameEmpty ()
  795. {
  796. XmlConvert.VerifyName ("");
  797. }
  798. private void VerifyNameValid (string value)
  799. {
  800. try {
  801. XmlConvert.VerifyName (value);
  802. } catch (XmlException) {
  803. Assert.Fail (String.Format ("'{0}'", value));
  804. }
  805. }
  806. private void VerifyNameInvalid (string value)
  807. {
  808. try {
  809. XmlConvert.VerifyName (value);
  810. Assert.Fail (value);
  811. } catch (XmlException) {
  812. }
  813. }
  814. [Test]
  815. public void VerifyNCName ()
  816. {
  817. Assert.AreEqual ("foo", XmlConvert.VerifyNCName ("foo"));
  818. try {
  819. XmlConvert.VerifyNCName ("?foo");
  820. Assert.Fail ();
  821. } catch (XmlException) {}
  822. try {
  823. XmlConvert.VerifyNCName (":foo");
  824. Assert.Fail ();
  825. } catch (XmlException) {}
  826. try {
  827. XmlConvert.VerifyNCName ("foo:bar");
  828. Assert.Fail ();
  829. } catch (XmlException) {}
  830. try {
  831. XmlConvert.VerifyNCName ("foo:bar:baz");
  832. Assert.Fail ();
  833. } catch (XmlException) {}
  834. }
  835. [Test]
  836. [ExpectedException (typeof (ArgumentNullException))]
  837. public void VerifyNCNameNull ()
  838. {
  839. XmlConvert.VerifyNCName (null);
  840. }
  841. [Test]
  842. [ExpectedException (typeof (ArgumentNullException))]
  843. public void VerifyNCNameEmpty ()
  844. {
  845. XmlConvert.VerifyNCName ("");
  846. }
  847. [Test]
  848. public void DurationZero () // bug #77350
  849. {
  850. Assert.AreEqual ("PT0S", XmlConvert.ToString (TimeSpan.FromSeconds (0)));
  851. }
  852. [Test]
  853. public void VerifyTOKEN ()
  854. {
  855. VerifyToken ("", true);
  856. VerifyToken (" ", false);
  857. VerifyToken ("A", true);
  858. VerifyToken ("!", true);
  859. VerifyToken (" !", false);
  860. VerifyToken ("! ", false);
  861. VerifyToken ("! !", true);
  862. VerifyToken ("!\t!", false);
  863. VerifyToken ("!\n!", false);
  864. VerifyToken ("!\r!", false);
  865. VerifyToken ("###", true);
  866. }
  867. private void VerifyToken (string s, bool success)
  868. {
  869. try {
  870. XmlConvert.VerifyTOKEN (s);
  871. if (success)
  872. return;
  873. Assert.Fail (s + "should fail");
  874. } catch (XmlException) {
  875. if (success)
  876. Assert.Fail (s + "should not fail");
  877. }
  878. }
  879. [Test]
  880. public void XmlDateTimeSerializationModeAndMaxValue ()
  881. {
  882. Assert.AreEqual ("9999-12-31T23:59:59.9999999", XmlConvert.ToString (DateTime.MaxValue, XmlDateTimeSerializationMode.Unspecified).Substring (0, 27), "#1");
  883. Assert.AreEqual ("9999-12-31T23:59:59.9999999Z", XmlConvert.ToString (DateTime.MaxValue, XmlDateTimeSerializationMode.Utc), "#2");
  884. Assert.AreEqual ("9999-12-31T23:59:59.9999999", XmlConvert.ToString (DateTime.MaxValue, XmlDateTimeSerializationMode.RoundtripKind), "#3");
  885. Assert.AreEqual ("9999-12-31T23:59:59.9999999", XmlConvert.ToString (DateTime.MaxValue, XmlDateTimeSerializationMode.Local).Substring (0, 27), "#4");
  886. // direct formatting string - no difference
  887. Assert.AreEqual ("9999-12-31T23:59:59.9999999Z", XmlConvert.ToString (DateTime.MaxValue, "yyyy-MM-ddTHH:mm:ss.FFFFFFFZ"), "#5");
  888. Assert.AreEqual ("9999-12-31T23:59:59.9999999", XmlConvert.ToString (DateTime.MaxValue, "yyyy-MM-ddTHH:mm:ss.FFFFFFFzzz").Substring (0, 27), "#6");
  889. }
  890. [Test]
  891. public void XmlDateTimeSerializationModeRountripKind ()
  892. {
  893. string format = "yyyy-MM-ddTHH:mm:ss.FFFFFFFK";
  894. string s = XmlConvert.ToString (DateTime.UtcNow, format);
  895. Assert.AreEqual ('Z', s [s.Length -1], "#1-1");
  896. // LAMESPEC: .NET has a bug here that 'K' in format string does not reflect 'Z' as Utc Kind.
  897. // https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=307694
  898. //Assert.AreEqual (DateTimeKind.Utc, XmlConvert.ToDateTime (s, format).Kind, "#1-2");
  899. s = XmlConvert.ToString (DateTime.UtcNow, XmlDateTimeSerializationMode.RoundtripKind);
  900. Assert.AreEqual ('Z', s [s.Length -1], "#2-1");
  901. Assert.AreEqual (DateTimeKind.Utc, XmlConvert.ToDateTime (s, XmlDateTimeSerializationMode.RoundtripKind).Kind, "#2-2");
  902. }
  903. [Test]
  904. public void XmlDateTimeSerializationModeUnspecified ()
  905. {
  906. Assert.AreEqual (27, XmlConvert.ToString (new DateTime (DateTime.MaxValue.Ticks, DateTimeKind.Utc), XmlDateTimeSerializationMode.Unspecified).Length, "#1");
  907. DateTime dt1 = XmlConvert.ToDateTime ("0001-02-03T10:20:30.0000+02:00", XmlDateTimeSerializationMode.Unspecified);
  908. DateTime dt2 = XmlConvert.ToDateTime ("0001-02-03T10:20:30.0000", XmlDateTimeSerializationMode.Unspecified);
  909. Assert.AreEqual (false, dt1 == dt2, "#2");
  910. XmlConvert.ToDateTime ("2006-05-30T09:48:32.0Z", XmlDateTimeSerializationMode.Unspecified);
  911. string format = "yyyy-MM-ddTHH:mm:ss.FFFFFFFK";
  912. XmlConvert.ToDateTime (XmlConvert.ToString (DateTime.UtcNow, format), XmlDateTimeSerializationMode.Unspecified);
  913. }
  914. [Test]
  915. public void XmlDateTimeSerializationModeLocal ()
  916. {
  917. XmlConvert.ToDateTime ("2010-11-10", XmlDateTimeSerializationMode.Local); // bug #655089
  918. XmlConvert.ToDateTime ("2010-11", XmlDateTimeSerializationMode.Local);
  919. }
  920. [Test]
  921. public void XmlDateTimeSerializationModeUtc ()
  922. {
  923. Assert.AreEqual (27, XmlConvert.ToString (new DateTime (DateTime.MaxValue.Ticks, DateTimeKind.Utc), XmlDateTimeSerializationMode.Unspecified).Length, "#1");
  924. DateTime dt1 = XmlConvert.ToDateTime ("0001-02-03T10:20:30.0000+02:00", XmlDateTimeSerializationMode.Utc);
  925. DateTime dt2 = XmlConvert.ToDateTime ("0001-02-03T10:20:30.0000", XmlDateTimeSerializationMode.Utc);
  926. Assert.AreEqual (false, dt1 == dt2, "#2");
  927. XmlConvert.ToDateTime ("2006-05-30T09:48:32.0Z", XmlDateTimeSerializationMode.Utc);
  928. XmlConvert.ToDateTime ("2006-05-30T09:48:32.0+02:00", XmlDateTimeSerializationMode.Utc);
  929. XmlConvert.ToDateTime ("2008-06-11T11:09:47.125Z", XmlDateTimeSerializationMode.Utc);
  930. }
  931. [Test]
  932. public void XmlDateTimeSerializationModeSeveralFormats ()
  933. {
  934. XmlDateTimeSerializationMode m = XmlDateTimeSerializationMode.RoundtripKind;
  935. XmlConvert.ToDateTime ("0001", m);
  936. XmlConvert.ToDateTime ("0001Z", m);
  937. XmlConvert.ToDateTime ("0001+09:00", m);
  938. XmlConvert.ToDateTime ("0001-02", m);
  939. XmlConvert.ToDateTime ("0001-02Z", m);
  940. XmlConvert.ToDateTime ("0001-02+09:00", m);
  941. XmlConvert.ToDateTime ("0001-02-03", m);
  942. XmlConvert.ToDateTime ("0001-02-03Z", m);
  943. XmlConvert.ToDateTime ("0001-02-03+09:00", m);
  944. XmlConvert.ToDateTime ("--02-03", m);
  945. XmlConvert.ToDateTime ("--02-03Z", m);
  946. XmlConvert.ToDateTime ("--02-03+09:00", m);
  947. XmlConvert.ToDateTime ("---03", m);
  948. XmlConvert.ToDateTime ("---03Z", m);
  949. XmlConvert.ToDateTime ("---03+09:00", m);
  950. XmlConvert.ToDateTime ("10:20:30", m);
  951. XmlConvert.ToDateTime ("10:20:30Z", m);
  952. XmlConvert.ToDateTime ("10:20:30+09:00", m);
  953. XmlConvert.ToDateTime ("0001-02-03T10:20:30", m);
  954. XmlConvert.ToDateTime ("0001-02-03T10:20:30Z", m);
  955. XmlConvert.ToDateTime ("0001-02-03T10:20:30+09:00", m);
  956. XmlConvert.ToDateTime ("0001-02-03T10:20:30.00", m);
  957. XmlConvert.ToDateTime ("0001-02-03T10:20:30.00Z", m);
  958. XmlConvert.ToDateTime ("0001-02-03T10:20:30.00+09:00", m);
  959. XmlConvert.ToDateTime ("0001-02-03T10:20:30.0000", m);
  960. XmlConvert.ToDateTime ("0001-02-03T10:20:30.0000Z", m);
  961. XmlConvert.ToDateTime ("0001-02-03T10:20:30.0000+09:00", m);
  962. }
  963. [Test]
  964. [Category("NotWorking")]
  965. public void XmlDateTimeSerializationModeBadFormats ()
  966. {
  967. XmlDateTimeSerializationMode m = XmlDateTimeSerializationMode.RoundtripKind;
  968. try {
  969. XmlConvert.ToDateTime ("0001-02-03T", m);
  970. Assert.Fail ("#1");
  971. } catch (FormatException) {
  972. }
  973. try {
  974. XmlConvert.ToDateTime ("0001-02-03T10:20", m);
  975. Assert.Fail ("#2");
  976. } catch (FormatException) {
  977. }
  978. try {
  979. XmlConvert.ToDateTime ("0001-02-03T10:20:30.", m);
  980. Assert.Fail ("#3");
  981. } catch (FormatException) {
  982. }
  983. }
  984. [Test] // see http://smdn.invisiblefulmoon.net/misc/forum/programming/#n10
  985. public void DateTimeOffsetTimezoneRoundtrip ()
  986. {
  987. Assert.AreEqual (new DateTimeOffset (2009, 11, 05, 20, 16, 22, TimeSpan.FromHours (9)), XmlConvert.ToDateTimeOffset ("2009-11-05T20:16:22+09:00"), "#1");
  988. }
  989. [Test]
  990. public void DateTimeOffsetWithWhitespace ()
  991. {
  992. var s = " 2010-01-02T00:00:00Z \t";
  993. XmlConvert.ToDateTime (s);
  994. }
  995. [Test]
  996. public void ToDateTimeUtc ()
  997. {
  998. // bug #661787
  999. var date = XmlConvert.ToDateTime ("2010-12-29T22:01:15.1619814", XmlDateTimeSerializationMode.Utc);
  1000. Assert.AreEqual (22, date.Hour, "#1");
  1001. }
  1002. [Test]
  1003. public void ToDateTimeZ ()
  1004. {
  1005. // bug 690475
  1006. // looks like *all* XmlDateTimeSerializationMode allows use of Z
  1007. foreach (XmlDateTimeSerializationMode mode in Enum.GetValues (typeof (XmlDateTimeSerializationMode))) {
  1008. XmlConvert.ToDateTime ("2009-12-15T08:44:05Z", mode);
  1009. XmlConvert.ToDateTime ("2009-12-15Z", mode);
  1010. XmlConvert.ToDateTime ("2009-12Z", mode);
  1011. XmlConvert.ToDateTime ("2009Z", mode);
  1012. XmlConvert.ToDateTime ("---09Z", mode);
  1013. XmlConvert.ToDateTime ("10:01:02Z", mode);
  1014. XmlConvert.ToDateTime ("2009-12-15T08:44:05.2700544Z", mode);
  1015. }
  1016. }
  1017. }
  1018. }