2 // DateTimeTest.cs - NUnit Test Cases for the System.DateTime struct
\r
5 // Martin Baulig (martin@gnome.org)
\r
7 // (C) 2002 Free Software Foundation
\r
10 using NUnit.Framework;
\r
12 using System.Threading;
\r
13 using System.Globalization;
\r
15 namespace MonoTests.System
\r
18 public class DateTimeTest : TestCase
\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
30 public DateTimeTest() : base ("MonoTests.System.DateTimeTest testcase") {}
\r
31 public DateTimeTest (string name): base(name) {}
\r
33 public static ITest Suite
\r
36 return new TestSuite (typeof (DateTimeTest));
\r
40 public void TestCtors ()
\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
58 public void TestToString ()
\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
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
116 public void TestParseExact ()
\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
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
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
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
149 t1 = DateTime.ParseExact ("2002-02-25T05:25:13", "s", null);
\r
150 AssertEquals ("D13", myTicks[4], t1.Ticks);
\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
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
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
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
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
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
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
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
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
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
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
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
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
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
240 t1 = DateTime.ParseExact ("02/25/2002", "d", null,
\r
241 DateTimeStyles.AllowWhiteSpaces);
\r
242 AssertEquals ("G04", myTicks[0], t1.Ticks);
\r
244 t1 = DateTime.ParseExact (" 02/25/2002", "d", null,
\r
245 DateTimeStyles.AllowLeadingWhite);
\r
246 AssertEquals ("G05", myTicks[0], t1.Ticks);
\r
248 t1 = DateTime.ParseExact ("02/25/2002 ", "d", null,
\r
249 DateTimeStyles.AllowTrailingWhite);
\r
250 AssertEquals ("G06", myTicks[0], t1.Ticks);
\r
252 t1 = DateTime.ParseExact (" 02 / 25 / 2002 ", "d", null,
\r
253 DateTimeStyles.AllowWhiteSpaces);
\r
254 AssertEquals ("G07", myTicks[0], t1.Ticks);
\r
256 // Multi Custom Patterns
\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
274 public void TestParse ()
\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
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
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
300 t1 = DateTime.Parse ("Mon, 25 Feb 2002 04:25:13 GMT");
\r
301 AssertEquals ("H10", myTicks[4], t1.Ticks);
\r
303 t1 = DateTime.Parse ("2002-02-25T05:25:13");
\r
304 AssertEquals ("H11", myTicks[4], t1.Ticks);
\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
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
314 t2 = new DateTime (2002, 2, 1);
\r
315 t1 = DateTime.Parse ("2002 February");
\r
316 AssertEquals ("H14", t2.Ticks, t1.Ticks);
\r
318 t2 = new DateTime (2002, 2, 1);
\r
319 t1 = DateTime.Parse ("2002 February");
\r
320 AssertEquals ("H15", t2.Ticks, t1.Ticks);
\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
327 protected override void RunTest ()
\r
329 CultureInfo oldcult = Thread.CurrentThread.CurrentCulture;
\r
331 Thread.CurrentThread.CurrentCulture = new CultureInfo ("");
\r
338 Thread.CurrentThread.CurrentCulture = oldcult;
\r