2 // System.Xml.XmlConvertTests.cs
4 // Authors: Atsushi Enomoto (ginga@kit.hi-ho.ne.jp), Jon Kessler (jwkpiano1@comcast.net)
6 // (C) 2003 Atsushi Enomoto, Jon Kessler
10 using System.Globalization;
12 using NUnit.Framework;
14 namespace MonoTests.System.Xml
17 public class XmlConvertTests
19 private void AssertName (string result, string source)
21 Assert.AreEqual (result,
22 XmlConvert.EncodeName (source));
25 private void AssertNmToken (string result, string source)
27 Assert.AreEqual (result,
28 XmlConvert.EncodeNmToken (source));
32 public void DecodeName ()
34 Assert.AreEqual (null, XmlConvert.DecodeName (null));
35 Assert.AreEqual ("", XmlConvert.DecodeName (""));
36 Assert.AreEqual ("Test", XmlConvert.DecodeName ("Test"));
37 Assert.AreEqual ("_Test", XmlConvert.DecodeName ("_Test"));
38 Assert.AreEqual ("_hello_friends", XmlConvert.DecodeName ("_hello_friends"));
39 Assert.AreEqual ("_hello friends", XmlConvert.DecodeName ("_hello friends"));
40 Assert.AreEqual (" ", XmlConvert.DecodeName ("_x0020_"));
44 public void EncodeLocalName ()
46 Assert.IsNull (XmlConvert.EncodeLocalName (null));
47 Assert.AreEqual (String.Empty, XmlConvert.EncodeLocalName (String.Empty));
48 Assert.AreEqual ("Hello_x003A__x0020_", XmlConvert.EncodeLocalName ("Hello: "));
49 Assert.AreEqual ("Hello", XmlConvert.EncodeLocalName ("Hello"));
53 public void EncodeName ()
55 Assert.IsNull (XmlConvert.EncodeName (null));
56 Assert.AreEqual (String.Empty, XmlConvert.EncodeName (String.Empty));
57 AssertName ("Test", "Test");
58 AssertName ("Hello_x0020_my_x0020_friends.", "Hello my friends.");
59 AssertName ("_x0031_23", "123");
60 AssertName ("_x005F_x0031_23", "_x0031_23");
64 public void EncodeNmToken ()
66 Assert.IsNull (XmlConvert.EncodeNmToken (null));
67 AssertNmToken ("Test", "Test");
68 AssertNmToken ("Hello_x0020_my_x0020_friends.", "Hello my friends.");
69 AssertNmToken ("123", "123");
70 AssertNmToken ("_x005F_x0031_23", "_x0031_23");
74 [ExpectedException (typeof (XmlException))]
75 public void EncodeNmTokenError ()
77 XmlConvert.EncodeNmToken (String.Empty);
81 public void ToBoolean ()
83 Assert.AreEqual (true, XmlConvert.ToBoolean (" 1 "));
84 Assert.AreEqual (true, XmlConvert.ToBoolean (" true "));
85 Assert.AreEqual (false, XmlConvert.ToBoolean (" 0 "));
86 Assert.AreEqual (false, XmlConvert.ToBoolean (" false "));
89 Assert.AreEqual (false, XmlConvert.ToBoolean (" invalid "));
91 catch (FormatException)
99 Assert.AreEqual (255, XmlConvert.ToByte ("255"));
103 public void ToChar ()
105 Assert.AreEqual ('x', XmlConvert.ToChar ("x"));
109 public void ToDateTime ()
112 Assert.AreEqual (632001798000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00").Ticks);
113 Assert.AreEqual (632001798000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.0").Ticks);
114 Assert.AreEqual (632001798000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.00").Ticks);
115 Assert.AreEqual (632001798000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.000").Ticks);
116 Assert.AreEqual (632001798000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.0000").Ticks);
117 Assert.AreEqual (632001798000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.00000").Ticks);
118 Assert.AreEqual (632001798000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.000000").Ticks);
119 Assert.AreEqual (632001798000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.0000000").Ticks);
121 // These tests also failed on MS.NET
122 Assert.AreEqual (632001150000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00+13:00").Ticks);
123 Assert.AreEqual (632001150000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.0+13:00").Ticks);
124 Assert.AreEqual (632001150000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.00+13:00").Ticks);
125 Assert.AreEqual (632001150000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.000+13:00").Ticks);
126 Assert.AreEqual (632001150000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.0000+13:00").Ticks);
127 Assert.AreEqual (632001150000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.00000+13:00").Ticks);
128 Assert.AreEqual (632001150000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.000000+13:00").Ticks);
129 Assert.AreEqual (632001150000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.0000000+13:00").Ticks);
130 Assert.AreEqual (632001618000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00Z").Ticks);
131 Assert.AreEqual (632001618000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.0Z").Ticks);
132 Assert.AreEqual (632001618000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.00Z").Ticks);
133 Assert.AreEqual (632001618000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.000Z").Ticks);
134 Assert.AreEqual (632001618000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.0000Z").Ticks);
135 Assert.AreEqual (632001618000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.00000Z").Ticks);
136 Assert.AreEqual (632001618000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.000000Z").Ticks);
137 Assert.AreEqual (632001618000000000L, XmlConvert.ToDateTime ("2003-09-26T13:30:00.0000000Z").Ticks);
140 DateTime t1 = new DateTime (DateTime.Today.Year, 1, 1);
141 t1 = DateTime.Today + new TimeSpan (12,0,0);
142 Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00").Ticks);
143 Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.0").Ticks);
144 Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.00").Ticks);
145 Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.000").Ticks);
146 Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.0000").Ticks);
147 Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.00000").Ticks);
148 Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.000000").Ticks);
149 Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.0000000").Ticks);
150 //Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00+13:00").Ticks);//doesn't work on .NET
151 //Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.f+13:00").Ticks);//doesn't work on .NET
152 //Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.ff+13:00").Ticks);//doesn't work on .NET
153 //Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.fff+13:00").Ticks);//doesn't work on .NET
154 //Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.ffff+13:00").Ticks);//doesn't work on .NET
155 //Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.fffff+13:00").Ticks);//doesn't work on .NET
156 //Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.ffffff+13:00").Ticks);//doesn't work on .NET
157 //Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.fffffff+13:00").Ticks);//doesn't work on .NET
158 //Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00Z").Ticks);//doesn't work on .NET
159 //Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.fZ").Ticks);//doesn't work on .NET
160 //Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.ffZ").Ticks);//doesn't work on .NET
161 //Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.fffZ").Ticks);//doesn't work on .NET
162 //Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.ffffZ").Ticks);//doesn't work on .NET
163 //Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.fffffZ").Ticks);//doesn't work on .NET
164 //Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.ffffffZ").Ticks);//doesn't work on .NET
165 //Assert.AreEqual (t1.Ticks, XmlConvert.ToDateTime ("12:00:00.fffffffZ").Ticks);//doesn't work on .NET
167 Assert.AreEqual (632001312000000000L, XmlConvert.ToDateTime ("2003-09-26").Ticks);
168 // Assert.AreEqual (632000664000000000L, XmlConvert.ToDateTime ("2003-09-26+13:00").Ticks);
169 // Assert.AreEqual (632001132000000000L, XmlConvert.ToDateTime ("2003-09-26Z").Ticks);
171 Assert.AreEqual (631979712000000000L, XmlConvert.ToDateTime ("2003-09").Ticks);
172 // Assert.AreEqual (631979064000000000L, XmlConvert.ToDateTime ("2003-09+13:00").Ticks);
173 // Assert.AreEqual (631979532000000000L, XmlConvert.ToDateTime ("2003-09Z").Ticks);
175 Assert.AreEqual (631769760000000000L, XmlConvert.ToDateTime ("2003").Ticks);
176 // Assert.AreEqual (631769076000000000L, XmlConvert.ToDateTime ("2003+13:00").Ticks);
177 // Assert.AreEqual (631769544000000000L, XmlConvert.ToDateTime ("2003Z").Ticks);
179 // Don't try locale-dependent test
180 // Assert.AreEqual (632001312000000000L, XmlConvert.ToDateTime ("--09-26").Ticks);//shouldn't have a hardcoded value
181 // Assert.AreEqual (632000664000000000L, XmlConvert.ToDateTime ("--09-26+13:00").Ticks);//shouldn't have a hardcoded value
182 // Assert.AreEqual (632001132000000000L, XmlConvert.ToDateTime ("--09-26Z").Ticks);//shouldn't have a hardcoded value
184 // Don't try locale-dependent test
185 // Assert.AreEqual (631791360000000000L, XmlConvert.ToDateTime ("---26").Ticks);//shouldn't have a hardcoded value
186 // Assert.AreEqual (631790676000000000L, XmlConvert.ToDateTime ("---26+13:00").Ticks);//shouldn't have a hardcoded value
187 // Assert.AreEqual (631791144000000000L, XmlConvert.ToDateTime ("---26Z").Ticks);//shouldn't have a hardcoded value
190 Assert.AreEqual (45L, XmlConvert.ToDateTime (";ljdfas;kl").Ticks);
198 public void ToDateTimeWithSerializationMode ()
200 //check resulting datetime depending on serialization mode
201 foreach (XmlDateTimeSerializationMode dateTimeSerializationMode in Enum.GetValues (typeof (XmlDateTimeSerializationMode))) {
203 Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 000).Ticks,
204 XmlConvert.ToDateTime ("2003-09-26T13:30:44", dateTimeSerializationMode).Ticks);
205 Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 000).Ticks,
206 XmlConvert.ToDateTime ("2003-09-26T13:30:44.0", dateTimeSerializationMode).Ticks);
207 Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 000).Ticks,
208 XmlConvert.ToDateTime ("2003-09-26T13:30:44.00", dateTimeSerializationMode).Ticks);
209 Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 000).Ticks,
210 XmlConvert.ToDateTime ("2003-09-26T13:30:44.000", dateTimeSerializationMode).Ticks);
211 Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 000).Ticks,
212 XmlConvert.ToDateTime ("2003-09-26T13:30:44.0000", dateTimeSerializationMode).Ticks);
213 Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 000).Ticks,
214 XmlConvert.ToDateTime ("2003-09-26T13:30:44.00000", dateTimeSerializationMode).Ticks);
215 Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 000).Ticks,
216 XmlConvert.ToDateTime ("2003-09-26T13:30:44.000000", dateTimeSerializationMode).Ticks);
217 Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 000).Ticks,
218 XmlConvert.ToDateTime ("2003-09-26T13:30:44.0000000", dateTimeSerializationMode).Ticks);
219 Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 123).Ticks,
220 XmlConvert.ToDateTime ("2003-09-26T13:30:44.123", dateTimeSerializationMode).Ticks);
222 //dateTime with zero timezone
223 if (dateTimeSerializationMode == XmlDateTimeSerializationMode.Local) {
224 Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 000, DateTimeKind.Utc).ToLocalTime ().Ticks,
225 XmlConvert.ToDateTime ("2003-09-26T13:30:44Z", dateTimeSerializationMode).Ticks);
226 Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 000, DateTimeKind.Utc).ToLocalTime ().Ticks,
227 XmlConvert.ToDateTime ("2003-09-26T13:30:44.0Z", dateTimeSerializationMode).Ticks);
228 Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 000, DateTimeKind.Utc).ToLocalTime ().Ticks,
229 XmlConvert.ToDateTime ("2003-09-26T13:30:44.00Z", dateTimeSerializationMode).Ticks);
230 Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 000, DateTimeKind.Utc).ToLocalTime ().Ticks,
231 XmlConvert.ToDateTime ("2003-09-26T13:30:44.000Z", dateTimeSerializationMode).Ticks);
232 Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 000, DateTimeKind.Utc).ToLocalTime ().Ticks,
233 XmlConvert.ToDateTime ("2003-09-26T13:30:44.0000Z", dateTimeSerializationMode).Ticks);
234 Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 000, DateTimeKind.Utc).ToLocalTime ().Ticks,
235 XmlConvert.ToDateTime ("2003-09-26T13:30:44.00000Z", dateTimeSerializationMode).Ticks);
236 Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 000, DateTimeKind.Utc).ToLocalTime ().Ticks,
237 XmlConvert.ToDateTime ("2003-09-26T13:30:44.000000Z", dateTimeSerializationMode).Ticks);
238 Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 000, DateTimeKind.Utc).ToLocalTime ().Ticks,
239 XmlConvert.ToDateTime ("2003-09-26T13:30:44.0000000Z", dateTimeSerializationMode).Ticks);
240 Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 123, DateTimeKind.Utc).ToLocalTime ().Ticks,
241 XmlConvert.ToDateTime ("2003-09-26T13:30:44.123Z", dateTimeSerializationMode).Ticks);
243 Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 000, DateTimeKind.Local).Ticks,
244 XmlConvert.ToDateTime ("2003-09-26T13:30:44Z", dateTimeSerializationMode).Ticks);
245 Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 000, DateTimeKind.Local).Ticks,
246 XmlConvert.ToDateTime ("2003-09-26T13:30:44.0Z", dateTimeSerializationMode).Ticks);
247 Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 000, DateTimeKind.Local).Ticks,
248 XmlConvert.ToDateTime ("2003-09-26T13:30:44.00Z", dateTimeSerializationMode).Ticks);
249 Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 000, DateTimeKind.Local).Ticks,
250 XmlConvert.ToDateTime ("2003-09-26T13:30:44.000Z", dateTimeSerializationMode).Ticks);
251 Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 000, DateTimeKind.Local).Ticks,
252 XmlConvert.ToDateTime ("2003-09-26T13:30:44.0000Z", dateTimeSerializationMode).Ticks);
253 Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 000, DateTimeKind.Local).Ticks,
254 XmlConvert.ToDateTime ("2003-09-26T13:30:44.00000Z", dateTimeSerializationMode).Ticks);
255 Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 000, DateTimeKind.Local).Ticks,
256 XmlConvert.ToDateTime ("2003-09-26T13:30:44.000000Z", dateTimeSerializationMode).Ticks);
257 Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 000, DateTimeKind.Local).Ticks,
258 XmlConvert.ToDateTime ("2003-09-26T13:30:44.0000000Z", dateTimeSerializationMode).Ticks);
259 Assert.AreEqual (new DateTime(2003, 09, 26, 13, 30, 44, 123, DateTimeKind.Local).Ticks,
260 XmlConvert.ToDateTime ("2003-09-26T13:30:44.123Z", dateTimeSerializationMode).Ticks);
263 //dateTime with timezone
264 if (dateTimeSerializationMode == XmlDateTimeSerializationMode.Utc) {
265 Assert.AreEqual (new DateTimeOffset (2003, 09, 26, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToUniversalTime ().Ticks,
266 XmlConvert.ToDateTime ("2003-09-26T13:30:44+13:00", dateTimeSerializationMode).Ticks);
267 Assert.AreEqual (new DateTimeOffset (2003, 09, 26, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToUniversalTime ().Ticks,
268 XmlConvert.ToDateTime ("2003-09-26T13:30:44.0+13:00", dateTimeSerializationMode).Ticks);
269 Assert.AreEqual (new DateTimeOffset (2003, 09, 26, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToUniversalTime ().Ticks,
270 XmlConvert.ToDateTime ("2003-09-26T13:30:44.00+13:00", dateTimeSerializationMode).Ticks);
271 Assert.AreEqual (new DateTimeOffset (2003, 09, 26, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToUniversalTime ().Ticks,
272 XmlConvert.ToDateTime ("2003-09-26T13:30:44.000+13:00", dateTimeSerializationMode).Ticks);
273 Assert.AreEqual (new DateTimeOffset (2003, 09, 26, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToUniversalTime ().Ticks,
274 XmlConvert.ToDateTime ("2003-09-26T13:30:44.0000+13:00", dateTimeSerializationMode).Ticks);
275 Assert.AreEqual (new DateTimeOffset (2003, 09, 26, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToUniversalTime ().Ticks,
276 XmlConvert.ToDateTime ("2003-09-26T13:30:44.00000+13:00", dateTimeSerializationMode).Ticks);
277 Assert.AreEqual (new DateTimeOffset (2003, 09, 26, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToUniversalTime ().Ticks,
278 XmlConvert.ToDateTime ("2003-09-26T13:30:44.000000+13:00", dateTimeSerializationMode).Ticks);
279 Assert.AreEqual (new DateTimeOffset (2003, 09, 26, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToUniversalTime ().Ticks,
280 XmlConvert.ToDateTime ("2003-09-26T13:30:44.0000000+13:00", dateTimeSerializationMode).Ticks);
281 Assert.AreEqual (new DateTimeOffset (2003, 09, 26, 13, 30, 44, 123, new TimeSpan (13, 0, 0)).ToUniversalTime ().Ticks,
282 XmlConvert.ToDateTime ("2003-09-26T13:30:44.123+13:00", dateTimeSerializationMode).Ticks);
284 Assert.AreEqual (new DateTimeOffset (2003, 09, 26, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToLocalTime ().Ticks,
285 XmlConvert.ToDateTime ("2003-09-26T13:30:44+13:00", dateTimeSerializationMode).Ticks);
286 Assert.AreEqual (new DateTimeOffset (2003, 09, 26, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToLocalTime ().Ticks,
287 XmlConvert.ToDateTime ("2003-09-26T13:30:44.0+13:00", dateTimeSerializationMode).Ticks);
288 Assert.AreEqual (new DateTimeOffset (2003, 09, 26, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToLocalTime ().Ticks,
289 XmlConvert.ToDateTime ("2003-09-26T13:30:44.00+13:00", dateTimeSerializationMode).Ticks);
290 Assert.AreEqual (new DateTimeOffset (2003, 09, 26, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToLocalTime ().Ticks,
291 XmlConvert.ToDateTime ("2003-09-26T13:30:44.000+13:00", dateTimeSerializationMode).Ticks);
292 Assert.AreEqual (new DateTimeOffset (2003, 09, 26, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToLocalTime ().Ticks,
293 XmlConvert.ToDateTime ("2003-09-26T13:30:44.0000+13:00", dateTimeSerializationMode).Ticks);
294 Assert.AreEqual (new DateTimeOffset (2003, 09, 26, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToLocalTime ().Ticks,
295 XmlConvert.ToDateTime ("2003-09-26T13:30:44.00000+13:00", dateTimeSerializationMode).Ticks);
296 Assert.AreEqual (new DateTimeOffset (2003, 09, 26, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToLocalTime ().Ticks,
297 XmlConvert.ToDateTime ("2003-09-26T13:30:44.000000+13:00", dateTimeSerializationMode).Ticks);
298 Assert.AreEqual (new DateTimeOffset (2003, 09, 26, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToLocalTime ().Ticks,
299 XmlConvert.ToDateTime ("2003-09-26T13:30:44.0000000+13:00", dateTimeSerializationMode).Ticks);
300 Assert.AreEqual (new DateTimeOffset (2003, 09, 26, 13, 30, 44, 123, new TimeSpan (13, 0, 0)).ToLocalTime ().Ticks,
301 XmlConvert.ToDateTime ("2003-09-26T13:30:44.123+13:00", dateTimeSerializationMode).Ticks);
305 Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000).Ticks,
306 XmlConvert.ToDateTime ("13:30:44", dateTimeSerializationMode).Ticks);
307 Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000).Ticks,
308 XmlConvert.ToDateTime ("13:30:44.0", dateTimeSerializationMode).Ticks);
309 Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000).Ticks,
310 XmlConvert.ToDateTime ("13:30:44.00", dateTimeSerializationMode).Ticks);
311 Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000).Ticks,
312 XmlConvert.ToDateTime ("13:30:44.000", dateTimeSerializationMode).Ticks);
313 Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000).Ticks,
314 XmlConvert.ToDateTime ("13:30:44.0000", dateTimeSerializationMode).Ticks);
315 Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000).Ticks,
316 XmlConvert.ToDateTime ("13:30:44.00000", dateTimeSerializationMode).Ticks);
317 Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000).Ticks,
318 XmlConvert.ToDateTime ("13:30:44.000000", dateTimeSerializationMode).Ticks);
319 Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000).Ticks,
320 XmlConvert.ToDateTime ("13:30:44.0000000", dateTimeSerializationMode).Ticks);
321 Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 123).Ticks,
322 XmlConvert.ToDateTime ("13:30:44.123", dateTimeSerializationMode).Ticks);
324 //time with zero timezone
325 if (dateTimeSerializationMode == XmlDateTimeSerializationMode.Local) {
326 Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, DateTimeKind.Utc).ToLocalTime ().Ticks,
327 XmlConvert.ToDateTime ("13:30:44Z", dateTimeSerializationMode).Ticks);
328 Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, DateTimeKind.Utc).ToLocalTime ().Ticks,
329 XmlConvert.ToDateTime ("13:30:44.0Z", dateTimeSerializationMode).Ticks);
330 Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, DateTimeKind.Utc).ToLocalTime ().Ticks,
331 XmlConvert.ToDateTime ("13:30:44.00Z", dateTimeSerializationMode).Ticks);
332 Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, DateTimeKind.Utc).ToLocalTime ().Ticks,
333 XmlConvert.ToDateTime ("13:30:44.000Z", dateTimeSerializationMode).Ticks);
334 Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, DateTimeKind.Utc).ToLocalTime ().Ticks,
335 XmlConvert.ToDateTime ("13:30:44.0000Z", dateTimeSerializationMode).Ticks);
336 Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, DateTimeKind.Utc).ToLocalTime ().Ticks,
337 XmlConvert.ToDateTime ("13:30:44.00000Z", dateTimeSerializationMode).Ticks);
338 Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, DateTimeKind.Utc).ToLocalTime ().Ticks,
339 XmlConvert.ToDateTime ("13:30:44.000000Z", dateTimeSerializationMode).Ticks);
340 Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, DateTimeKind.Utc).ToLocalTime ().Ticks,
341 XmlConvert.ToDateTime ("13:30:44.0000000Z", dateTimeSerializationMode).Ticks);
342 Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 123, DateTimeKind.Utc).ToLocalTime ().Ticks,
343 XmlConvert.ToDateTime ("13:30:44.123Z", dateTimeSerializationMode).Ticks);
345 Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, DateTimeKind.Local).Ticks,
346 XmlConvert.ToDateTime ("13:30:44Z", dateTimeSerializationMode).Ticks);
347 Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, DateTimeKind.Local).Ticks,
348 XmlConvert.ToDateTime ("13:30:44.0Z", dateTimeSerializationMode).Ticks);
349 Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, DateTimeKind.Local).Ticks,
350 XmlConvert.ToDateTime ("13:30:44.00Z", dateTimeSerializationMode).Ticks);
351 Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, DateTimeKind.Local).Ticks,
352 XmlConvert.ToDateTime ("13:30:44.000Z", dateTimeSerializationMode).Ticks);
353 Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, DateTimeKind.Local).Ticks,
354 XmlConvert.ToDateTime ("13:30:44.0000Z", dateTimeSerializationMode).Ticks);
355 Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, DateTimeKind.Local).Ticks,
356 XmlConvert.ToDateTime ("13:30:44.00000Z", dateTimeSerializationMode).Ticks);
357 Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, DateTimeKind.Local).Ticks,
358 XmlConvert.ToDateTime ("13:30:44.000000Z", dateTimeSerializationMode).Ticks);
359 Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, DateTimeKind.Local).Ticks,
360 XmlConvert.ToDateTime ("13:30:44.0000000Z", dateTimeSerializationMode).Ticks);
361 Assert.AreEqual (new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 123, DateTimeKind.Local).Ticks,
362 XmlConvert.ToDateTime ("13:30:44.123Z", dateTimeSerializationMode).Ticks);
366 if (dateTimeSerializationMode == XmlDateTimeSerializationMode.Utc) {
367 Assert.AreEqual (new DateTimeOffset (DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToUniversalTime ().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)).ToUniversalTime ().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)).ToUniversalTime ().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)).ToUniversalTime ().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)).ToUniversalTime ().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)).ToUniversalTime ().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)).ToUniversalTime ().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)).ToUniversalTime ().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)).ToUniversalTime ().Ticks,
384 XmlConvert.ToDateTime ("13:30:44.123+13:00", dateTimeSerializationMode).Ticks);
386 Assert.AreEqual (new DateTimeOffset (DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToLocalTime ().Ticks,
387 XmlConvert.ToDateTime ("13:30:44+13:00", dateTimeSerializationMode).Ticks);
388 Assert.AreEqual (new DateTimeOffset (DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToLocalTime ().Ticks,
389 XmlConvert.ToDateTime ("13:30:44.0+13:00", dateTimeSerializationMode).Ticks);
390 Assert.AreEqual (new DateTimeOffset (DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToLocalTime ().Ticks,
391 XmlConvert.ToDateTime ("13:30:44.00+13:00", dateTimeSerializationMode).Ticks);
392 Assert.AreEqual (new DateTimeOffset (DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToLocalTime ().Ticks,
393 XmlConvert.ToDateTime ("13:30:44.000+13:00", dateTimeSerializationMode).Ticks);
394 Assert.AreEqual (new DateTimeOffset (DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToLocalTime ().Ticks,
395 XmlConvert.ToDateTime ("13:30:44.0000+13:00", dateTimeSerializationMode).Ticks);
396 Assert.AreEqual (new DateTimeOffset (DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToLocalTime ().Ticks,
397 XmlConvert.ToDateTime ("13:30:44.00000+13:00", dateTimeSerializationMode).Ticks);
398 Assert.AreEqual (new DateTimeOffset (DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToLocalTime ().Ticks,
399 XmlConvert.ToDateTime ("13:30:44.000000+13:00", dateTimeSerializationMode).Ticks);
400 Assert.AreEqual (new DateTimeOffset (DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 000, new TimeSpan (13, 0, 0)).ToLocalTime ().Ticks,
401 XmlConvert.ToDateTime ("13:30:44.0000000+13:00", dateTimeSerializationMode).Ticks);
402 Assert.AreEqual (new DateTimeOffset (DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 13, 30, 44, 123, new TimeSpan (13, 0, 0)).ToLocalTime ().Ticks,
403 XmlConvert.ToDateTime ("13:30:44.123+13:00", dateTimeSerializationMode).Ticks);
407 Assert.AreEqual (new DateTime(2003, 09, 26, 00, 00, 00, 000).Ticks, XmlConvert.ToDateTime ("2003-09-26", dateTimeSerializationMode).Ticks);
408 if (dateTimeSerializationMode == XmlDateTimeSerializationMode.Local)
409 Assert.AreEqual (new DateTime(2003, 09, 26, 00, 00, 00, 000, DateTimeKind.Utc).ToLocalTime ().Ticks,
410 XmlConvert.ToDateTime ("2003-09-26Z", dateTimeSerializationMode).Ticks);
412 Assert.AreEqual (new DateTime(2003, 09, 26, 00, 00, 00, 000, DateTimeKind.Local).Ticks,
413 XmlConvert.ToDateTime ("2003-09-26Z", dateTimeSerializationMode).Ticks);
414 if (dateTimeSerializationMode == XmlDateTimeSerializationMode.Utc)
415 Assert.AreEqual (new DateTimeOffset (2003, 09, 26, 00, 00, 00, 000, new TimeSpan (13, 0, 0)).ToUniversalTime ().Ticks,
416 XmlConvert.ToDateTime ("2003-09-26+13:00", dateTimeSerializationMode).Ticks);
418 Assert.AreEqual (new DateTimeOffset (2003, 09, 26, 00, 00, 00, 000, new TimeSpan (13, 0, 0)).ToLocalTime ().Ticks,
419 XmlConvert.ToDateTime ("2003-09-26+13:00", dateTimeSerializationMode).Ticks);
422 Assert.AreEqual (new DateTime(2003, 09, 01, 00, 00, 00, 000).Ticks, XmlConvert.ToDateTime ("2003-09", dateTimeSerializationMode).Ticks);
423 if (dateTimeSerializationMode == XmlDateTimeSerializationMode.Local)
424 Assert.AreEqual (new DateTime(2003, 09, 01, 00, 00, 00, 000, DateTimeKind.Utc).ToLocalTime ().Ticks,
425 XmlConvert.ToDateTime ("2003-09Z", dateTimeSerializationMode).Ticks);
427 Assert.AreEqual (new DateTime(2003, 09, 01, 00, 00, 00, 000, DateTimeKind.Local).Ticks,
428 XmlConvert.ToDateTime ("2003-09Z", dateTimeSerializationMode).Ticks);
429 if (dateTimeSerializationMode == XmlDateTimeSerializationMode.Utc)
430 Assert.AreEqual (new DateTimeOffset (2003, 09, 01, 00, 00, 00, 000, new TimeSpan (13, 0, 0)).ToUniversalTime ().Ticks,
431 XmlConvert.ToDateTime ("2003-09+13:00", dateTimeSerializationMode).Ticks);
433 Assert.AreEqual (new DateTimeOffset (2003, 09, 01, 00, 00, 00, 000, new TimeSpan (13, 0, 0)).ToLocalTime ().Ticks,
434 XmlConvert.ToDateTime ("2003-09+13:00", dateTimeSerializationMode).Ticks);
437 Assert.AreEqual (new DateTime(2003, 01, 01, 00, 00, 00, 000).Ticks, XmlConvert.ToDateTime ("2003", dateTimeSerializationMode).Ticks);
438 if (dateTimeSerializationMode == XmlDateTimeSerializationMode.Local)
439 Assert.AreEqual (new DateTime(2003, 01, 01, 00, 00, 00, 000, DateTimeKind.Utc).ToLocalTime ().Ticks,
440 XmlConvert.ToDateTime ("2003Z", dateTimeSerializationMode).Ticks);
442 Assert.AreEqual (new DateTime(2003, 01, 01, 00, 00, 00, 000, DateTimeKind.Local).Ticks,
443 XmlConvert.ToDateTime ("2003Z", dateTimeSerializationMode).Ticks);
444 if (dateTimeSerializationMode == XmlDateTimeSerializationMode.Utc)
445 Assert.AreEqual (new DateTimeOffset (2003, 01, 01, 00, 00, 00, 000, new TimeSpan (13, 0, 0)).ToUniversalTime ().Ticks,
446 XmlConvert.ToDateTime ("2003+13:00", dateTimeSerializationMode).Ticks);
448 Assert.AreEqual (new DateTimeOffset (2003, 01, 01, 00, 00, 00, 000, new TimeSpan (13, 0, 0)).ToLocalTime ().Ticks,
449 XmlConvert.ToDateTime ("2003+13:00", dateTimeSerializationMode).Ticks);
452 Assert.AreEqual (new DateTime(DateTime.Now.Year, 01, 26, 00, 00, 00, 000).Ticks, XmlConvert.ToDateTime ("---26", dateTimeSerializationMode).Ticks);
453 if (dateTimeSerializationMode == XmlDateTimeSerializationMode.Local)
454 Assert.AreEqual (new DateTime(DateTime.Now.Year, 01, 26, 00, 00, 00, 000, DateTimeKind.Utc).ToLocalTime ().Ticks,
455 XmlConvert.ToDateTime ("---26Z", dateTimeSerializationMode).Ticks);
457 Assert.AreEqual (new DateTime(DateTime.Now.Year, 01, 26, 00, 00, 00, 000, DateTimeKind.Local).Ticks,
458 XmlConvert.ToDateTime ("---26Z", dateTimeSerializationMode).Ticks);
459 if (dateTimeSerializationMode == XmlDateTimeSerializationMode.Utc)
460 Assert.AreEqual (new DateTimeOffset (DateTime.Now.Year, 01, 26, 00, 00, 00, 000, new TimeSpan (13, 0, 0)).ToUniversalTime ().Ticks,
461 XmlConvert.ToDateTime ("---26+13:00", dateTimeSerializationMode).Ticks);
463 Assert.AreEqual (new DateTimeOffset (DateTime.Now.Year, 01, 26, 00, 00, 00, 000, new TimeSpan (13, 0, 0)).ToLocalTime ().Ticks,
464 XmlConvert.ToDateTime ("---26+13:00", dateTimeSerializationMode).Ticks);
468 //check resulting date kind
469 Assert.AreEqual (DateTimeKind.Local, XmlConvert.ToDateTime ("2003-09-26T13:30:44", XmlDateTimeSerializationMode.Local).Kind);
470 Assert.AreEqual (DateTimeKind.Local, XmlConvert.ToDateTime ("2003-09-26T13:30:44Z", XmlDateTimeSerializationMode.Local).Kind);
471 Assert.AreEqual (DateTimeKind.Local, XmlConvert.ToDateTime ("2003-09-26T13:30:44+13:00", XmlDateTimeSerializationMode.Local).Kind);
472 Assert.AreEqual (DateTimeKind.Utc, XmlConvert.ToDateTime ("2003-09-26T13:30:44", XmlDateTimeSerializationMode.Utc).Kind);
473 Assert.AreEqual (DateTimeKind.Utc, XmlConvert.ToDateTime ("2003-09-26T13:30:44Z", XmlDateTimeSerializationMode.Utc).Kind);
474 Assert.AreEqual (DateTimeKind.Utc, XmlConvert.ToDateTime ("2003-09-26T13:30:44+13:00", XmlDateTimeSerializationMode.Utc).Kind);
475 Assert.AreEqual (DateTimeKind.Unspecified, XmlConvert.ToDateTime ("2003-09-26T13:30:44", XmlDateTimeSerializationMode.Unspecified).Kind);
476 Assert.AreEqual (DateTimeKind.Unspecified, XmlConvert.ToDateTime ("2003-09-26T13:30:44Z", XmlDateTimeSerializationMode.Unspecified).Kind);
477 Assert.AreEqual (DateTimeKind.Unspecified, XmlConvert.ToDateTime ("2003-09-26T13:30:44+13:00", XmlDateTimeSerializationMode.Unspecified).Kind);
478 Assert.AreEqual (DateTimeKind.Unspecified, XmlConvert.ToDateTime ("2003-09-26T13:30:44", XmlDateTimeSerializationMode.RoundtripKind).Kind);
479 Assert.AreEqual (DateTimeKind.Utc, XmlConvert.ToDateTime ("2003-09-26T13:30:44Z", XmlDateTimeSerializationMode.RoundtripKind).Kind);
480 Assert.AreEqual (DateTimeKind.Local, XmlConvert.ToDateTime ("2003-09-26T13:30:44+13:00", XmlDateTimeSerializationMode.RoundtripKind).Kind);
484 public void ToDecimal ()
486 Assert.AreEqual (1.987, XmlConvert.ToDecimal ("1.987"));
490 public void ToDouble ()
492 Assert.AreEqual (1.0d/0.0d, XmlConvert.ToDouble ("INF"));
493 Assert.AreEqual (-1.0d/0.0d, XmlConvert.ToDouble ("-INF"));
494 Assert.AreEqual (0.0d/0.0d, XmlConvert.ToDouble ("NaN"));
495 Assert.AreEqual (789324, XmlConvert.ToDouble ("789324"));
496 Assert.AreEqual (42, XmlConvert.ToDouble (" 42 "));
497 Assert.AreEqual (double.NaN, XmlConvert.ToDouble (" NaN "));
498 Assert.AreEqual (double.PositiveInfinity, XmlConvert.ToDouble (" Infinity "));
499 Assert.AreEqual (double.NegativeInfinity, XmlConvert.ToDouble (" -Infinity "));
500 Assert.AreEqual (double.PositiveInfinity, XmlConvert.ToDouble (" INF"));
501 Assert.AreEqual (double.NegativeInfinity, XmlConvert.ToDouble (" -INF "));
505 public void ToDoubleRoundtrip ()
508 string s = XmlConvert.ToString (double.MaxValue);
509 Assert.AreEqual (double.MaxValue, XmlConvert.ToDouble (s));
513 public void ToGuid ()
515 Assert.AreEqual (new Guid ("ca761232-ed42-11ce-bacd-00aa0057b223"), XmlConvert.ToGuid ("ca761232-ed42-11ce-bacd-00aa0057b223"));
519 public void ToInt16 ()
521 Assert.AreEqual (0, XmlConvert.ToInt16 ("0"), "0");
522 Assert.AreEqual (-1, XmlConvert.ToInt16 ("-1"), "-1");
523 Assert.AreEqual (1, XmlConvert.ToInt16 ("1"), "1");
524 Assert.AreEqual (32767, XmlConvert.ToInt16 ("32767"), "32767");
525 Assert.AreEqual (-32768, XmlConvert.ToInt16 ("-32768"), "-32768");
527 XmlConvert.ToInt16 ("32768");
528 Assert.Fail ("32768");
529 } catch (OverflowException) {
532 XmlConvert.ToInt16 ("-32769");
533 Assert.Fail ("-32769");
534 } catch (OverflowException) {
537 XmlConvert.ToInt16 ("0x100");
538 Assert.Fail ("0x100");
539 } catch (FormatException) {
544 public void ToInt32 ()
546 Assert.AreEqual (0, XmlConvert.ToInt32 ("0"), "0");
547 Assert.AreEqual (-1, XmlConvert.ToInt32 ("-1"), "-1");
548 Assert.AreEqual (1, XmlConvert.ToInt32 ("1"), "1");
549 Assert.AreEqual (int.MaxValue, XmlConvert.ToInt32 ("2147483647"), "2147483647");
550 Assert.AreEqual (int.MinValue, XmlConvert.ToInt32 ("-2147483648"), "-2147483648");
552 int.Parse ("2147483648", CultureInfo.CurrentCulture);
553 Assert.Fail ("int.Parse(current culture)");
554 } catch (OverflowException) {
557 int.Parse ("2147483648", CultureInfo.InvariantCulture);
558 Assert.Fail ("int.Parse(invariant culture)");
559 } catch (OverflowException) {
562 XmlConvert.ToInt32 ("2147483648");
563 Assert.Fail ("2147483648");
564 } catch (OverflowException) {
567 XmlConvert.ToInt32 ("-2147483649");
568 Assert.Fail ("-2147483649");
569 } catch (OverflowException) {
572 XmlConvert.ToInt32 ("0x10000");
573 Assert.Fail ("0x10000");
574 } catch (FormatException) {
579 public void ToInt64 ()
581 Assert.AreEqual (0, XmlConvert.ToInt64 ("0"), "0");
582 Assert.AreEqual (-1, XmlConvert.ToInt64 ("-1"), "-1");
583 Assert.AreEqual (1, XmlConvert.ToInt64 ("1"), "1");
584 Assert.AreEqual (long.MaxValue, XmlConvert.ToInt64 ("9223372036854775807"), "9223372036854775807");
585 Assert.AreEqual (long.MinValue, XmlConvert.ToInt64 ("-9223372036854775808"), "-9223372036854775808");
587 XmlConvert.ToInt64 ("9223372036854775808");
588 Assert.Fail ("9223372036854775808");
589 } catch (OverflowException) {
592 XmlConvert.ToInt64 ("-9223372036854775809");
593 Assert.Fail ("-9223372036854775809");
594 } catch (OverflowException) {
597 XmlConvert.ToInt64 ("0x10000");
598 Assert.Fail ("0x10000");
599 } catch (FormatException) {
604 public void ToSByte ()
606 Assert.AreEqual (0, XmlConvert.ToSByte ("0"), "0");
607 Assert.AreEqual (-1, XmlConvert.ToSByte ("-1"), "-1");
608 Assert.AreEqual (1, XmlConvert.ToSByte ("1"), "1");
609 Assert.AreEqual (127, XmlConvert.ToSByte ("127"), "127");
610 Assert.AreEqual (-128, XmlConvert.ToSByte ("-128"), "-128");
612 XmlConvert.ToSByte ("128");
614 } catch (OverflowException) {
617 XmlConvert.ToSByte ("-129");
618 Assert.Fail ("-129");
619 } catch (OverflowException) {
622 XmlConvert.ToSByte ("0x80");
623 Assert.Fail ("0x80");
624 } catch (FormatException) {
629 public void ToSingle ()
631 Assert.AreEqual (1.0d/0.0d, XmlConvert.ToSingle ("INF"));
632 Assert.AreEqual (-1.0d/0.0d, XmlConvert.ToSingle ("-INF"));
633 Assert.AreEqual (0.0d/0.0d, XmlConvert.ToSingle ("NaN"));
634 Assert.AreEqual (789324, XmlConvert.ToSingle ("789324"));
635 Assert.AreEqual (42, XmlConvert.ToSingle (" 42 "));
636 Assert.AreEqual (float.NaN, XmlConvert.ToSingle (" NaN "));
637 Assert.AreEqual (float.PositiveInfinity, XmlConvert.ToSingle (" Infinity "));
638 Assert.AreEqual (float.NegativeInfinity, XmlConvert.ToSingle (" -Infinity "));
639 Assert.AreEqual (float.PositiveInfinity, XmlConvert.ToSingle (" INF"));
640 Assert.AreEqual (float.NegativeInfinity, XmlConvert.ToSingle (" -INF "));
644 public void ToStringTest ()//not done
646 // Don't include TimeZone value for test value.
648 XmlConvert.ToString (new DateTime (2003, 5, 5));
649 Assert.AreEqual (33, dateString.Length);
650 Assert.AreEqual (dateString.Substring (0, 27), "2003-05-05T00:00:00.0000000");
652 // Must not throw an exception...
653 Assert.IsNotNull ("-P10675199DT2H48M5.4775808S", XmlConvert.ToString (TimeSpan.MinValue));
657 public void TimeSpanToStringShouldNotHaveTimeSuffixIfTimeIsZero()
659 string s = XmlConvert.ToString(new TimeSpan (345, 0, 0, 0));
660 Assert.AreEqual("P345D", s);
664 public void FromTimeSpan ()
667 TimeSpan t1 = TimeSpan.FromTicks (
668 TimeSpan.TicksPerSecond + 1);
669 Assert.AreEqual ("PT1.0000001S", XmlConvert.ToString (t1), "#1");
671 // XAttributeTest.CastTimeSpans():#5d
672 t1 = new TimeSpan (2710L);
673 Assert.AreEqual ("PT0.000271S", XmlConvert.ToString (t1), "#2");
674 t1 = new TimeSpan (27100000L);
675 Assert.AreEqual ("PT2.71S", XmlConvert.ToString (t1), "#3");
679 public void ToTimeSpan ()
681 Assert.AreEqual (new TimeSpan (0, 0, 0, 0, 1), XmlConvert.ToTimeSpan ("PT0.001S"), "#1");
683 Assert.AreEqual (new TimeSpan (0, 0, 0, 0, 100), XmlConvert.ToTimeSpan ("PT0.1S"), "#2");
684 Assert.AreEqual (new TimeSpan (0, 0, 0, 0, 100), XmlConvert.ToTimeSpan ("PT0.100S"), "#3");
685 Assert.AreEqual (new TimeSpan (0, 0, 0, 0, 10), XmlConvert.ToTimeSpan ("PT0.010S"), "#4");
686 Assert.AreEqual (new TimeSpan (0, 0, 0, 0, 10), XmlConvert.ToTimeSpan ("PT0.01S"), "#5");
689 Assert.AreEqual (TimeSpan.FromTicks (TimeSpan.TicksPerSecond + 1), XmlConvert.ToTimeSpan ("PT1.0000001S"), "#6");
691 Assert.AreEqual (TimeSpan.MinValue, XmlConvert.ToTimeSpan ("-P10675199DT2H48M5.4775808S"), "#7");
693 Assert.AreEqual (TimeSpan.MaxValue, XmlConvert.ToTimeSpan ("P10675199DT2H48M5.4775807S"), "#8");
695 Assert.AreEqual (TimeSpan.FromDays (2), XmlConvert.ToTimeSpan (" \r\n \tP2D "), "#9");
699 public void ToUInt16 ()
701 Assert.AreEqual (0, XmlConvert.ToUInt16 ("0"), "0");
702 Assert.AreEqual (1, XmlConvert.ToUInt16 ("1"), "1");
703 Assert.AreEqual (ushort.MaxValue, XmlConvert.ToUInt16 ("65535"), "65535");
705 ushort.Parse ("65536", CultureInfo.CurrentCulture);
706 Assert.Fail ("ushort.Parse(current culture)");
707 } catch (OverflowException) {
710 ushort.Parse ("65536", CultureInfo.InvariantCulture);
711 Assert.Fail ("ushort.Parse(invariant culture)");
712 } catch (OverflowException) {
715 XmlConvert.ToUInt16 ("65536");
716 Assert.Fail ("65536");
717 } catch (OverflowException) {
720 XmlConvert.ToUInt16 ("0x10000");
721 Assert.Fail ("0x10000");
722 } catch (FormatException) {
724 // LAMESPEC: it is not fixable as there is no public
725 // member of UInt16 that treats this as FormatException
726 // while others above as either OverflowException or
727 // FormatException respectively.
728 // (.NET uses internal member in UInt16 here);
730 // XmlConvert.ToUInt16 ("-101");
731 // Assert.Fail ("-101");
732 //} catch (FormatException) {
737 public void ToUInt32 ()
739 Assert.AreEqual (0, XmlConvert.ToUInt32 ("0"), "0");
740 Assert.AreEqual (1, XmlConvert.ToUInt32 ("1"), "1");
741 Assert.AreEqual (uint.MaxValue, XmlConvert.ToUInt32 ("4294967295"), "4294967295");
743 uint.Parse ("4294967296", CultureInfo.CurrentCulture);
744 Assert.Fail ("uint.Parse(current culture)");
745 } catch (OverflowException) {
748 uint.Parse ("4294967296", CultureInfo.InvariantCulture);
749 Assert.Fail ("uint.Parse(invariant culture)");
750 } catch (OverflowException) {
753 XmlConvert.ToUInt32 ("4294967296");
754 Assert.Fail ("4294967296");
755 } catch (OverflowException) {
758 XmlConvert.ToUInt32 ("0x10000");
759 Assert.Fail ("0x10000");
760 } catch (FormatException) {
762 // LAMESPEC: it is not fixable as there is no public
763 // member of UInt32 that treats this as FormatException
764 // while others above as either OverflowException or
765 // FormatException respectively.
766 // (.NET uses internal member in UInt32 here);
768 // XmlConvert.ToUInt32 ("-101");
769 // Assert.Fail ("-101");
770 //} catch (FormatException) {
775 public void ToUInt64 ()
777 Assert.AreEqual (0, XmlConvert.ToUInt64 ("0"), "0");
778 Assert.AreEqual (1, XmlConvert.ToUInt64 ("1"), "1");
779 Assert.AreEqual (ulong.MaxValue, XmlConvert.ToUInt64 ("18446744073709551615"), "18446744073709551615");
781 ulong.Parse ("18446744073709551616", CultureInfo.CurrentCulture);
782 Assert.Fail ("ulong.Parse(current culture)");
783 } catch (OverflowException) {
786 ulong.Parse ("18446744073709551616", CultureInfo.InvariantCulture);
787 Assert.Fail ("ulong.Parse(invariant culture)");
788 } catch (OverflowException) {
791 XmlConvert.ToUInt64 ("18446744073709551616");
792 Assert.Fail ("18446744073709551616");
793 } catch (OverflowException) {
796 XmlConvert.ToUInt64 ("0x10000");
797 Assert.Fail ("0x10000");
798 } catch (FormatException) {
800 // LAMESPEC: it is not fixable as there is no public
801 // member of UInt64 that treats this as FormatException
802 // while others above as either OverflowException or
803 // FormatException respectively.
804 // (.NET uses internal member in UInt64 here);
806 // XmlConvert.ToUInt64 ("-101");
807 // Assert.Fail ("-101");
808 //} catch (FormatException) {
813 public void VerifyName ()
815 VerifyNameValid ("a");
816 VerifyNameValid ("a1");
817 VerifyNameValid ("\u3041");
818 VerifyNameValid ("a:b");
819 VerifyNameValid ("_");
820 VerifyNameValid ("__");
821 VerifyNameValid ("_1");
822 VerifyNameValid (":");
823 VerifyNameValid (":a");
824 VerifyNameValid ("a.b");
828 public void VerifyNameInvalid ()
830 VerifyNameInvalid ("!");
831 VerifyNameInvalid ("_a!b");
832 VerifyNameInvalid ("?a");
833 VerifyNameInvalid (" ");
837 [ExpectedException (typeof (ArgumentNullException))]
838 public void VerifyNameNull ()
840 XmlConvert.VerifyName (null);
844 [ExpectedException (typeof (ArgumentNullException))]
845 public void VerifyNameEmpty ()
847 XmlConvert.VerifyName ("");
850 private void VerifyNameValid (string value)
853 XmlConvert.VerifyName (value);
854 } catch (XmlException) {
855 Assert.Fail (String.Format ("'{0}'", value));
859 private void VerifyNameInvalid (string value)
862 XmlConvert.VerifyName (value);
864 } catch (XmlException) {
869 public void VerifyNCName ()
871 Assert.AreEqual ("foo", XmlConvert.VerifyNCName ("foo"));
873 XmlConvert.VerifyNCName ("?foo");
875 } catch (XmlException) {}
877 XmlConvert.VerifyNCName (":foo");
879 } catch (XmlException) {}
881 XmlConvert.VerifyNCName ("foo:bar");
883 } catch (XmlException) {}
885 XmlConvert.VerifyNCName ("foo:bar:baz");
887 } catch (XmlException) {}
891 [ExpectedException (typeof (ArgumentNullException))]
892 public void VerifyNCNameNull ()
894 XmlConvert.VerifyNCName (null);
898 [ExpectedException (typeof (ArgumentNullException))]
899 public void VerifyNCNameEmpty ()
901 XmlConvert.VerifyNCName ("");
905 public void DurationZero () // bug #77350
907 Assert.AreEqual ("PT0S", XmlConvert.ToString (TimeSpan.FromSeconds (0)));
911 public void VerifyTOKEN ()
913 VerifyToken ("", true);
914 VerifyToken (" ", false);
915 VerifyToken ("A", true);
916 VerifyToken ("!", true);
917 VerifyToken (" !", false);
918 VerifyToken ("! ", false);
919 VerifyToken ("! !", true);
920 VerifyToken ("!\t!", false);
921 VerifyToken ("!\n!", false);
922 VerifyToken ("!\r!", false);
923 VerifyToken ("###", true);
926 private void VerifyToken (string s, bool success)
929 XmlConvert.VerifyTOKEN (s);
932 Assert.Fail (s + "should fail");
933 } catch (XmlException ex) {
935 Assert.Fail (s + "should not fail");
940 public void XmlDateTimeSerializationModeAndMaxValue ()
942 Assert.AreEqual ("9999-12-31T23:59:59.9999999", XmlConvert.ToString (DateTime.MaxValue, XmlDateTimeSerializationMode.Unspecified).Substring (0, 27), "#1");
943 Assert.AreEqual ("9999-12-31T23:59:59.9999999Z", XmlConvert.ToString (DateTime.MaxValue, XmlDateTimeSerializationMode.Utc), "#2");
944 Assert.AreEqual ("9999-12-31T23:59:59.9999999", XmlConvert.ToString (DateTime.MaxValue, XmlDateTimeSerializationMode.RoundtripKind), "#3");
945 Assert.AreEqual ("9999-12-31T23:59:59.9999999", XmlConvert.ToString (DateTime.MaxValue, XmlDateTimeSerializationMode.Local).Substring (0, 27), "#4");
946 // direct formatting string - no difference
947 Assert.AreEqual ("9999-12-31T23:59:59.9999999Z", XmlConvert.ToString (DateTime.MaxValue, "yyyy-MM-ddTHH:mm:ss.FFFFFFFZ"), "#5");
948 Assert.AreEqual ("9999-12-31T23:59:59.9999999", XmlConvert.ToString (DateTime.MaxValue, "yyyy-MM-ddTHH:mm:ss.FFFFFFFzzz").Substring (0, 27), "#6");
952 public void XmlDateTimeSerializationModeRountripKind ()
954 string format = "yyyy-MM-ddTHH:mm:ss.FFFFFFFK";
955 string s = XmlConvert.ToString (DateTime.UtcNow, format);
956 Assert.AreEqual ('Z', s [s.Length -1], "#1-1");
957 // LAMESPEC: .NET has a bug here that 'K' in format string does not reflect 'Z' as Utc Kind.
958 // https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=307694
959 //Assert.AreEqual (DateTimeKind.Utc, XmlConvert.ToDateTime (s, format).Kind, "#1-2");
961 s = XmlConvert.ToString (DateTime.UtcNow, XmlDateTimeSerializationMode.RoundtripKind);
962 Assert.AreEqual ('Z', s [s.Length -1], "#2-1");
963 Assert.AreEqual (DateTimeKind.Utc, XmlConvert.ToDateTime (s, XmlDateTimeSerializationMode.RoundtripKind).Kind, "#2-2");
967 public void XmlDateTimeSerializationModeUnspecified ()
969 Assert.AreEqual (27, XmlConvert.ToString (new DateTime (DateTime.MaxValue.Ticks, DateTimeKind.Utc), XmlDateTimeSerializationMode.Unspecified).Length, "#1");
970 DateTime dt1 = XmlConvert.ToDateTime ("0001-02-03T10:20:30.0000+02:00", XmlDateTimeSerializationMode.Unspecified);
971 DateTime dt2 = XmlConvert.ToDateTime ("0001-02-03T10:20:30.0000", XmlDateTimeSerializationMode.Unspecified);
972 Assert.AreEqual (false, dt1 == dt2, "#2");
973 XmlConvert.ToDateTime ("2006-05-30T09:48:32.0Z", XmlDateTimeSerializationMode.Unspecified);
974 string format = "yyyy-MM-ddTHH:mm:ss.FFFFFFFK";
975 XmlConvert.ToDateTime (XmlConvert.ToString (DateTime.UtcNow, format), XmlDateTimeSerializationMode.Unspecified);
979 public void XmlDateTimeSerializationModeLocal ()
981 XmlConvert.ToDateTime ("2010-11-10", XmlDateTimeSerializationMode.Local); // bug #655089
982 XmlConvert.ToDateTime ("2010-11", XmlDateTimeSerializationMode.Local);
986 public void XmlDateTimeSerializationModeUtc ()
988 Assert.AreEqual (27, XmlConvert.ToString (new DateTime (DateTime.MaxValue.Ticks, DateTimeKind.Utc), XmlDateTimeSerializationMode.Unspecified).Length, "#1");
989 DateTime dt1 = XmlConvert.ToDateTime ("0001-02-03T10:20:30.0000+02:00", XmlDateTimeSerializationMode.Utc);
990 DateTime dt2 = XmlConvert.ToDateTime ("0001-02-03T10:20:30.0000", XmlDateTimeSerializationMode.Utc);
991 Assert.AreEqual (false, dt1 == dt2, "#2");
992 XmlConvert.ToDateTime ("2006-05-30T09:48:32.0Z", XmlDateTimeSerializationMode.Utc);
993 XmlConvert.ToDateTime ("2006-05-30T09:48:32.0+02:00", XmlDateTimeSerializationMode.Utc);
994 XmlConvert.ToDateTime ("2008-06-11T11:09:47.125Z", XmlDateTimeSerializationMode.Utc);
998 public void XmlDateTimeSerializationModeSeveralFormats ()
1000 XmlDateTimeSerializationMode m = XmlDateTimeSerializationMode.RoundtripKind;
1001 XmlConvert.ToDateTime ("0001", m);
1002 XmlConvert.ToDateTime ("0001Z", m);
1003 XmlConvert.ToDateTime ("0001+09:00", m);
1004 XmlConvert.ToDateTime ("0001-02", m);
1005 XmlConvert.ToDateTime ("0001-02Z", m);
1006 XmlConvert.ToDateTime ("0001-02+09:00", m);
1007 XmlConvert.ToDateTime ("0001-02-03", m);
1008 XmlConvert.ToDateTime ("0001-02-03Z", m);
1009 XmlConvert.ToDateTime ("0001-02-03+09:00", m);
1010 XmlConvert.ToDateTime ("--02-03", m);
1011 XmlConvert.ToDateTime ("--02-03Z", m);
1012 XmlConvert.ToDateTime ("--02-03+09:00", m);
1013 XmlConvert.ToDateTime ("---03", m);
1014 XmlConvert.ToDateTime ("---03Z", m);
1015 XmlConvert.ToDateTime ("---03+09:00", m);
1016 XmlConvert.ToDateTime ("10:20:30", m);
1017 XmlConvert.ToDateTime ("10:20:30Z", m);
1018 XmlConvert.ToDateTime ("10:20:30+09:00", m);
1019 XmlConvert.ToDateTime ("0001-02-03T10:20:30", m);
1020 XmlConvert.ToDateTime ("0001-02-03T10:20:30Z", m);
1021 XmlConvert.ToDateTime ("0001-02-03T10:20:30+09:00", m);
1022 XmlConvert.ToDateTime ("0001-02-03T10:20:30.00", m);
1023 XmlConvert.ToDateTime ("0001-02-03T10:20:30.00Z", m);
1024 XmlConvert.ToDateTime ("0001-02-03T10:20:30.00+09:00", m);
1025 XmlConvert.ToDateTime ("0001-02-03T10:20:30.0000", m);
1026 XmlConvert.ToDateTime ("0001-02-03T10:20:30.0000Z", m);
1027 XmlConvert.ToDateTime ("0001-02-03T10:20:30.0000+09:00", m);
1031 [Category("NotWorking")]
1032 public void XmlDateTimeSerializationModeBadFormats ()
1034 XmlDateTimeSerializationMode m = XmlDateTimeSerializationMode.RoundtripKind;
1037 XmlConvert.ToDateTime ("0001-02-03T", m);
1039 } catch (FormatException) {
1042 XmlConvert.ToDateTime ("0001-02-03T10:20", m);
1044 } catch (FormatException) {
1047 XmlConvert.ToDateTime ("0001-02-03T10:20:30.", m);
1049 } catch (FormatException) {
1053 [Test] // see http://smdn.invisiblefulmoon.net/misc/forum/programming/#n10
1054 public void DateTimeOffsetTimezoneRoundtrip ()
1056 Assert.AreEqual (new DateTimeOffset (2009, 11, 05, 20, 16, 22, TimeSpan.FromHours (9)), XmlConvert.ToDateTimeOffset ("2009-11-05T20:16:22+09:00"), "#1");
1060 public void DateTimeOffsetWithWhitespace ()
1062 var s = " 2010-01-02T00:00:00Z \t";
1063 XmlConvert.ToDateTime (s);
1067 public void ToDateTimeUtc ()
1070 var date = XmlConvert.ToDateTime ("2010-12-29T22:01:15.1619814", XmlDateTimeSerializationMode.Utc);
1071 Assert.AreEqual (22, date.Hour, "#1");
1075 public void ToDateTimeZ ()
1078 // looks like *all* XmlDateTimeSerializationMode allows use of Z
1079 foreach (XmlDateTimeSerializationMode mode in Enum.GetValues (typeof (XmlDateTimeSerializationMode))) {
1080 XmlConvert.ToDateTime ("2009-12-15T08:44:05Z", mode);
1081 XmlConvert.ToDateTime ("2009-12-15Z", mode);
1082 XmlConvert.ToDateTime ("2009-12Z", mode);
1083 XmlConvert.ToDateTime ("2009Z", mode);
1084 XmlConvert.ToDateTime ("---09Z", mode);
1085 XmlConvert.ToDateTime ("10:01:02Z", mode);
1086 XmlConvert.ToDateTime ("2009-12-15T08:44:05.2700544Z", mode);