2009-07-11 Michael Barker <mike@middlesoft.co.uk>
[mono.git] / mcs / class / System.Data / Test / System.Data.SqlTypes / SqlDateTimeTest.cs
1 //\r
2 // SqlDateTimeTest.cs - NUnit Test Cases for System.Data.SqlTypes.SqlDateTime\r
3 //\r
4 // Authors:\r
5 //   Ville Palo (vi64pa@koti.soon.fi)\r
6 //   Martin Willemoes Hansen\r
7 //\r
8 // (C) 2002 Ville Palo\r
9 // (C) 2003 Martin Willemoes Hansen\r
10 // \r
11 \r
12 //\r
13 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)\r
14 //\r
15 // Permission is hereby granted, free of charge, to any person obtaining\r
16 // a copy of this software and associated documentation files (the\r
17 // "Software"), to deal in the Software without restriction, including\r
18 // without limitation the rights to use, copy, modify, merge, publish,\r
19 // distribute, sublicense, and/or sell copies of the Software, and to\r
20 // permit persons to whom the Software is furnished to do so, subject to\r
21 // the following conditions:\r
22 // \r
23 // The above copyright notice and this permission notice shall be\r
24 // included in all copies or substantial portions of the Software.\r
25 // \r
26 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
27 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
28 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
29 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
30 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
31 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
32 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
33 //\r
34 \r
35 using NUnit.Framework;\r
36 using System;\r
37 using System.Xml;\r
38 using System.Data.SqlTypes;\r
39 using System.Threading;\r
40 using System.Globalization;\r
41 \r
42 namespace MonoTests.System.Data.SqlTypes\r
43 {\r
44         [TestFixture]\r
45         public class SqlDateTimeTest {\r
46 \r
47                 private long[] myTicks = {\r
48                         631501920000000000L,    // 25 Feb 2002 - 00:00:00\r
49                         631502475130080000L,    // 25 Feb 2002 - 15:25:13,8\r
50                         631502115130080000L,    // 25 Feb 2002 - 05:25:13,8\r
51                         631502115000000000L,    // 25 Feb 2002 - 05:25:00\r
52                         631502115130000000L,    // 25 Feb 2002 - 05:25:13\r
53                         631502079130000000L,    // 25 Feb 2002 - 04:25:13\r
54                         629197085770000000L     // 06 Nov 1994 - 08:49:37 \r
55                 };\r
56 \r
57                 private SqlDateTime Test1;\r
58                 private SqlDateTime Test2;\r
59                 private SqlDateTime Test3;\r
60 \r
61                 [SetUp]\r
62                 public void GetReady() \r
63                 {\r
64                         Thread.CurrentThread.CurrentCulture = new CultureInfo ("en-US");\r
65                         Test1 = new SqlDateTime (2002, 10, 19, 9, 40, 0);\r
66                         Test2 = new SqlDateTime (2003, 11, 20,10, 50, 1);\r
67                         Test3 = new SqlDateTime (2003, 11, 20, 10, 50, 1);\r
68                 }\r
69 \r
70                 // Test constructor\r
71                 [Test]\r
72                 public void Create()\r
73                 {\r
74                         // SqlDateTime (DateTime)\r
75                         SqlDateTime CTest = new SqlDateTime (\r
76                                 new DateTime (2002, 5, 19, 3, 34, 0));\r
77                         Assert.AreEqual (2002, CTest.Value.Year, "#A01");\r
78                                 \r
79                         // SqlDateTime (int, int)\r
80                         CTest = new SqlDateTime (0, 0);\r
81                         \r
82                         // SqlDateTime (int, int, int)\r
83                         Assert.AreEqual (1900, CTest.Value.Year, "#A02");\r
84                         Assert.AreEqual (1, CTest.Value.Month, "#A03");\r
85                         Assert.AreEqual (1, CTest.Value.Day, "#A04");\r
86                         Assert.AreEqual (0, CTest.Value.Hour, "#A05");\r
87 \r
88                         // SqlDateTime (int, int, int, int, int, int)\r
89                         CTest = new SqlDateTime (5000, 12, 31);\r
90                         Assert.AreEqual (5000, CTest.Value.Year, "#A06");\r
91                         Assert.AreEqual (12, CTest.Value.Month, "#A07");\r
92                         Assert.AreEqual (31, CTest.Value.Day, "#A08");\r
93 \r
94                         // SqlDateTime (int, int, int, int, int, int, double)\r
95                         CTest = new SqlDateTime (1978, 5, 19, 3, 34, 0);\r
96                         Assert.AreEqual (1978, CTest.Value.Year, "#A09");\r
97                         Assert.AreEqual (5, CTest.Value.Month, "#A10");\r
98                         Assert.AreEqual (19, CTest.Value.Day, "#A11");\r
99                         Assert.AreEqual (3, CTest.Value.Hour, "#A12");\r
100                         Assert.AreEqual (34, CTest.Value.Minute, "#A13");\r
101                         Assert.AreEqual (0, CTest.Value.Second, "#A14");\r
102                         \r
103                         try {\r
104                                 CTest = new SqlDateTime (10000, 12, 31);\r
105                                 Assert.Fail ("#A15");\r
106                         } catch (Exception e) {\r
107                                 Assert.AreEqual (typeof (SqlTypeException), e.GetType (), "#A16");\r
108                         }\r
109                         \r
110                         // SqlDateTime (int, int, int, int, int, int, int)\r
111                         CTest = new SqlDateTime (1978, 5, 19, 3, 34, 0, 12);\r
112                         Assert.AreEqual (1978, CTest.Value.Year, "#A17");\r
113                         Assert.AreEqual (5, CTest.Value.Month, "#A18");\r
114                         Assert.AreEqual (19, CTest.Value.Day, "#A19");\r
115                         Assert.AreEqual (3, CTest.Value.Hour, "#A20");\r
116                         Assert.AreEqual (34, CTest.Value.Minute, "#A21");\r
117                         Assert.AreEqual (0, CTest.Value.Second, "#A22");\r
118                         Assert.AreEqual (0, CTest.Value.Millisecond, "#A23");\r
119                 }\r
120 \r
121                 // Test public fields\r
122                 [Test]\r
123                 public void PublicFields()\r
124                 {\r
125                         // MaxValue\r
126                         Assert.AreEqual (9999, SqlDateTime.MaxValue.Value.Year, "#B01");\r
127                         Assert.AreEqual (12, SqlDateTime.MaxValue.Value.Month, "#B02");\r
128                         Assert.AreEqual (31, SqlDateTime.MaxValue.Value.Day, "#B03");\r
129                         Assert.AreEqual (23, SqlDateTime.MaxValue.Value.Hour, "#B04");\r
130                         Assert.AreEqual (59, SqlDateTime.MaxValue.Value.Minute, "#B05");\r
131                         Assert.AreEqual (59, SqlDateTime.MaxValue.Value.Second, "#B06");\r
132 \r
133                         // MinValue\r
134                         Assert.AreEqual (1753, SqlDateTime.MinValue.Value.Year, "#B07");\r
135                         Assert.AreEqual (1, SqlDateTime.MinValue.Value.Month, "#B08");\r
136                         Assert.AreEqual (1, SqlDateTime.MinValue.Value.Day, "#B09");\r
137                         Assert.AreEqual (0, SqlDateTime.MinValue.Value.Hour, "#B10");\r
138                         Assert.AreEqual (0, SqlDateTime.MinValue.Value.Minute, "#B11");\r
139                         Assert.AreEqual (0, SqlDateTime.MinValue.Value.Second, "#B12");\r
140 \r
141                         // Null\r
142                         Assert.IsTrue (SqlDateTime.Null.IsNull, "#B13");\r
143 \r
144                         // SQLTicksPerHour\r
145                         Assert.AreEqual (1080000, SqlDateTime.SQLTicksPerHour, "#B14");\r
146 \r
147                         // SQLTicksPerMinute\r
148                         Assert.AreEqual (18000, SqlDateTime.SQLTicksPerMinute, "#B15");\r
149 \r
150                         // SQLTicksPerSecond\r
151                         Assert.AreEqual (300, SqlDateTime.SQLTicksPerSecond, "#B16");\r
152                 }\r
153 \r
154                 // Test properties\r
155                 [Test]\r
156                 public void Properties()\r
157                 {\r
158                         // DayTicks\r
159                         Assert.AreEqual (37546, Test1.DayTicks, "#C01");\r
160                         \r
161                         try {\r
162                                 int test = SqlDateTime.Null.DayTicks;\r
163                                 Assert.Fail ("#C02");\r
164                         } catch (Exception e) {\r
165                                 Assert.AreEqual (typeof (SqlNullValueException), e.GetType (), "#C03");\r
166                         }\r
167                                 \r
168                         // IsNull\r
169                         Assert.IsTrue (SqlDateTime.Null.IsNull, "#C04");\r
170                         Assert.IsTrue (!Test2.IsNull, "#C05");\r
171 \r
172                         // TimeTicks\r
173                         Assert.AreEqual (10440000, Test1.TimeTicks, "#C06");\r
174                         \r
175                         try {\r
176                                 int test = SqlDateTime.Null.TimeTicks;\r
177                                 Assert.Fail ("#C07");\r
178                         } catch (Exception e) {\r
179                                 Assert.AreEqual (typeof (SqlNullValueException), e.GetType (), "#C08");\r
180                         }\r
181 \r
182                         // Value\r
183                         Assert.AreEqual (2003, Test2.Value.Year, "#C09");\r
184                         Assert.AreEqual (2002, Test1.Value.Year, "#C10");\r
185                 }\r
186 \r
187                 // PUBLIC METHODS\r
188 \r
189                 [Test]          \r
190                 public void CompareTo()\r
191                 {\r
192                         SqlString TestString = new SqlString ("This is a test");\r
193 \r
194                         Assert.IsTrue (Test1.CompareTo (Test3) < 0, "#D01");\r
195                         Assert.IsTrue (Test2.CompareTo (Test1) > 0, "#D02");\r
196                         Assert.IsTrue (Test2.CompareTo (Test3) == 0, "#D03");\r
197                         Assert.IsTrue (Test1.CompareTo (SqlDateTime.Null) > 0, "#D04");\r
198 \r
199                         try {\r
200                                 Test1.CompareTo (TestString);\r
201                                 Assert.Fail("#D05");\r
202                         } catch(Exception e) {\r
203                                 Assert.AreEqual (typeof (ArgumentException), e.GetType (), "#D06");\r
204                         }\r
205                 }\r
206 \r
207                 [Test]\r
208                 public void EqualsMethods()\r
209                 {\r
210                         Assert.IsTrue (!Test1.Equals (Test2), "#E01");\r
211                         Assert.IsTrue (!Test2.Equals (new SqlString ("TEST")), "#E03");\r
212                         Assert.IsTrue (Test2.Equals (Test3), "#E04");\r
213 \r
214                         // Static Equals()-method\r
215                         Assert.IsTrue (SqlDateTime.Equals (Test2, Test3).Value, "#E05");\r
216                         Assert.IsTrue (!SqlDateTime.Equals (Test1, Test2).Value, "#E06");\r
217                 }\r
218 \r
219                 [Test]\r
220                 public void GetHashCodeTest()\r
221                 {\r
222                         // FIXME: Better way to test HashCode\r
223                         Assert.AreEqual (Test1.GetHashCode (), Test1.GetHashCode (), "#F01");\r
224                         Assert.IsTrue (Test2.GetHashCode () != Test1.GetHashCode (), "#F02");\r
225                 }\r
226 \r
227                 [Test]\r
228                 public void GetTypeTest()\r
229                 {\r
230                         Assert.AreEqual ("System.Data.SqlTypes.SqlDateTime", Test1.GetType ().ToString (), "#G01");\r
231                         Assert.AreEqual ("System.DateTime", Test1.Value.GetType ().ToString (), "#G02");\r
232                 }\r
233 \r
234                 [Test]\r
235                 public void Greaters()\r
236                 {\r
237                         // GreateThan ()\r
238                         Assert.IsTrue (!SqlDateTime.GreaterThan (Test1, Test2).Value, "#H01");\r
239                         Assert.IsTrue (SqlDateTime.GreaterThan (Test2, Test1).Value, "#H02");\r
240                         Assert.IsTrue (!SqlDateTime.GreaterThan (Test2, Test3).Value, "#H03");\r
241 \r
242                         // GreaterTharOrEqual ()\r
243                         Assert.IsTrue (!SqlDateTime.GreaterThanOrEqual (Test1, Test2).Value, "#H04");\r
244                         Assert.IsTrue (SqlDateTime.GreaterThanOrEqual (Test2, Test1).Value, "#H05");\r
245                         Assert.IsTrue (SqlDateTime.GreaterThanOrEqual (Test2, Test3).Value, "#H06");\r
246                 }\r
247 \r
248                 [Test]\r
249                 public void Lessers()\r
250                 {\r
251                         // LessThan()\r
252                         Assert.IsTrue (!SqlDateTime.LessThan (Test2, Test3).Value, "#I01");\r
253                         Assert.IsTrue (!SqlDateTime.LessThan (Test2, Test1).Value, "#I02");\r
254                         Assert.IsTrue (SqlDateTime.LessThan (Test1, Test3).Value, "#I03");\r
255 \r
256                         // LessThanOrEqual ()\r
257                         Assert.IsTrue (SqlDateTime.LessThanOrEqual (Test1, Test2).Value, "#I04");\r
258                         Assert.IsTrue (!SqlDateTime.LessThanOrEqual (Test2, Test1).Value, "#I05");\r
259                         Assert.IsTrue (SqlDateTime.LessThanOrEqual (Test3, Test2).Value, "#I06");\r
260                         Assert.IsTrue (SqlDateTime.LessThanOrEqual (Test1, SqlDateTime.Null).IsNull, "#I07");\r
261                 }\r
262 \r
263                 [Test]\r
264                 public void NotEquals()\r
265                 {\r
266                         Assert.IsTrue (SqlDateTime.NotEquals (Test1, Test2).Value, "#J01");\r
267                         Assert.IsTrue (SqlDateTime.NotEquals (Test3, Test1).Value, "#J02");\r
268                         Assert.IsTrue (!SqlDateTime.NotEquals (Test2, Test3).Value, "#J03");\r
269                         Assert.IsTrue (SqlDateTime.NotEquals (SqlDateTime.Null, Test2).IsNull, "#J04");\r
270                 }\r
271 \r
272                 [Test]\r
273                 public void Parse()\r
274                 {\r
275                         try {\r
276                                 SqlDateTime.Parse (null);\r
277                                 Assert.Fail ("#K01");\r
278                         } catch (Exception e) {\r
279                                 Assert.AreEqual (typeof (ArgumentNullException), e.GetType (), "#K02");\r
280                         }\r
281 \r
282                         try {\r
283                                 SqlDateTime.Parse ("not-a-number");\r
284                                 Assert.Fail ("#K03");\r
285                         } catch (Exception e) {\r
286                                 Assert.AreEqual (typeof (FormatException), e.GetType (), "#K04");\r
287                         }\r
288 \r
289                         SqlDateTime t1 = SqlDateTime.Parse ("02/25/2002");\r
290                         Assert.AreEqual (myTicks[0], t1.Value.Ticks, "#K05");\r
291 \r
292                         try {\r
293                                 t1 = SqlDateTime.Parse ("2002-02-25");\r
294                         } catch (Exception e) {\r
295                                 Assert.Fail ("#K06 " + e);\r
296                         }\r
297 \r
298                         // Thanks for Martin Baulig for these (DateTimeTest.cs)\r
299                         Assert.AreEqual (myTicks[0], t1.Value.Ticks, "#K07");\r
300                         t1 = SqlDateTime.Parse ("Monday, 25 February 2002");\r
301                         Assert.AreEqual (myTicks[0], t1.Value.Ticks, "#K08");\r
302                         t1 = SqlDateTime.Parse ("Monday, 25 February 2002 05:25");\r
303                         Assert.AreEqual (myTicks[3], t1.Value.Ticks, "#K09");\r
304                         t1 = SqlDateTime.Parse ("Monday, 25 February 2002 05:25:13");\r
305                         Assert.AreEqual (myTicks[4], t1.Value.Ticks, "#K10");\r
306                         t1 = SqlDateTime.Parse ("02/25/2002 05:25");\r
307                         Assert.AreEqual (myTicks[3], t1.Value.Ticks, "#K11");\r
308                         t1 = SqlDateTime.Parse ("02/25/2002 05:25:13");\r
309                         Assert.AreEqual (myTicks[4], t1.Value.Ticks, "#K12");\r
310                         t1 = SqlDateTime.Parse ("2002-02-25 04:25:13Z");\r
311                         t1 = TimeZone.CurrentTimeZone.ToUniversalTime(t1.Value);\r
312                         Assert.AreEqual (2002, t1.Value.Year, "#K13");\r
313                         Assert.AreEqual (02, t1.Value.Month, "#K14");\r
314                         Assert.AreEqual (25, t1.Value.Day, "#K15");\r
315                         Assert.AreEqual (04, t1.Value.Hour, "#K16");\r
316                         Assert.AreEqual (25, t1.Value.Minute, "#K17");\r
317                         Assert.AreEqual (13, t1.Value.Second, "#K18");\r
318                         \r
319                         SqlDateTime t2 = new SqlDateTime (DateTime.Today.Year, 2, 25);\r
320                         t1 = SqlDateTime.Parse ("February 25");\r
321                         Assert.AreEqual (t2.Value.Ticks, t1.Value.Ticks, "#K19");\r
322                         \r
323                         t2 = new SqlDateTime (DateTime.Today.Year, 2, 8);\r
324                         t1 = SqlDateTime.Parse ("February 08");\r
325                         Assert.AreEqual (t2.Value.Ticks, t1.Value.Ticks, "#K20");\r
326 \r
327                         t1 = SqlDateTime.Parse ("Mon, 25 Feb 2002 04:25:13 GMT");\r
328                         t1 = TimeZone.CurrentTimeZone.ToUniversalTime(t1.Value);\r
329                         Assert.AreEqual (2002, t1.Value.Year, "#K21");\r
330                         Assert.AreEqual (02, t1.Value.Month, "#K22");\r
331                         Assert.AreEqual (25, t1.Value.Day, "#K23");\r
332                         Assert.AreEqual (04, t1.Value.Hour, "#K24");\r
333                         Assert.AreEqual (25, t1.Value.Minute, "#K25");\r
334                         Assert.AreEqual (13, t1.Value.Second, "#K26");\r
335 \r
336                         t1 = SqlDateTime.Parse ("2002-02-25T05:25:13");\r
337                         Assert.AreEqual (myTicks[4], t1.Value.Ticks, "#K27");\r
338 \r
339                         t2 = DateTime.Today + new TimeSpan (5,25,0);\r
340                         t1 = SqlDateTime.Parse ("05:25");\r
341                         Assert.AreEqual(t2.Value.Ticks, t1.Value.Ticks, "#K28");\r
342 \r
343                         t2 = DateTime.Today + new TimeSpan (5,25,13);\r
344                         t1 = SqlDateTime.Parse ("05:25:13");\r
345                         Assert.AreEqual(t2.Value.Ticks, t1.Value.Ticks, "#K29");\r
346 \r
347                         t2 = new SqlDateTime (2002, 2, 1);\r
348                         t1 = SqlDateTime.Parse ("2002 February");\r
349                         Assert.AreEqual (t2.Value.Ticks, t1.Value.Ticks, "#K30");\r
350                         \r
351                         t2 = new SqlDateTime (2002, 2, 1);\r
352                         t1 = SqlDateTime.Parse ("2002 February");\r
353                         Assert.AreEqual (t2.Value.Ticks, t1.Value.Ticks, "#K31");\r
354                         \r
355                         t2 = new SqlDateTime (DateTime.Today.Year, 2, 8);\r
356                         t1 = SqlDateTime.Parse ("February 8");\r
357                         \r
358                         Assert.AreEqual (t2.Value.Ticks, t1.Value.Ticks, "#K32");\r
359                 }\r
360 \r
361                 [Test]\r
362                 [Ignore ("This test is locale dependent.")]\r
363                 public void ToStringTest()\r
364                 {\r
365                         //\r
366                         // Thanks for Marting Baulig for these (DateTimeTest.cs)\r
367                         //\r
368                         \r
369                         SqlDateTime t1 = new SqlDateTime (2002, 2, 25, 5, 25, 13);\r
370                         SqlDateTime t2 = new SqlDateTime (2002, 2, 25, 15, 25, 13);\r
371                         \r
372                         // Standard patterns\r
373                         Assert.AreEqual("2/25/2002 5:25:13 AM", t1.ToString (), "L01");\r
374                         Assert.AreEqual((SqlString)"2/25/2002 5:25:13 AM", t1.ToSqlString (), "L02");\r
375                 }\r
376 \r
377                 // OPERATORS\r
378                 [Test]\r
379                 public void ArithmeticOperators()\r
380                 {\r
381                         TimeSpan TestSpan = new TimeSpan (20, 1, 20, 20);\r
382                         SqlDateTime ResultDateTime;\r
383 \r
384                         // "+"-operator\r
385                         ResultDateTime = Test1 + TestSpan;\r
386                         Assert.AreEqual (2002, ResultDateTime.Value.Year, "#M01");\r
387                         Assert.AreEqual (8, ResultDateTime.Value.Day, "#M02");\r
388                         Assert.AreEqual (11, ResultDateTime.Value.Hour, "#M03");\r
389                         Assert.AreEqual (0, ResultDateTime.Value.Minute, "#M04");\r
390                         Assert.AreEqual (20, ResultDateTime.Value.Second, "#M05");\r
391                         Assert.IsTrue ((SqlDateTime.Null + TestSpan).IsNull, "#M06");\r
392 \r
393                         try {\r
394                                 ResultDateTime = SqlDateTime.MaxValue + TestSpan;\r
395                                 Assert.Fail ("#M07");\r
396                         } catch (Exception e) {\r
397                                 Assert.AreEqual (typeof (ArgumentOutOfRangeException), e.GetType (), "#M08");\r
398                         }\r
399 \r
400                         // "-"-operator\r
401                         ResultDateTime = Test1 - TestSpan;\r
402                         Assert.AreEqual (2002, ResultDateTime.Value.Year, "#M09");\r
403                         Assert.AreEqual (29, ResultDateTime.Value.Day, "#M10");\r
404                         Assert.AreEqual (8, ResultDateTime.Value.Hour, "#M11");\r
405                         Assert.AreEqual (19, ResultDateTime.Value.Minute, "#M12");\r
406                         Assert.AreEqual (40, ResultDateTime.Value.Second, "#M13");\r
407                         Assert.IsTrue ((SqlDateTime.Null - TestSpan).IsNull, "#M14");\r
408                         \r
409                         try {\r
410                                 ResultDateTime = SqlDateTime.MinValue - TestSpan;\r
411                                 Assert.Fail ("#M15");\r
412                         } catch  (Exception e) {\r
413                                 Assert.AreEqual (typeof (SqlTypeException), e.GetType (), "#M16");\r
414                         }\r
415                 }\r
416 \r
417                 [Test]\r
418                 public void ThanOrEqualOperators()\r
419                 {\r
420                         // == -operator\r
421                         Assert.IsTrue ((Test2 == Test3).Value, "#N01");\r
422                         Assert.IsTrue (!(Test1 == Test2).Value, "#N02");\r
423                         Assert.IsTrue ((Test1 == SqlDateTime.Null).IsNull, "#N03");\r
424                         \r
425                         // != -operator\r
426                         Assert.IsTrue (!(Test2 != Test3).Value, "#N04");\r
427                         Assert.IsTrue ((Test1 != Test3).Value, "#N05");\r
428                         Assert.IsTrue ((Test1 != SqlDateTime.Null).IsNull, "#N06");\r
429 \r
430                         // > -operator\r
431                         Assert.IsTrue ((Test2 > Test1).Value, "#N07");\r
432                         Assert.IsTrue (!(Test3 > Test2).Value, "#N08");\r
433                         Assert.IsTrue ((Test1 > SqlDateTime.Null).IsNull, "#N09");\r
434 \r
435                         // >=  -operator\r
436                         Assert.IsTrue (!(Test1 >= Test3).Value, "#N10");\r
437                         Assert.IsTrue ((Test3 >= Test1).Value, "#N11");\r
438                         Assert.IsTrue ((Test2 >= Test3).Value, "#N12");\r
439                         Assert.IsTrue ((Test1 >= SqlDateTime.Null).IsNull, "#N13");\r
440 \r
441                         // < -operator\r
442                         Assert.IsTrue (!(Test2 < Test1).Value, "#N14");\r
443                         Assert.IsTrue ((Test1 < Test3).Value, "#N15");\r
444                         Assert.IsTrue (!(Test2 < Test3).Value, "#N16");\r
445                         Assert.IsTrue ((Test1 < SqlDateTime.Null).IsNull, "#N17");\r
446 \r
447                         // <= -operator\r
448                         Assert.IsTrue ((Test1 <= Test3).Value, "#N18");\r
449                         Assert.IsTrue (!(Test3 <= Test1).Value, "#N19");\r
450                         Assert.IsTrue ((Test2 <= Test3).Value, "#N20");\r
451                         Assert.IsTrue ((Test1 <= SqlDateTime.Null).IsNull, "#N21");\r
452                 }\r
453 \r
454                 [Test]\r
455                 public void SqlDateTimeToDateTime()\r
456                 {\r
457                         Assert.AreEqual (2002, ((DateTime)Test1).Year, "O01");\r
458                         Assert.AreEqual (2003, ((DateTime)Test2).Year, "O03");\r
459                         Assert.AreEqual (10, ((DateTime)Test1).Month, "O04");\r
460                         Assert.AreEqual (19, ((DateTime)Test1).Day, "O05");\r
461                         Assert.AreEqual (9, ((DateTime)Test1).Hour, "O06");\r
462                         Assert.AreEqual (40, ((DateTime)Test1).Minute, "O07");\r
463                         Assert.AreEqual (0, ((DateTime)Test1).Second, "O08");\r
464                 }\r
465 \r
466                 [Test]\r
467                 public void SqlStringToSqlDateTime()\r
468                 {\r
469 \r
470                         SqlString TestString = new SqlString ("02/25/2002");\r
471                         SqlDateTime t1 = (SqlDateTime)TestString;\r
472 \r
473                         Assert.AreEqual (myTicks[0], t1.Value.Ticks, "#P01");\r
474 \r
475                         // Thanks for Martin Baulig for these (DateTimeTest.cs)\r
476                         Assert.AreEqual (myTicks[0], t1.Value.Ticks, "#P02");\r
477                         t1 = (SqlDateTime) new SqlString ("Monday, 25 February 2002");\r
478                         Assert.AreEqual (myTicks[0], t1.Value.Ticks, "#P04");\r
479                         t1 = (SqlDateTime) new SqlString ("Monday, 25 February 2002 05:25");\r
480                         Assert.AreEqual (myTicks[3], t1.Value.Ticks, "#P05");\r
481                         t1 = (SqlDateTime) new SqlString ("Monday, 25 February 2002 05:25:13");\r
482                         Assert.AreEqual (myTicks[4], t1.Value.Ticks, "#P05");\r
483                         t1 = (SqlDateTime) new SqlString ("02/25/2002 05:25");\r
484                         Assert.AreEqual (myTicks[3], t1.Value.Ticks, "#P06");\r
485                         t1 = (SqlDateTime) new SqlString ("02/25/2002 05:25:13");\r
486                         Assert.AreEqual (myTicks[4], t1.Value.Ticks, "#P07");\r
487                         t1 = (SqlDateTime) new SqlString ("2002-02-25 04:25:13Z");\r
488                         t1 = TimeZone.CurrentTimeZone.ToUniversalTime(t1.Value);\r
489                         Assert.AreEqual (2002, t1.Value.Year, "#P08");\r
490                         Assert.AreEqual (02, t1.Value.Month, "#P09");\r
491                         Assert.AreEqual (25, t1.Value.Day, "#P10");\r
492                         Assert.AreEqual (04, t1.Value.Hour, "#P11");\r
493                         Assert.AreEqual (25, t1.Value.Minute, "#P12");\r
494                         Assert.AreEqual (13, t1.Value.Second, "#P13");\r
495                         \r
496                         SqlDateTime t2 = new SqlDateTime (DateTime.Today.Year, 2, 25);\r
497                         t1 = (SqlDateTime) new SqlString ("February 25");\r
498                         Assert.AreEqual (t2.Value.Ticks, t1.Value.Ticks, "#P14");\r
499                         \r
500                         t2 = new SqlDateTime (DateTime.Today.Year, 2, 8);\r
501                         t1 = (SqlDateTime) new SqlString ("February 08");\r
502                         Assert.AreEqual (t2.Value.Ticks, t1.Value.Ticks, "#P15");\r
503 \r
504                         t1 = (SqlDateTime) new SqlString ("Mon, 25 Feb 2002 04:25:13 GMT");\r
505                         t1 = TimeZone.CurrentTimeZone.ToUniversalTime(t1.Value);\r
506                         Assert.AreEqual (2002, t1.Value.Year, "#P16");\r
507                         Assert.AreEqual (02, t1.Value.Month, "#P17");\r
508                         Assert.AreEqual (25, t1.Value.Day, "#P18");\r
509                         Assert.AreEqual (04, t1.Value.Hour, "#P19");\r
510                         Assert.AreEqual (25, t1.Value.Minute, "#P20");\r
511                         Assert.AreEqual (13, t1.Value.Second, "#P21");\r
512 \r
513                         t1 = (SqlDateTime) new SqlString ("2002-02-25T05:25:13");\r
514                         Assert.AreEqual (myTicks[4], t1.Value.Ticks, "#P22");\r
515 \r
516                         t2 = DateTime.Today + new TimeSpan (5,25,0);\r
517                         t1 = (SqlDateTime) new SqlString ("05:25");\r
518                         Assert.AreEqual(t2.Value.Ticks, t1.Value.Ticks, "#P23");\r
519 \r
520                         t2 = DateTime.Today + new TimeSpan (5,25,13);\r
521                         t1 = (SqlDateTime) new SqlString ("05:25:13");\r
522                         Assert.AreEqual(t2.Value.Ticks, t1.Value.Ticks, "#P24");\r
523 \r
524                         t2 = new SqlDateTime (2002, 2, 1);\r
525                         t1 = (SqlDateTime) new SqlString ("2002 February");\r
526                         Assert.AreEqual (t2.Value.Ticks, t1.Value.Ticks, "#P25");\r
527                         \r
528                         t2 = new SqlDateTime (2002, 2, 1);\r
529                         t1 = (SqlDateTime) new SqlString ("2002 February");\r
530                         Assert.AreEqual (t2.Value.Ticks, t1.Value.Ticks, "#P26");\r
531                         \r
532                         t2 = new SqlDateTime (DateTime.Today.Year, 2, 8);\r
533                         t1 = (SqlDateTime) new SqlString ("February 8");\r
534                         \r
535                         Assert.AreEqual (t2.Value.Ticks, t1.Value.Ticks, "#P27");\r
536                 }\r
537 \r
538                 [Test]\r
539                 public void DateTimeToSqlDateTime()\r
540                 {\r
541                         DateTime DateTimeTest = new DateTime (2002, 10, 19, 11, 53, 4);\r
542                         SqlDateTime Result = (SqlDateTime)DateTimeTest;\r
543                         Assert.AreEqual (2002, Result.Value.Year, "#Q01");\r
544                         Assert.AreEqual (10, Result.Value.Month, "#Q02");\r
545                         Assert.AreEqual (19, Result.Value.Day, "#Q03");\r
546                         Assert.AreEqual (11, Result.Value.Hour, "#Q04");\r
547                         Assert.AreEqual (53, Result.Value.Minute, "#Q05");\r
548                         Assert.AreEqual (4, Result.Value.Second, "#Q06");\r
549                 }\r
550 \r
551                 [Test]\r
552                 public void TicksRoundTrip ()\r
553                 {\r
554                         SqlDateTime d1 = new SqlDateTime (2007, 05, 04, 18, 02, 40, 398.25);\r
555                         SqlDateTime d2 = new SqlDateTime (d1.DayTicks, d1.TimeTicks);\r
556 \r
557                         Assert.AreEqual (39204, d1.DayTicks, "#R01");\r
558                         Assert.AreEqual (19488119, d1.TimeTicks, "#R02");\r
559                         Assert.AreEqual (633138985603970000, d1.Value.Ticks, "#R03");\r
560                         Assert.AreEqual (d1.DayTicks, d2.DayTicks, "#R04");\r
561                         Assert.AreEqual (d1.TimeTicks, d2.TimeTicks, "#R05");\r
562                         Assert.AreEqual (d1.Value.Ticks, d2.Value.Ticks, "#R06");\r
563                         Assert.AreEqual (d1, d2, "#R07");\r
564                 }\r
565 \r
566                 [Test]\r
567                 public void EffingBilisecond ()\r
568                 {\r
569                         SqlDateTime d1 = new SqlDateTime (2007, 05, 04, 18, 02, 40, 398252);\r
570 \r
571                         Assert.AreEqual (39204, d1.DayTicks, "#S01");\r
572                         Assert.AreEqual (19488119, d1.TimeTicks, "#S02");\r
573                         Assert.AreEqual (633138985603970000, d1.Value.Ticks, "#R03");\r
574                 }\r
575 \r
576 #if NET_2_0\r
577                 [Test]\r
578                 public void GetXsdTypeTest ()\r
579                 {\r
580                         XmlQualifiedName qualifiedName = SqlDateTime.GetXsdType (null);\r
581                         NUnit.Framework.Assert.AreEqual ("dateTime", qualifiedName.Name, "#A01");\r
582                 }\r
583 #endif\r
584         }\r
585 }\r
586 \r