1
2
3
4
5
6
7
8
9 package com.atlassian.core.util;
10
11 import junit.framework.Test;
12 import junit.framework.TestCase;
13 import junit.framework.TestSuite;
14
15 import java.sql.Timestamp;
16 import java.util.Calendar;
17 import java.util.GregorianCalendar;
18 import java.util.Locale;
19 import java.util.ResourceBundle;
20 import java.util.Date;
21
22 public class TestDateUtils extends TestCase
23 {
24 private static long MINUTE = 60;
25 private static long HOUR = (60 * MINUTE);
26
27 private static long SECOND_MS = 1000;
28 private static long MINUTE_MS = SECOND_MS * 60;
29 private static long HOUR_MS = MINUTE_MS * 60;
30 private static long DAY_MS = HOUR_MS * 24;
31
32
33 private ResourceBundle resourceBundle;
34
35 protected void setUp() throws Exception
36 {
37 super.setUp();
38
39 resourceBundle = ResourceBundle.getBundle("DateUtils", Locale.getDefault(), Thread.currentThread().getContextClassLoader());
40 }
41
42 public void testEqualTimeStamps1()
43 {
44 Timestamp testa = new Timestamp(100000000);
45 testa.setTime(100000009);
46 Timestamp testb = new Timestamp(100000000);
47 testb.setTime(100000000);
48
49 assertTrue((DateUtils.equalTimestamps(testa, testb)));
50 }
51
52
53 public void testEqualTimeStamps2()
54 {
55 Timestamp testa = new Timestamp(100000000);
56 testa.setTime(100000000);
57 Timestamp testb = new Timestamp(100000000);
58 testb.setTime(100000009);
59
60 assertTrue(DateUtils.equalTimestamps(testa, testb));
61 }
62
63 public void testEqualTimeStamps3()
64 {
65 Timestamp testa = new Timestamp(100000000);
66 testa.setTime(100000010);
67 Timestamp testb = new Timestamp(100000000);
68 testb.setTime(100000000);
69 assertTrue(!(DateUtils.equalTimestamps(testa, testb)));
70 }
71
72 public void testEqualTimeStamps4()
73 {
74 Timestamp testa = new Timestamp(100000000);
75 testa.setTime(100000000);
76 Timestamp testb = new Timestamp(100000000);
77 testb.setTime(100000010);
78 assertTrue(!(DateUtils.equalTimestamps(testa, testb)));
79 }
80
81 public void testFormatDate() throws Exception
82 {
83 assertEquals("2005-06-07 14:45:00,000", DateUtils.formatDateISO8601(new GregorianCalendar(2005, 5, 7, 14, 45).getTime()));
84 }
85 public void testDateDifference1()
86 {
87 _testDateDifference(0, 3, "0 minutes");
88 _testDateDifference(0, 4, "0 seconds");
89 _testDateDifference(cal(2000, 1, 1), cal(2000, 2, 1), 0, "0 months");
90 _testDateDifference(cal(2000, 1, 1), cal(2000, 4, 1), 0, "2 months");
91 _testDateDifference(cal(2000, 1, 1), cal(2000, 2, 1), 2, "29 days");
92 _testDateDifference(cal(2000, 1, 1), cal(2000, 2, 15), 1, "1 month, 12 days");
93 _testDateDifference(cal(2000, 1, 1), cal(2000, 2, 15), 2, "1 month, 12 days");
94 _testDateDifference(cal(2000, 1, 1), cal(2000, 1, 1), 1, "0 days");
95 _testDateDifference(cal(2000, 1, 1), cal(2000, 1, 1), 2, "0 hours");
96 _testDateDifference(cal(2000, 1, 1), cal(2000, 12, 1), 1, "10 months, 25 days");
97 _testDateDifference(cal(2000, 1, 1), cal(2000, 1, 2), 2, "1 day");
98 _testDateDifference(cal(2000, 12, 1), cal(2001, 1, 1), 2, "1 month");
99
100
101
102
103 _testDateDifference(3 * DAY_MS + 5 * HOUR_MS + 4 * MINUTE_MS + 30 * SECOND_MS, 4, "3 days, 5 hours, 4 minutes, 30 seconds");
104 _testDateDifference(3 * DAY_MS + 5 * HOUR_MS + 4 * MINUTE_MS + 1 * SECOND_MS, 4, "3 days, 5 hours, 4 minutes, 1 second");
105 _testDateDifference(3 * DAY_MS + 5 * HOUR_MS + 4 * MINUTE_MS + 30 * SECOND_MS, 3, "3 days, 5 hours, 4 minutes");
106 _testDateDifference(3 * DAY_MS + 5 * HOUR_MS + 4 * MINUTE_MS + 30 * SECOND_MS, 2, "3 days, 5 hours");
107 _testDateDifference(3 * DAY_MS + 5 * HOUR_MS + 4 * MINUTE_MS + 30 * SECOND_MS, 1, "3 days");
108 _testDateDifference(3 * DAY_MS + 5 * HOUR_MS + 4 * MINUTE_MS + 30 * SECOND_MS, 0, "0 months");
109
110 _testDateDifference(1 * DAY_MS + 1 * HOUR_MS + 4 * MINUTE_MS + 30 * SECOND_MS, 2, "1 day, 1 hour");
111 _testDateDifference(3 * DAY_MS + 5 * HOUR_MS + 1 * MINUTE_MS + 30 * SECOND_MS, 3, "3 days, 5 hours, 1 minute");
112
113 }
114
115 private static Calendar cal(int year1, int month1, int day1)
116 {
117 Calendar cal = Calendar.getInstance();
118 cal.set(year1, month1, day1, 0, 0, 0);
119 cal.set(Calendar.MILLISECOND, 0);
120 return cal;
121 }
122
123 private void _testDateDifference(long diff, int resolution, String expected)
124 {
125 long now = System.currentTimeMillis();
126 assertEquals(expected, DateUtils.dateDifference(now - diff, now, resolution, resourceBundle));
127 }
128
129 private void _testDateDifference(Calendar cal1, Calendar cal2, int resolution, String expected)
130 {
131 assertEquals(expected, DateUtils.dateDifference(cal1.getTime().getTime(), cal2.getTime().getTime(), resolution, resourceBundle));
132 }
133
134 public void testGetDuration() throws Exception
135 {
136 assertEquals(0 * MINUTE, DateUtils.getDuration(""));
137 assertEquals(0 * MINUTE, DateUtils.getDuration(" "));
138 assertEquals(0, DateUtils.getDuration("0"));
139 assertEquals(0 * MINUTE, DateUtils.getDuration(null));
140 assertEquals(60 * MINUTE, DateUtils.getDuration("60"));
141 assertEquals(60 * MINUTE, DateUtils.getDuration("60m"));
142 assertEquals(60 * MINUTE, DateUtils.getDuration("1h"));
143 assertEquals(120 * MINUTE, DateUtils.getDuration("2h"));
144 assertEquals(60 * 24 * 3 * MINUTE, DateUtils.getDuration("3d"));
145 assertEquals(60 * 24 * 7 * 4 * MINUTE, DateUtils.getDuration("4w"));
146 assertEquals(60 * 24 * 7 * 4 * MINUTE, DateUtils.getDuration("4WeEks"));
147 assertEquals(90 * MINUTE, DateUtils.getDuration("1h 30"));
148 assertEquals((3 * 24 * 60 + 4 * 60 + 30) * MINUTE, DateUtils.getDuration("3d 4h 30m"));
149 assertEquals((3 * 24 * 60 + 4 * 60 + 30) * MINUTE, DateUtils.getDuration("3d 4hours 30m"));
150 assertEquals((3 * 24 * 60 + 4 * 60 + 30) * MINUTE, DateUtils.getDuration("3d, 4h, 30m"));
151 assertEquals((3 * 24 * 60 + 4 * 60 + 30) * MINUTE, DateUtils.getDuration("3d, 4h, 30minute"));
152 assertEquals((3 * 24 * 60 + 4 * 60 + 30) * MINUTE, DateUtils.getDuration("3days, 4hours, 30minutes"));
153 assertEquals((4 * 7 * 24 * 60 + 3 * 24 * 60 + 4 * 60 + 30) * MINUTE, DateUtils.getDuration("4w 3d 4h 30m"));
154
155
156 assertEquals(5 * 24 * 60 * MINUTE , DateUtils.getDuration("5", DateUtils.Duration.DAY));
157 assertEquals(7 * 60 * MINUTE , DateUtils.getDuration("7", DateUtils.Duration.HOUR));
158 assertEquals(2 * 7 * 24 * 60 * MINUTE , DateUtils.getDuration("2", DateUtils.Duration.WEEK));
159
160
161 assertEquals(5 * 8 * 60 * MINUTE, DateUtils.getDuration("5d", 8, 7));
162 assertEquals(2 * 5 * 8 * 60 * MINUTE, DateUtils.getDuration("2w", 8, 5));
163 assertEquals(21 * 8 * 60 * MINUTE, DateUtils.getDuration("21", 8, 5, DateUtils.Duration.DAY));
164 assertEquals(3 * 5 * 8 * 60 * MINUTE, DateUtils.getDuration("3", 8, 5, DateUtils.Duration.WEEK));
165
166
167 final long hour_2_5 = (long) (2.5 * 60 * MINUTE);
168 assertEquals(hour_2_5, DateUtils.getDuration("2.5h", 8, 5));
169 final long day_25 = (long) (.25 * 8 * 60 * MINUTE);
170 assertEquals(day_25, DateUtils.getDuration(".25d", 8, 5));
171 assertEquals(day_25, DateUtils.getDuration("0.25d", 8, 5));
172 final long week_3_2 = (long) (3.2 * 5 * 8 * 60 * MINUTE);
173 assertEquals(week_3_2, DateUtils.getDuration("3.2w", 8, 5));
174
175
176 assertEquals(hour_2_5 + day_25 + week_3_2, DateUtils.getDuration("3.2w .25d 2.5h", 8, 5));
177
178
179 try
180 {
181 DateUtils.getDuration("-7.5d");
182 fail();
183 }
184 catch (InvalidDurationException e) {}
185
186
187 try
188 {
189 DateUtils.getDuration("1.5m");
190 fail();
191 }
192 catch (InvalidDurationException e) {}
193
194
195 try
196 {
197
198 DateUtils.getDuration(".27h");
199 fail();
200 }
201 catch (InvalidDurationException e) {}
202
203
204 try
205 {
206 DateUtils.getDuration("5.w");
207 fail();
208 }
209 catch (InvalidDurationException e) {}
210
211 try
212 {
213 DateUtils.getDuration("foo");
214 fail();
215 }
216 catch (InvalidDurationException e)
217 {
218 }
219
220 try
221 {
222 DateUtils.getDuration("60s");
223 fail();
224 }
225 catch (InvalidDurationException e)
226 {
227 }
228
229 try
230 {
231 DateUtils.getDuration("3dumdidum");
232 fail();
233 }
234 catch (InvalidDurationException e)
235 {
236 }
237
238 try
239 {
240 DateUtils.getDuration("10wikipedia");
241 fail();
242 }
243 catch (InvalidDurationException e)
244 {
245 }
246
247 try
248 {
249 DateUtils.getDuration("wikipedia");
250 fail();
251 }
252 catch (InvalidDurationException e)
253 {
254 }
255
256 try
257 {
258 DateUtils.getDuration("123120893wewerewrasdfdsfxcvb");
259 fail();
260 }
261 catch (InvalidDurationException e)
262 {
263 }
264
265 try
266 {
267 DateUtils.getDuration("13dasdys, 2weeks");
268 fail();
269 }
270 catch (InvalidDurationException e)
271 {
272 }
273 }
274
275 public void testValidDuration() throws Exception
276 {
277 assertTrue(DateUtils.validDuration(""));
278 assertTrue(DateUtils.validDuration(" "));
279 assertTrue(DateUtils.validDuration(null));
280 assertTrue(DateUtils.validDuration("60"));
281 assertTrue(DateUtils.validDuration("60m"));
282 assertTrue(DateUtils.validDuration("1h"));
283 assertTrue(DateUtils.validDuration("2d"));
284 assertTrue(DateUtils.validDuration("3w"));
285 assertTrue(DateUtils.validDuration("1w 2d 3h 4m"));
286 assertTrue(DateUtils.validDuration("1weeks 2days 3hours 4minutes"));
287 assertTrue(DateUtils.validDuration("1weeks, 2days, 3hours, 4minutes"));
288
289 assertFalse(DateUtils.validDuration("foo"));
290 assertFalse(DateUtils.validDuration("60s"));
291 assertFalse(DateUtils.validDuration("60magic"));
292 assertFalse(DateUtils.validDuration("3dogs"));
293 assertFalse(DateUtils.validDuration("4hippos"));
294 assertFalse(DateUtils.validDuration("5windows"));
295 assertFalse(DateUtils.validDuration("h"));
296 assertFalse(DateUtils.validDuration("1w 2d 3h 27garbage"));
297 }
298
299 public void testGetDurationCustomDefault() throws Exception
300 {
301 assertEquals(0, DateUtils.getDuration("", DateUtils.Duration.DAY));
302 assertEquals(0, DateUtils.getDuration(" ", DateUtils.Duration.WEEK));
303 assertEquals(1209600, DateUtils.getDuration("2", DateUtils.Duration.WEEK));
304 assertEquals(62, DateUtils.getDuration("1m 2", DateUtils.Duration.SECOND));
305 assertEquals(841440, DateUtils.getDuration("6d 12h 44m 77", DateUtils.Duration.HOUR));
306
307
308
309 assertEquals(60 * MINUTE, DateUtils.getDuration("60m", DateUtils.Duration.HOUR));
310 assertEquals(120 * MINUTE, DateUtils.getDuration("2h", DateUtils.Duration.MONTH));
311 assertEquals(60 * 24 * 3 * MINUTE, DateUtils.getDuration("3d", DateUtils.Duration.SECOND));
312 assertEquals(60 * 24 * 7 * 4 * MINUTE, DateUtils.getDuration("4w", DateUtils.Duration.DAY));
313 assertEquals(60 * 24 * 7 * 4 * MINUTE, DateUtils.getDuration("4weeks", DateUtils.Duration.MINUTE));
314 assertEquals((3 * 24 * 60 + 4 * 60 + 30) * MINUTE, DateUtils.getDuration("3d 4h 30m", DateUtils.Duration.WEEK));
315 assertEquals((3 * 24 * 60 + 4 * 60 + 30) * MINUTE, DateUtils.getDuration("3d, 4h, 30m", DateUtils.Duration.YEAR));
316 assertEquals((3 * 24 * 60 + 4 * 60 + 30) * MINUTE, DateUtils.getDuration("3days, 4hours, 30minutes", DateUtils.Duration.HOUR));
317 assertEquals((4 * 7 * 24 * 60 + 3 * 24 * 60 + 4 * 60 + 30) * MINUTE, DateUtils.getDuration("4w 3d 4h 30m", DateUtils.Duration.WEEK));
318 assertEquals(MINUTE, DateUtils.getDuration("1mInuTe", DateUtils.Duration.HOUR));
319 assertEquals(MINUTE, DateUtils.getDuration("1mInuTes", DateUtils.Duration.HOUR));
320 assertEquals(HOUR, DateUtils.getDuration("1HoUr", DateUtils.Duration.HOUR));
321 assertEquals(HOUR, DateUtils.getDuration("1HoUrs", DateUtils.Duration.HOUR));
322 assertEquals(24 * HOUR, DateUtils.getDuration("1DaY", DateUtils.Duration.HOUR));
323 assertEquals(24 * HOUR, DateUtils.getDuration("1dAyS", DateUtils.Duration.HOUR));
324 assertEquals(24 * 7 * HOUR, DateUtils.getDuration("1wEeK", DateUtils.Duration.HOUR));
325 assertEquals(24 * 7 * HOUR, DateUtils.getDuration("1wEekS", DateUtils.Duration.HOUR));
326
327 try
328 {
329 DateUtils.getDuration("foo");
330 fail();
331 }
332 catch (InvalidDurationException e)
333 {
334
335 }
336
337 try
338 {
339 DateUtils.getDuration("60s");
340 fail();
341 }
342 catch (InvalidDurationException e)
343 {
344
345 }
346 }
347
348 public void testGetDuration2() throws InvalidDurationException
349 {
350 int hoursInDay = 8;
351 int daysInWeek = 5;
352 assertEquals(90 * MINUTE, DateUtils.getDuration("1h 30", hoursInDay, daysInWeek));
353 assertEquals((3 * hoursInDay * 60 + 4 * 60 + 30) * MINUTE, DateUtils.getDuration("3d 4h 30m", hoursInDay, daysInWeek));
354 assertEquals((4 * daysInWeek * hoursInDay * 60 + 3 * hoursInDay * 60 + 4 * 60 + 30) * MINUTE, DateUtils.getDuration("4w 3d 4h 30m", hoursInDay, daysInWeek));
355 }
356
357 public void testGetDurationWithNegative() throws InvalidDurationException
358 {
359 assertEquals(0, DateUtils.getDurationWithNegative(" "));
360 assertEquals(0, DateUtils.getDurationWithNegative(""));
361 assertEquals(90 * MINUTE, DateUtils.getDurationWithNegative("1h 30"));
362 assertEquals(-90 * MINUTE, DateUtils.getDurationWithNegative("-1h 30"));
363 assertEquals(-7 * HOUR, DateUtils.getDurationWithNegative("- 7h"));
364 try
365 {
366 DateUtils.getDurationWithNegative("-7h -6m");
367 fail("Should have thrown exception");
368 }
369 catch (InvalidDurationException e)
370 {
371 }
372 }
373
374 public void testDurationString() throws Exception
375 {
376 assertEquals("0m", DateUtils.getDurationString(0 * MINUTE));
377 assertEquals("30m", DateUtils.getDurationString(30 * MINUTE));
378 assertEquals("1h", DateUtils.getDurationString(60 * MINUTE));
379 assertEquals("2h", DateUtils.getDurationString(120 * MINUTE));
380 assertEquals("3d", DateUtils.getDurationString(60 * 24 * 3 * MINUTE));
381 assertEquals("4w", DateUtils.getDurationString(4 * 7 * 24 * 60 * MINUTE));
382 assertEquals("1h 30m", DateUtils.getDurationString(90 * MINUTE));
383 assertEquals("3d 4h 30m", DateUtils.getDurationString((3 * 24 * 60 + 4 * 60 + 30) * MINUTE));
384 assertEquals("4w 1d 4h 30m", DateUtils.getDurationString((4 * 7 * 24 * 60 + 24 * 60 + 4 * 60 + 30) * MINUTE));
385
386
387 assertEquals("17w 2d 4h 30m", DateUtils.getDurationString((4 * 7 * 24 * 60 + 24 * 60 + 4 * 60 + 30) * MINUTE, 8, 5));
388 assertEquals("23w 1d 4h 30m", DateUtils.getDurationString((4 * 7 * 24 * 60 + 24 * 60 + 4 * 60 + 30) * MINUTE, 6, 5));
389 assertEquals("10w 7d 4h 30m", DateUtils.getDurationString((4 * 7 * 24 * 60 + 24 * 60 + 4 * 60 + 30) * MINUTE, 8, 8));
390
391 }
392
393 public void testDurationStringWithNegative() throws Exception
394 {
395 assertEquals("-30m", DateUtils.getDurationStringWithNegative(-30 * MINUTE));
396 assertEquals("30m", DateUtils.getDurationStringWithNegative(30 * MINUTE));
397 assertEquals("-1h 30m", DateUtils.getDurationStringWithNegative(-90 * MINUTE));
398 }
399
400 public void testDurationPretty() throws Exception
401 {
402
403 assertEquals("0 minutes", DateUtils.getDurationPretty(0 * MINUTE, resourceBundle));
404 assertEquals("1 second", DateUtils.getDurationPretty(1, resourceBundle));
405 assertEquals("12 seconds", DateUtils.getDurationPretty(12, resourceBundle));
406 assertEquals("1 minute", DateUtils.getDurationPretty(1 * MINUTE + 15, resourceBundle));
407 assertEquals("30 minutes", DateUtils.getDurationPretty(30 * MINUTE + 15, resourceBundle));
408 assertEquals("1 hour", DateUtils.getDurationPretty(60 * MINUTE, resourceBundle));
409 assertEquals("2 hours", DateUtils.getDurationPretty(120 * MINUTE, resourceBundle));
410 assertEquals("3 days", DateUtils.getDurationPretty(60 * 24 * 3 * MINUTE, resourceBundle));
411 assertEquals("4 weeks", DateUtils.getDurationPretty(60 * 24 * 7 * 4 * MINUTE, resourceBundle));
412 assertEquals("1 hour, 30 minutes", DateUtils.getDurationPretty(90 * MINUTE, resourceBundle));
413 assertEquals("3 days, 4 hours, 30 minutes", DateUtils.getDurationPretty((3 * 24 * 60 + 4 * 60 + 30) * MINUTE, resourceBundle));
414 assertEquals("4 weeks, 1 day, 4 hours, 30 minutes", DateUtils.getDurationPretty((4 * 7 * 24 * 60 + 24 * 60 + 4 * 60 + 30) * MINUTE, resourceBundle));
415
416 assertEquals("1 year, 34 weeks, 2 days", DateUtils.getDurationPretty((cal(2007, 4, 26).getTimeInMillis() - cal(2005, 8, 29).getTimeInMillis()) / 1000, resourceBundle));
417 assertEquals("2 years, 34 weeks, 3 days", DateUtils.getDurationPretty((cal(2007, 4, 26).getTimeInMillis() - cal(2004, 8, 29).getTimeInMillis()) / 1000, resourceBundle));
418
419
420 assertEquals("1 week", DateUtils.getDurationPretty(60 * 24 * 3 * MINUTE, 24, 3, resourceBundle));
421 assertEquals("1 week, 4 days", DateUtils.getDurationPretty(60 * 24 * 3 * MINUTE, 8, 5, resourceBundle));
422
423 }
424
425 public void testDurationPrettySecondsResolution() throws Exception
426 {
427
428 assertEquals("0 seconds", DateUtils.getDurationPrettySecondsResolution(0 * MINUTE, resourceBundle));
429 assertEquals("1 second", DateUtils.getDurationPrettySecondsResolution(1, resourceBundle));
430 assertEquals("12 seconds", DateUtils.getDurationPrettySecondsResolution(12, resourceBundle));
431 assertEquals("1 minute", DateUtils.getDurationPrettySecondsResolution(1 * MINUTE, resourceBundle));
432 assertEquals("30 minutes", DateUtils.getDurationPrettySecondsResolution(30 * MINUTE, resourceBundle));
433 assertEquals("1 hour", DateUtils.getDurationPrettySecondsResolution(60 * MINUTE, resourceBundle));
434 assertEquals("2 hours", DateUtils.getDurationPrettySecondsResolution(120 * MINUTE, resourceBundle));
435 assertEquals("3 days", DateUtils.getDurationPrettySecondsResolution(60 * 24 * 3 * MINUTE, resourceBundle));
436 assertEquals("4 weeks", DateUtils.getDurationPrettySecondsResolution(60 * 24 * 7 * 4 * MINUTE, resourceBundle));
437 assertEquals("1 hour, 30 minutes", DateUtils.getDurationPrettySecondsResolution(90 * MINUTE, resourceBundle));
438 assertEquals("3 days, 4 hours, 30 minutes", DateUtils.getDurationPrettySecondsResolution((3 * 24 * 60 + 4 * 60 + 30) * MINUTE, resourceBundle));
439 assertEquals("4 weeks, 1 day, 4 hours, 30 minutes", DateUtils.getDurationPrettySecondsResolution((4 * 7 * 24 * 60 + 24 * 60 + 4 * 60 + 30) * MINUTE, resourceBundle));
440
441 assertEquals("1 year, 34 weeks, 2 days", DateUtils.getDurationPrettySecondsResolution((cal(2007, 4, 26).getTimeInMillis() - cal(2005, 8, 29).getTimeInMillis()) / 1000, resourceBundle));
442 assertEquals("2 years, 34 weeks, 3 days", DateUtils.getDurationPrettySecondsResolution((cal(2007, 4, 26).getTimeInMillis() - cal(2004, 8, 29).getTimeInMillis()) / 1000, resourceBundle));
443
444
445 assertEquals("1 minute, 23 seconds", DateUtils.getDurationPrettySecondsResolution(1 * MINUTE + 23, resourceBundle));
446 assertEquals("30 minutes, 1 second", DateUtils.getDurationPrettySecondsResolution(30 * MINUTE + 1, resourceBundle));
447 assertEquals("1 hour, 23 seconds", DateUtils.getDurationPrettySecondsResolution(60 * MINUTE + 23, resourceBundle));
448 assertEquals("2 hours, 8 seconds", DateUtils.getDurationPrettySecondsResolution(120 * MINUTE + 8, resourceBundle));
449 assertEquals("3 days, 12 seconds", DateUtils.getDurationPrettySecondsResolution(60 * 24 * 3 * MINUTE + 12, resourceBundle));
450 assertEquals("4 weeks, 17 seconds", DateUtils.getDurationPrettySecondsResolution(60 * 24 * 7 * 4 * MINUTE + 17, resourceBundle));
451 assertEquals("1 hour, 30 minutes, 4 seconds", DateUtils.getDurationPrettySecondsResolution(90 * MINUTE + 4, resourceBundle));
452 assertEquals("3 days, 4 hours, 30 minutes, 39 seconds", DateUtils.getDurationPrettySecondsResolution((3 * 24 * 60 + 4 * 60 + 30) * MINUTE + 39, resourceBundle));
453 assertEquals("4 weeks, 1 day, 4 hours, 30 minutes, 1 second", DateUtils.getDurationPrettySecondsResolution((4 * 7 * 24 * 60 + 24 * 60 + 4 * 60 + 30) * MINUTE + 1, resourceBundle));
454
455
456 assertEquals("1 week, 12 seconds", DateUtils.getDurationPrettySecondsResolution(60 * 24 * 3 * MINUTE + 12, 24, 3, resourceBundle));
457 assertEquals("1 week, 4 days, 12 seconds", DateUtils.getDurationPrettySecondsResolution(60 * 24 * 3 * MINUTE + 12, 8, 5, resourceBundle));
458 }
459
460 public void testTomorrowYesterday() throws Exception
461 {
462 final Date today = new Date();
463 final Date tomorrow = DateUtils.tomorrow();
464 final Date yesterday = DateUtils.yesterday();
465 assertTrue(tomorrow.after(today));
466 assertTrue(yesterday.before(today));
467 }
468 public void testDurationPrettySeconds() throws Exception
469 {
470 long secondsPerDay = 60 * 60 * 24;
471 long secondsPerWeek = secondsPerDay * 3;
472 assertEquals("1 week", DateUtils.getDurationPrettySeconds(60 * 24 * 3 * MINUTE, secondsPerDay, secondsPerWeek, resourceBundle));
473
474 secondsPerDay = 60 * 60 * 8;
475 secondsPerWeek = secondsPerDay * 5;
476 assertEquals("1 week, 4 days", DateUtils.getDurationPrettySeconds(60 * 24 * 3 * MINUTE, secondsPerDay, secondsPerWeek, resourceBundle));
477 }
478
479 public void testToEndOfPeriod()
480 {
481 final int year = 2005;
482 final int month = Calendar.OCTOBER;
483 final int date = 15;
484 final int hour = 13;
485 final int minute = 22;
486 final int second = 22;
487
488
489 Calendar calendar = Calendar.getInstance();
490 calendar.set(Calendar.YEAR, year);
491 calendar.set(Calendar.MONTH, month);
492 calendar.set(Calendar.DATE, date);
493 calendar.set(Calendar.HOUR_OF_DAY, hour);
494 calendar.set(Calendar.MINUTE, minute);
495 calendar.set(Calendar.SECOND, second);
496
497
498 Calendar yearPeriod = DateUtils.toEndOfPeriod((Calendar) calendar.clone(), Calendar.YEAR);
499 assertEquals(year, yearPeriod.get(Calendar.YEAR));
500 assertEquals(Calendar.DECEMBER, yearPeriod.get(Calendar.MONTH));
501 assertEquals(31, yearPeriod.get(Calendar.DATE));
502 assertEquals(23, yearPeriod.get(Calendar.HOUR_OF_DAY));
503 assertEquals(59, yearPeriod.get(Calendar.MINUTE));
504 assertEquals(59, yearPeriod.get(Calendar.SECOND));
505
506
507 Calendar monthPeriod = DateUtils.toEndOfPeriod((Calendar) calendar.clone(), Calendar.MONTH);
508 assertEquals(year, monthPeriod.get(Calendar.YEAR));
509 assertEquals(month, monthPeriod.get(Calendar.MONTH));
510 assertEquals(31, monthPeriod.get(Calendar.DATE));
511 assertEquals(23, monthPeriod.get(Calendar.HOUR_OF_DAY));
512 assertEquals(59, monthPeriod.get(Calendar.MINUTE));
513 assertEquals(59, monthPeriod.get(Calendar.SECOND));
514
515
516 Calendar datePeriod = DateUtils.toEndOfPeriod((Calendar) calendar.clone(), Calendar.DATE);
517 assertEquals(year, datePeriod.get(Calendar.YEAR));
518 assertEquals(month, datePeriod.get(Calendar.MONTH));
519 assertEquals(date, datePeriod.get(Calendar.DATE));
520 assertEquals(23, datePeriod.get(Calendar.HOUR_OF_DAY));
521 assertEquals(59, datePeriod.get(Calendar.MINUTE));
522 assertEquals(59, datePeriod.get(Calendar.SECOND));
523
524
525 Calendar hourPeriod = DateUtils.toEndOfPeriod((Calendar) calendar.clone(), Calendar.HOUR_OF_DAY);
526 assertEquals(year, hourPeriod.get(Calendar.YEAR));
527 assertEquals(month, hourPeriod.get(Calendar.MONTH));
528 assertEquals(date, hourPeriod.get(Calendar.DATE));
529 assertEquals(hour, hourPeriod.get(Calendar.HOUR_OF_DAY));
530 assertEquals(59, hourPeriod.get(Calendar.MINUTE));
531 assertEquals(59, hourPeriod.get(Calendar.SECOND));
532
533
534 Calendar minutePeriod = DateUtils.toEndOfPeriod((Calendar) calendar.clone(), Calendar.MINUTE);
535 assertEquals(year, minutePeriod.get(Calendar.YEAR));
536 assertEquals(month, minutePeriod.get(Calendar.MONTH));
537 assertEquals(date, minutePeriod.get(Calendar.DATE));
538 assertEquals(hour, minutePeriod.get(Calendar.HOUR_OF_DAY));
539 assertEquals(minute, minutePeriod.get(Calendar.MINUTE));
540 assertEquals(59, minutePeriod.get(Calendar.SECOND));
541
542 try
543 {
544 DateUtils.toEndOfPeriod((Calendar)calendar.clone(), -10000);
545 fail();
546 }
547 catch (IllegalArgumentException expected) {}
548
549 }
550
551 public void testToStartOfPeriod()
552 {
553 final int year = 2005;
554 final int month = Calendar.OCTOBER;
555 final int date = 15;
556 final int hour = 13;
557 final int minute = 22;
558 final int second = 22;
559
560
561 Calendar calendar = Calendar.getInstance();
562 calendar.set(Calendar.YEAR, year);
563 calendar.set(Calendar.MONTH, month);
564 calendar.set(Calendar.DATE, date);
565 calendar.set(Calendar.HOUR_OF_DAY, hour);
566 calendar.set(Calendar.MINUTE, minute);
567 calendar.set(Calendar.SECOND, second);
568
569
570 Calendar yearPeriod = DateUtils.toStartOfPeriod((Calendar) calendar.clone(), Calendar.YEAR);
571 assertEquals(year, yearPeriod.get(Calendar.YEAR));
572 assertEquals(Calendar.JANUARY, yearPeriod.get(Calendar.MONTH));
573 assertEquals(1, yearPeriod.get(Calendar.DATE));
574 assertEquals(0, yearPeriod.get(Calendar.HOUR_OF_DAY));
575 assertEquals(0, yearPeriod.get(Calendar.MINUTE));
576 assertEquals(0, yearPeriod.get(Calendar.SECOND));
577
578
579 Calendar monthPeriod = DateUtils.toStartOfPeriod((Calendar) calendar.clone(), Calendar.MONTH);
580 assertEquals(year, monthPeriod.get(Calendar.YEAR));
581 assertEquals(month, monthPeriod.get(Calendar.MONTH));
582 assertEquals(1, monthPeriod.get(Calendar.DATE));
583 assertEquals(0, monthPeriod.get(Calendar.HOUR_OF_DAY));
584 assertEquals(0, monthPeriod.get(Calendar.MINUTE));
585 assertEquals(0, monthPeriod.get(Calendar.SECOND));
586
587
588 Calendar datePeriod = DateUtils.toStartOfPeriod((Calendar) calendar.clone(), Calendar.DATE);
589 assertEquals(year, datePeriod.get(Calendar.YEAR));
590 assertEquals(month, datePeriod.get(Calendar.MONTH));
591 assertEquals(date, datePeriod.get(Calendar.DATE));
592 assertEquals(0, datePeriod.get(Calendar.HOUR_OF_DAY));
593 assertEquals(0, datePeriod.get(Calendar.MINUTE));
594 assertEquals(0, datePeriod.get(Calendar.SECOND));
595
596
597 Calendar hourPeriod = DateUtils.toStartOfPeriod((Calendar) calendar.clone(), Calendar.HOUR_OF_DAY);
598 assertEquals(year, hourPeriod.get(Calendar.YEAR));
599 assertEquals(month, hourPeriod.get(Calendar.MONTH));
600 assertEquals(date, hourPeriod.get(Calendar.DATE));
601 assertEquals(hour, hourPeriod.get(Calendar.HOUR_OF_DAY));
602 assertEquals(0, hourPeriod.get(Calendar.MINUTE));
603 assertEquals(0, hourPeriod.get(Calendar.SECOND));
604
605
606 Calendar minutePeriod = DateUtils.toStartOfPeriod((Calendar) calendar.clone(), Calendar.MINUTE);
607 assertEquals(year, minutePeriod.get(Calendar.YEAR));
608 assertEquals(month, minutePeriod.get(Calendar.MONTH));
609 assertEquals(date, minutePeriod.get(Calendar.DATE));
610 assertEquals(hour, minutePeriod.get(Calendar.HOUR_OF_DAY));
611 assertEquals(minute, minutePeriod.get(Calendar.MINUTE));
612 assertEquals(0, minutePeriod.get(Calendar.SECOND));
613
614 try
615 {
616 DateUtils.toStartOfPeriod((Calendar)calendar.clone(), -10000);
617 fail();
618 }
619 catch (IllegalArgumentException expected) {}
620 }
621
622 public void testGet24HourTime()
623 {
624 assertEquals(0, DateUtils.get24HourTime("AM", 12));
625 assertEquals(0, DateUtils.get24HourTime("am", 12));
626 assertEquals(12, DateUtils.get24HourTime("PM", 12));
627 assertEquals(12, DateUtils.get24HourTime("pm", 12));
628 assertEquals(11, DateUtils.get24HourTime("AM", 11));
629 assertEquals(1, DateUtils.get24HourTime("AM", 1));
630 assertEquals(17, DateUtils.get24HourTime("PM", 5));
631 assertEquals(23, DateUtils.get24HourTime("PM", 11));
632 assertEquals(23, DateUtils.get24HourTime("pm", 11));
633
634
635 assertEquals(12, DateUtils.get24HourTime("foo", 12));
636 }
637
638 public void testDateCalendarGetters() throws Exception
639 {
640 final Calendar calendar = DateUtils.getCalendarDay(2003, 5, 21);
641 final Date date = DateUtils.getDateDay(2003, 5, 21);
642
643 assertEquals(2003, calendar.get(Calendar.YEAR));
644 assertEquals(5, calendar.get(Calendar.MONTH));
645 assertEquals(21, calendar.get(Calendar.DAY_OF_MONTH));
646 assertEquals(date, calendar.getTime());
647 }
648 }