2002-06-07 Nick Drochak <ndrochak@gol.com>
[mono.git] / mcs / class / corlib / Test / System / DateTimeTest.cs
1 //\r
2 // DateTimeTest.cs - NUnit Test Cases for the System.DateTime struct\r
3 //\r
4 // author:\r
5 //   Martin Baulig (martin@gnome.org)\r
6 //\r
7 //   (C) 2002 Free Software Foundation\r
8 //\r
9 \r
10 using NUnit.Framework;\r
11 using System;\r
12 using System.Threading;\r
13 using System.Globalization;\r
14 \r
15 namespace MonoTests.System\r
16 {\r
17 \r
18 public class DateTimeTest : TestCase\r
19 {\r
20         long[] myTicks = {\r
21                 631501920000000000L,    // 25 Feb 2002 - 00:00:00\r
22                 631502475130080000L,    // 25 Feb 2002 - 15:25:13,8\r
23                 631502115130080000L,    // 25 Feb 2002 - 05:25:13,8\r
24                 631502115000000000L,    // 25 Feb 2002 - 05:25:00\r
25                 631502115130000000L,    // 25 Feb 2002 - 05:25:13\r
26                 631502079130000000L,    // 25 Feb 2002 - 04:25:13\r
27                 629197085770000000L     // 06 Nov 1994 - 08:49:37 \r
28         };\r
29 \r
30         public DateTimeTest() : base ("MonoTests.System.DateTimeTest testcase") {}\r
31         public DateTimeTest (string name): base(name) {}\r
32 \r
33         public static ITest Suite\r
34         {\r
35                 get {\r
36                         return new TestSuite (typeof (DateTimeTest));\r
37                 }\r
38         }\r
39         \r
40         public void TestCtors ()\r
41         {\r
42                 DateTime t1 = new DateTime (2002,2,25);\r
43                 AssertEquals("A01", myTicks[0], t1.Ticks);\r
44                 DateTime t2 = new DateTime (2002,2,25,15,25,13,8);\r
45                 AssertEquals("A02", myTicks[1], t2.Ticks);\r
46                 AssertEquals("A03", myTicks[0], t2.Date.Ticks);\r
47                 AssertEquals("A04", 2002, t2.Year);\r
48                 AssertEquals("A05", 2, t2.Month);\r
49                 AssertEquals("A06", 25, t2.Day);\r
50                 AssertEquals("A07", 15, t2.Hour);\r
51                 AssertEquals("A08", 25, t2.Minute);\r
52                 AssertEquals("A09", 13, t2.Second);\r
53                 AssertEquals("A10", 8, t2.Millisecond);\r
54                 DateTime t3 = new DateTime (2002,2,25,5,25,13,8);\r
55                 AssertEquals("A11", myTicks[2], t3.Ticks);\r
56         }\r
57 \r
58         public void TestToString ()\r
59         {\r
60                 DateTime t1 = new DateTime (myTicks[2]);\r
61                 DateTime t2 = new DateTime (myTicks[1]);\r
62                 // Standard patterns\r
63                 AssertEquals("B01", "02/25/2002", t1.ToString ("d"));\r
64                 AssertEquals("B02", "Monday, 25 February 2002", t1.ToString ("D"));\r
65                 AssertEquals("B03", "Monday, 25 February 2002 05:25", t1.ToString ("f"));\r
66                 AssertEquals("B04", "Monday, 25 February 2002 05:25:13", t1.ToString ("F"));\r
67                 AssertEquals("B05", "02/25/2002 05:25", t1.ToString ("g"));\r
68                 AssertEquals("B06", "02/25/2002 05:25:13", t1.ToString ("G"));\r
69                 AssertEquals("B07", "February 25", t1.ToString ("m"));\r
70                 AssertEquals("B08", "February 25", t1.ToString ("M"));\r
71                 AssertEquals("B09", "Mon, 25 Feb 2002 04:25:13 GMT", t1.ToString ("r"));\r
72                 AssertEquals("B10", "Mon, 25 Feb 2002 04:25:13 GMT", t1.ToString ("R"));\r
73                 AssertEquals("B11", "2002-02-25T05:25:13", t1.ToString ("s"));\r
74                 AssertEquals("B12", "05:25", t1.ToString ("t"));\r
75                 AssertEquals("B13", "05:25:13", t1.ToString ("T"));\r
76                 AssertEquals("B14", "2002-02-25 04:25:13Z", t1.ToString ("u"));\r
77                 AssertEquals("B15", "Monday, 25 February 2002 04:25:13", t1.ToString ("U"));\r
78                 AssertEquals("B16", "2002 February", t1.ToString ("y"));\r
79                 AssertEquals("B17", "2002 February", t1.ToString ("Y"));\r
80 \r
81                 // Custom patterns\r
82                 AssertEquals("C01", "25", t1.ToString ("%d"));\r
83                 AssertEquals("C02", "25", t1.ToString ("dd"));\r
84                 AssertEquals("C03", "Mon", t1.ToString ("ddd"));\r
85                 AssertEquals("C04", "Monday", t1.ToString ("dddd"));\r
86                 AssertEquals("C05", "2", t1.ToString ("%M"));\r
87                 AssertEquals("C06", "02", t1.ToString ("MM"));\r
88                 AssertEquals("C07", "Feb", t1.ToString ("MMM"));\r
89                 AssertEquals("C08", "February", t1.ToString ("MMMM"));\r
90                 AssertEquals("C09", "2", t1.ToString ("%y"));\r
91                 AssertEquals("C10", "02", t1.ToString ("yy"));\r
92                 AssertEquals("C11", "2002", t1.ToString ("yyyy"));\r
93                 AssertEquals("C12", "5", t1.ToString ("%h"));\r
94                 AssertEquals("C13", "05", t1.ToString ("hh"));\r
95                 AssertEquals("C14", "3", t2.ToString ("%h"));\r
96                 AssertEquals("C15", "03", t2.ToString ("hh"));\r
97                 AssertEquals("C16", "15", t2.ToString ("%H"));\r
98                 AssertEquals("C17", "15", t2.ToString ("HH"));\r
99                 AssertEquals("C18", "25", t2.ToString ("%m"));\r
100                 AssertEquals("C19", "25", t2.ToString ("mm"));\r
101                 AssertEquals("C20", "13", t2.ToString ("%s"));\r
102                 AssertEquals("C21", "13", t2.ToString ("ss"));\r
103                 AssertEquals("C22", "A", t1.ToString ("%t"));\r
104                 AssertEquals("C23", "P", t2.ToString ("%t"));\r
105                 AssertEquals("C24", "AM", t1.ToString ("tt"));\r
106                 AssertEquals("C25", "PM", t2.ToString ("tt"));\r
107                 AssertEquals("C26", "+1", t1.ToString ("%z"));\r
108                 AssertEquals("C27", "+01", t1.ToString ("zz"));\r
109                 AssertEquals("C28", "+01:00", t1.ToString ("zzz"));\r
110                 AssertEquals("C29", " : ", t1.ToString (" : "));\r
111                 AssertEquals("C30", " / ", t1.ToString (" / "));\r
112                 AssertEquals("C31", " yyy ", t1.ToString (" 'yyy' "));\r
113                 AssertEquals("C32", " d", t1.ToString (" \\d"));\r
114         }\r
115 \r
116         public void TestParseExact ()\r
117         {\r
118                 // Standard patterns\r
119                 DateTime t1 = DateTime.ParseExact ("02/25/2002", "d", null);\r
120                 AssertEquals ("D01", myTicks[0], t1.Ticks);\r
121                 t1 = DateTime.ParseExact ("Monday, 25 February 2002", "D", null);\r
122                 AssertEquals ("D02", myTicks[0], t1.Ticks);\r
123                 t1 = DateTime.ParseExact ("Monday, 25 February 2002 05:25", "f", null);\r
124                 AssertEquals ("D03", myTicks[3], t1.Ticks);\r
125                 t1 = DateTime.ParseExact ("Monday, 25 February 2002 05:25:13", "F", null);\r
126                 AssertEquals ("D04", myTicks[4], t1.Ticks);\r
127                 t1 = DateTime.ParseExact ("02/25/2002 05:25", "g", null);\r
128                 AssertEquals ("D05", myTicks[3], t1.Ticks);\r
129                 t1 = DateTime.ParseExact ("02/25/2002 05:25:13", "G", null);\r
130                 AssertEquals ("D06", myTicks[4], t1.Ticks);\r
131                 t1 = DateTime.ParseExact ("2002-02-25 04:25:13Z", "u", null);\r
132                 AssertEquals ("D07", myTicks[4], t1.Ticks);\r
133                 t1 = DateTime.ParseExact ("Monday, 25 February 2002 04:25:13", "U", null);\r
134                 AssertEquals ("D08", myTicks[4], t1.Ticks);\r
135 \r
136                 DateTime t2 = new DateTime (DateTime.Today.Year, 2, 25);\r
137                 t1 = DateTime.ParseExact ("February 25", "m", null);\r
138                 AssertEquals ("D09", t2.Ticks, t1.Ticks);\r
139 \r
140                 t2 = new DateTime (DateTime.Today.Year, 2, 25);\r
141                 t1 = DateTime.ParseExact ("February 25", "M", null);\r
142                 AssertEquals ("D10", t2.Ticks, t1.Ticks);\r
143 \r
144                 t1 = DateTime.ParseExact ("Mon, 25 Feb 2002 04:25:13 GMT", "r", null);\r
145                 AssertEquals ("D11", myTicks[4], t1.Ticks);\r
146                 t1 = DateTime.ParseExact ("Mon, 25 Feb 2002 04:25:13 GMT", "R", null);\r
147                 AssertEquals ("D12", myTicks[4], t1.Ticks);\r
148 \r
149                 t1 = DateTime.ParseExact ("2002-02-25T05:25:13", "s", null);\r
150                 AssertEquals ("D13", myTicks[4], t1.Ticks);\r
151 \r
152                 t2 = DateTime.Today + new TimeSpan (5,25,0);\r
153                 t1 = DateTime.ParseExact ("05:25", "t", null);\r
154                 AssertEquals("D14", t2.Ticks, t1.Ticks);\r
155 \r
156                 t2 = DateTime.Today + new TimeSpan (5,25,13);\r
157                 t1 = DateTime.ParseExact ("05:25:13", "T", null);\r
158                 AssertEquals("D15", t2.Ticks, t1.Ticks);\r
159 \r
160                 t2 = new DateTime (2002, 2, 1);\r
161                 t1 = DateTime.ParseExact ("2002 February", "y", null);\r
162                 AssertEquals ("D16", t2.Ticks, t1.Ticks);\r
163 \r
164                 t2 = new DateTime (2002, 2, 1);\r
165                 t1 = DateTime.ParseExact ("2002 February", "Y", null);\r
166                 AssertEquals ("D16", t2.Ticks, t1.Ticks);\r
167 \r
168                 // Custom patterns\r
169                 t2 = new DateTime (2002, 1, 25);\r
170                 t1 = DateTime.ParseExact ("25", "%d", null);\r
171                 AssertEquals ("E01", t2.Ticks, t1.Ticks);\r
172                 t1 = DateTime.ParseExact ("25", "dd", null);\r
173                 AssertEquals ("E02", t2.Ticks, t1.Ticks);\r
174 \r
175                 t2 = new DateTime (DateTime.Today.Year, 2, 1);\r
176                 t1 = DateTime.ParseExact ("2", "%M", null);\r
177                 AssertEquals ("E03", t2.Ticks, t1.Ticks);\r
178                 t1 = DateTime.ParseExact ("02", "MM", null);\r
179                 AssertEquals ("E04", t2.Ticks, t1.Ticks);\r
180                 t1 = DateTime.ParseExact ("Feb", "MMM", null);\r
181                 AssertEquals ("E05", t2.Ticks, t1.Ticks);\r
182                 t1 = DateTime.ParseExact ("February", "MMMM", null);\r
183                 AssertEquals ("E06", t2.Ticks, t1.Ticks);\r
184 \r
185                 t2 = new DateTime (2005, 1, 1);\r
186                 t1 = DateTime.ParseExact ("5", "%y", null);\r
187                 AssertEquals ("E07", t2.Ticks, t1.Ticks);\r
188                 t1 = DateTime.ParseExact ("05", "yy", null);\r
189                 AssertEquals ("E08", t2.Ticks, t1.Ticks);\r
190                 t1 = DateTime.ParseExact ("2005", "yyyy", null);\r
191                 AssertEquals ("E09", t2.Ticks, t1.Ticks);\r
192 \r
193                 t2 = DateTime.Today + new TimeSpan (5, 0, 0);\r
194                 t1 = DateTime.ParseExact ("5A", "ht", null);\r
195                 AssertEquals ("E10", t2.Ticks, t1.Ticks);\r
196                 t1 = DateTime.ParseExact ("05A", "hht", null);\r
197                 AssertEquals ("E11", t2.Ticks, t1.Ticks);\r
198 \r
199                 t2 = DateTime.Today + new TimeSpan (15, 0, 0);\r
200                 t1 = DateTime.ParseExact ("3P", "ht", null);\r
201                 AssertEquals ("E12", t2.Ticks, t1.Ticks);\r
202                 t1 = DateTime.ParseExact ("03P", "hht", null);\r
203                 AssertEquals ("E13", t2.Ticks, t1.Ticks);\r
204 \r
205                 t2 = DateTime.Today + new TimeSpan (5, 0, 0);\r
206                 t1 = DateTime.ParseExact ("5", "%H", null);\r
207                 AssertEquals ("E14", t2.Ticks, t1.Ticks);\r
208 \r
209                 t2 = DateTime.Today + new TimeSpan (15, 0, 0);\r
210                 t1 = DateTime.ParseExact ("15", "%H", null);\r
211                 AssertEquals ("E15", t2.Ticks, t1.Ticks);\r
212                 t1 = DateTime.ParseExact ("15", "HH", null);\r
213                 AssertEquals ("E16", t2.Ticks, t1.Ticks);\r
214 \r
215                 // Time zones\r
216                 t2 = DateTime.Today + new TimeSpan (17, 18, 0);\r
217                 t1 = DateTime.ParseExact ("11:18AM -5", "h:mmtt z", null);\r
218                 AssertEquals ("F01", t2.Ticks, t1.Ticks);\r
219                 t1 = DateTime.ParseExact ("11:18AM -05:00", "h:mmtt zzz", null);\r
220                 AssertEquals ("F02", t2.Ticks, t1.Ticks);\r
221                 t1 = DateTime.ParseExact ("7:18PM +03", "h:mmtt zz", null);\r
222                 AssertEquals ("F03", t2.Ticks, t1.Ticks);\r
223                 t1 = DateTime.ParseExact ("7:48PM +03:30", "h:mmtt zzz", null);\r
224                 AssertEquals ("F04", t2.Ticks, t1.Ticks);\r
225 \r
226                 // Options\r
227                 t2 = DateTime.Today + new TimeSpan (16, 18, 0);\r
228                 t1 = DateTime.ParseExact ("11:18AM -5", "h:mmtt z",\r
229                                           null, DateTimeStyles.AdjustToUniversal);\r
230                 AssertEquals ("G01", t2.Ticks, t1.Ticks);\r
231 \r
232                 t1 = DateTime.ParseExact ("Monday, 25 February 2002 05:25:13", "F",\r
233                                           null, DateTimeStyles.AdjustToUniversal);\r
234                 AssertEquals ("G02", myTicks[4], t1.Ticks);\r
235                 t1 = DateTime.ParseExact ("Monday, 25 February 2002 05:25:13",\r
236                                           "dddd, dd MMMM yyyy HH:mm:ss",\r
237                                           null, DateTimeStyles.AdjustToUniversal);\r
238                 AssertEquals ("G03", myTicks[4], t1.Ticks);\r
239 \r
240                 t1 = DateTime.ParseExact ("02/25/2002", "d", null,\r
241                                           DateTimeStyles.AllowWhiteSpaces);\r
242                 AssertEquals ("G04", myTicks[0], t1.Ticks);\r
243 \r
244                 t1 = DateTime.ParseExact ("    02/25/2002", "d", null,\r
245                                           DateTimeStyles.AllowLeadingWhite);\r
246                 AssertEquals ("G05", myTicks[0], t1.Ticks);\r
247 \r
248                 t1 = DateTime.ParseExact ("02/25/2002    ", "d", null,\r
249                                           DateTimeStyles.AllowTrailingWhite);\r
250                 AssertEquals ("G06", myTicks[0], t1.Ticks);\r
251 \r
252                 t1 = DateTime.ParseExact ("  02 / 25 / 2002    ", "d", null,\r
253                                           DateTimeStyles.AllowWhiteSpaces);\r
254                 AssertEquals ("G07", myTicks[0], t1.Ticks);\r
255 \r
256                 // Multi Custom Patterns\r
257 \r
258                 string rfc1123_date = "r";\r
259                 string rfc850_date = "dddd, dd-MMM-yy HH:mm:ss G\\MT";\r
260                 string asctime_date = "ddd MMM d HH:mm:ss yyyy";\r
261                 string [] formats = new string [] {rfc1123_date, rfc850_date, asctime_date};\r
262                 CultureInfo enUS = new CultureInfo("en-US", false);\r
263                 t1 = DateTime.ParseExact ("Sun, 06 Nov 1994 08:49:37 GMT", formats, enUS, \r
264                                         DateTimeStyles.AllowWhiteSpaces);\r
265                 AssertEquals ("M01", myTicks[6], t1.Ticks);\r
266                 t1 = DateTime.ParseExact ("Sunday, 06-Nov-94 08:49:37 GMT", formats, enUS, \r
267                                         DateTimeStyles.AllowWhiteSpaces);\r
268                 AssertEquals ("M02", myTicks[6], t1.Ticks);\r
269                 t1 = DateTime.ParseExact ("Sun Nov  6 08:49:37 1994", formats, enUS, \r
270                                         DateTimeStyles.AllowWhiteSpaces);\r
271                 AssertEquals ("M03", myTicks[6], t1.Ticks);\r
272         }\r
273 \r
274         public void TestParse ()\r
275         {\r
276                 // Standard patterns\r
277                 DateTime t1 = DateTime.Parse ("02/25/2002");\r
278                 AssertEquals ("H01", myTicks[0], t1.Ticks);\r
279                 t1 = DateTime.Parse ("Monday, 25 February 2002");\r
280                 AssertEquals ("H02", myTicks[0], t1.Ticks);\r
281                 t1 = DateTime.Parse ("Monday, 25 February 2002 05:25");\r
282                 AssertEquals ("H03", myTicks[3], t1.Ticks);\r
283                 t1 = DateTime.Parse ("Monday, 25 February 2002 05:25:13");\r
284                 AssertEquals ("H04", myTicks[4], t1.Ticks);\r
285                 t1 = DateTime.Parse ("02/25/2002 05:25");\r
286                 AssertEquals ("H05", myTicks[3], t1.Ticks);\r
287                 t1 = DateTime.Parse ("02/25/2002 05:25:13");\r
288                 AssertEquals ("H06", myTicks[4], t1.Ticks);\r
289                 t1 = DateTime.Parse ("2002-02-25 04:25:13Z");\r
290                 AssertEquals ("H07", myTicks[4], t1.Ticks);\r
291 \r
292                 DateTime t2 = new DateTime (DateTime.Today.Year, 2, 25);\r
293                 t1 = DateTime.Parse ("February 25");\r
294                 AssertEquals ("H08", t2.Ticks, t1.Ticks);\r
295 \r
296                 t2 = new DateTime (DateTime.Today.Year, 2, 8);\r
297                 t1 = DateTime.Parse ("February 08");\r
298                 AssertEquals ("H09", t2.Ticks, t1.Ticks);\r
299 \r
300                 t1 = DateTime.Parse ("Mon, 25 Feb 2002 04:25:13 GMT");\r
301                 AssertEquals ("H10", myTicks[4], t1.Ticks);\r
302 \r
303                 t1 = DateTime.Parse ("2002-02-25T05:25:13");\r
304                 AssertEquals ("H11", myTicks[4], t1.Ticks);\r
305 \r
306                 t2 = DateTime.Today + new TimeSpan (5,25,0);\r
307                 t1 = DateTime.Parse ("05:25");\r
308                 AssertEquals("H12", t2.Ticks, t1.Ticks);\r
309 \r
310                 t2 = DateTime.Today + new TimeSpan (5,25,13);\r
311                 t1 = DateTime.Parse ("05:25:13");\r
312                 AssertEquals("H13", t2.Ticks, t1.Ticks);\r
313 \r
314                 t2 = new DateTime (2002, 2, 1);\r
315                 t1 = DateTime.Parse ("2002 February");\r
316                 AssertEquals ("H14", t2.Ticks, t1.Ticks);\r
317 \r
318                 t2 = new DateTime (2002, 2, 1);\r
319                 t1 = DateTime.Parse ("2002 February");\r
320                 AssertEquals ("H15", t2.Ticks, t1.Ticks);\r
321 \r
322                 t2 = new DateTime (DateTime.Today.Year, 2, 8);\r
323                 t1 = DateTime.Parse ("February 8");\r
324                 AssertEquals ("H16", t2.Ticks, t1.Ticks);\r
325         }\r
326 \r
327         protected override void RunTest ()\r
328         {\r
329                 CultureInfo oldcult = Thread.CurrentThread.CurrentCulture;\r
330 \r
331                 Thread.CurrentThread.CurrentCulture = new CultureInfo ("");\r
332 \r
333                 TestCtors ();\r
334                 TestToString ();\r
335                 TestParseExact ();\r
336                 TestParse ();\r
337 \r
338                 Thread.CurrentThread.CurrentCulture = oldcult;\r
339         }\r
340 }\r
341 \r
342 }\r