/*
* (c) Rob Gordon 2005
*/
package org.oddjob.schedules;
import java.text.ParseException;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
import junit.framework.TestCase;
import org.oddjob.arooa.utils.DateHelper;
import org.oddjob.schedules.units.DayOfMonth;
import org.oddjob.schedules.units.DayOfWeek;
import org.oddjob.schedules.units.WeekOfMonth;
public class CalendarUtilsTest extends TestCase {
public void testAddYearAssumption() throws ParseException {
Calendar test = Calendar.getInstance();
test.clear();
test.set(Calendar.DAY_OF_MONTH, 0);
test.set(Calendar.MONTH, 2);
test.set(Calendar.YEAR, 2003);
assertEquals(DateHelper.parseDate("2003-02-28"), test.getTime());
test.add(Calendar.YEAR, 1);
// Note that adding a year to the last day of the month isn't the
// the last day of the month a year later!!!
assertEquals(DateHelper.parseDate("2004-02-28"), test.getTime());
test.clear();
test.set(Calendar.DAY_OF_MONTH, 0);
test.set(Calendar.MONTH, 2);
test.set(Calendar.YEAR, 2004);
assertEquals(DateHelper.parseDate("2004-02-29"), test.getTime());
test.add(Calendar.YEAR, 1);
// Works the other way though.
assertEquals(DateHelper.parseDate("2005-02-28"), test.getTime());
}
public void testSetEndOfDay() throws ParseException {
Calendar test = Calendar.getInstance();
test.setTime(DateHelper.parseDateTime("2003-07-15 12:27"));
CalendarUtils.setEndOfDay(test);
assertEquals(DateHelper.parseDateTime("2003-07-16 00:00"),
test.getTime());
}
public void testSetEndOfMonth() throws ParseException {
Calendar test = Calendar.getInstance();
test.setTime(DateHelper.parseDateTime("2003-07-15 12:27"));
CalendarUtils.setEndOfMonth(test);
assertEquals(DateHelper.parseDateTime("2003-08-01 00:00"),
test.getTime());
}
/*
* Test for Date startOfMonth(Date)
*/
public void testStartOfMonthDate() throws ParseException {
CalendarUtils test = new CalendarUtils(
DateHelper.parseDateTime("2003-07-11 12:27"),
TimeZone.getDefault());
assertEquals(DateHelper.parseDateTime("2003-07-01"),
test.startOfMonth().getTime());
}
/*
* Test for Date endOfMonth(Date)
*/
public void testEndOfMonthDate() throws ParseException {
CalendarUtils test = new CalendarUtils(
DateHelper.parseDateTime("2004-02-11 12:27"),
TimeZone.getDefault());
assertEquals(DateHelper.parseDateTime("2004-03-01 00:00"),
test.endOfMonth().getTime());
}
/*
* Test for Date endOfMonth(Date)
*/
public void testDayOfMonth() throws ParseException {
CalendarUtils test = new CalendarUtils(
DateHelper.parseDateTime("2003-07-11 12:27"),
TimeZone.getDefault());
Calendar result = test.dayOfMonth(
new DayOfMonth.Number(15));
assertEquals(DateHelper.parseDateTime("2003-07-15"),
result.getTime());
}
public void testStartOfWeekDate() throws ParseException {
Calendar result = CalendarUtils.startOfWeek(
DateHelper.parseDateTime("2006-03-08 12:27"),
TimeZone.getDefault());
Date expected = DateHelper.parseDateTime("2006-03-06");
assertEquals(expected, result.getTime());
result = CalendarUtils.startOfWeek(
DateHelper.parseDateTime("2011-03-01 12:27"),
TimeZone.getDefault());
expected = DateHelper.parseDateTime("2011-02-28");
assertEquals(expected, result.getTime());
result = CalendarUtils.startOfWeek(
DateHelper.parseDateTime("2011-01-01 12:27"),
TimeZone.getDefault());
expected = DateHelper.parseDateTime("2010-12-27");
assertEquals(expected, result.getTime());
}
public void testEndOfWeekDate() throws ParseException {
Calendar result = CalendarUtils.endOfWeek(
DateHelper.parseDateTime("2006-03-08 12:27"),
TimeZone.getDefault());
Date expected = DateHelper.parseDateTime(
"2006-03-13 00:00");
assertEquals(expected, result.getTime());
result = CalendarUtils.endOfWeek(
DateHelper.parseDateTime("2010-12-27 00:00"),
TimeZone.getDefault());
expected = DateHelper.parseDateTime(
"2011-01-03 00:00");
assertEquals(expected, result.getTime());
}
public void testDayOfWeek() throws ParseException {
CalendarUtils test = new CalendarUtils(
DateHelper.parseDateTime("2006-03-09 12:27"),
TimeZone.getDefault());
// 9th of March 2006 was a Thursday.
Calendar result = test.dayOfWeek(
DayOfWeek.Days.WEDNESDAY);
Date expected = DateHelper.parseDateTime("2006-03-08");
assertEquals(expected, result.getTime());
result = test.dayOfWeek(
DayOfWeek.Days.SATURDAY);
expected = DateHelper.parseDateTime("2006-03-11");
}
public void testStartOfYearDate() throws ParseException {
assertEquals(DateHelper.parseDate("2003-01-01"),
CalendarUtils.startOfYear(
DateHelper.parseDateTime("2003-07-11 12:27"),
TimeZone.getDefault()).getTime());
}
public void testEndOfYearDate() throws ParseException {
assertEquals(DateHelper.parseDateTime("2004-01-01 00:00"),
CalendarUtils.endOfYear(
DateHelper.parseDateTime("2003-06-11 12:27"),
TimeZone.getDefault()).getTime());
}
public void testDayOfYear() throws ParseException {
CalendarUtils test = new CalendarUtils(
DateHelper.parseDateTime("2008-02-09 12:27"),
TimeZone.getDefault());
Calendar result = test.dayOfYear(26, 5);
Date expected = DateHelper.parseDateTime("2008-05-26");
assertEquals(expected, result.getTime());
}
public void testMonthOfYear() throws ParseException {
assertEquals(DateHelper.parseDateTime("2006-03-01"),
CalendarUtils.monthOfYear(
DateHelper.parseDateTime("2006-07-09 12:27"), 3,
TimeZone.getDefault()).getTime());
}
public void testStartOfWeekOfMonth() throws ParseException{
CalendarUtils test = new CalendarUtils(
DateHelper.parseDateTime("2011-02-18 12:45"),
TimeZone.getDefault());
Calendar result = test.startOfWeekOfMonth(
WeekOfMonth.Weeks.SECOND);
assertEquals(
DateHelper.parseDate("2011-02-14"),
result.getTime());
result = test.startOfWeekOfMonth(
WeekOfMonth.Weeks.LAST);
assertEquals(
DateHelper.parseDate("2011-02-21"),
result.getTime());
result = test.startOfWeekOfMonth(
new WeekOfMonth.Number(0));
assertEquals(
DateHelper.parseDate("2011-01-31"),
result.getTime());
result = test.startOfWeekOfMonth(
WeekOfMonth.Weeks.FOURTH);
assertEquals(
DateHelper.parseDate("2011-02-28"),
result.getTime());
}
public void testEndOfWeekOfMonth() throws ParseException{
CalendarUtils test = new CalendarUtils(
DateHelper.parseDateTime("2011-02-18 12:45"),
TimeZone.getDefault());
Calendar result = test.endOfWeekOfMonth(
WeekOfMonth.Weeks.SECOND);
assertEquals(
DateHelper.parseDate("2011-02-21"),
result.getTime());
result = test.endOfWeekOfMonth(
WeekOfMonth.Weeks.LAST);
assertEquals(
DateHelper.parseDate("2011-02-28"),
result.getTime());
result = test.endOfWeekOfMonth(
new WeekOfMonth.Number(0));
assertEquals(
DateHelper.parseDate("2011-02-07"),
result.getTime());
result = test.endOfWeekOfMonth(
WeekOfMonth.Weeks.FOURTH);
assertEquals(
DateHelper.parseDate("2011-03-07"),
result.getTime());
}
public void testStartOfDayOfWeekOfMonth() throws ParseException{
CalendarUtils test = new CalendarUtils(
DateHelper.parseDateTime("2011-06-15 12:45"),
TimeZone.getDefault());
Calendar result = test.dayOfWeekInMonth(
DayOfWeek.Days.FRIDAY, WeekOfMonth.Weeks.FIRST);
assertEquals(
DateHelper.parseDate("2011-06-03"),
result.getTime());
result = test.dayOfWeekInMonth(
DayOfWeek.Days.FRIDAY, WeekOfMonth.Weeks.SECOND);
assertEquals(
DateHelper.parseDate("2011-06-10"),
result.getTime());
result = test.dayOfWeekInMonth(
DayOfWeek.Days.FRIDAY, WeekOfMonth.Weeks.LAST);
assertEquals(
DateHelper.parseDate("2011-06-24"),
result.getTime());
result = test.dayOfWeekInMonth(
DayOfWeek.Days.FRIDAY, new WeekOfMonth.Number(0));
assertEquals(
DateHelper.parseDate("2011-05-27"),
result.getTime());
result = test.dayOfWeekInMonth(
DayOfWeek.Days.FRIDAY, WeekOfMonth.Weeks.PENULTIMATE);
assertEquals(
DateHelper.parseDate("2011-06-17"),
result.getTime());
result = test.dayOfWeekInMonth(
DayOfWeek.Days.FRIDAY, WeekOfMonth.Weeks.FIFTH);
assertEquals(
DateHelper.parseDate("2011-07-01"),
result.getTime());
}
public void testStartOfDay() throws ParseException {
CalendarUtils test = new CalendarUtils(
DateHelper.parseDateTime("2011-06-15 12:45"),
TimeZone.getDefault());
Calendar result = test.startOfDay();
assertEquals(DateHelper.parseDateTime("2011-06-15 00:00"),
result.getTime());
}
public void testEndOfDay() throws ParseException {
CalendarUtils test = new CalendarUtils(
DateHelper.parseDateTime("2011-06-15 12:45"),
TimeZone.getDefault());
Calendar result = test.endOfDay();
assertEquals(DateHelper.parseDateTime("2011-06-16 00:00"),
result.getTime());
}
}