/*
* JBoss, Home of Professional Open Source
* Copyright 2005, JBoss Inc., and individual contributors as indicated
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jbpm.calendar;
import java.util.Calendar;
import java.util.Date;
import org.jbpm.AbstractJbpmTestCase;
public class BusinessCalendarTest extends AbstractJbpmTestCase {
static BusinessCalendar businessCalendar = new BusinessCalendar();
public void testNonBusinessSecondAddition() {
Calendar calendar = Calendar.getInstance();
calendar.set(2005, Calendar.APRIL, 7, 10, 30, 0);
calendar.set(Calendar.MILLISECOND, 0);
Date start = calendar.getTime();
calendar.add(Calendar.SECOND, 20);
Date expected = calendar.getTime();
Date actual = businessCalendar.add(start, new Duration("20 seconds"));
assertEquals(expected, actual);
}
public void testNonBusinessMinuteAddition() {
Calendar calendar = Calendar.getInstance();
calendar.set(2005, Calendar.APRIL, 7, 11, 55, 0);
calendar.set(Calendar.MILLISECOND, 0);
Date start = calendar.getTime();
calendar.add(Calendar.MINUTE, 10);
Date expected = calendar.getTime();
assertEquals(expected, businessCalendar.add(start, new Duration("10 minutes")));
}
public void testNonBusinessFractionalDurationAddition() {
Calendar calendar = Calendar.getInstance();
calendar.set(2008, Calendar.FEBRUARY, 5, 6, 30, 45);
calendar.set(Calendar.MILLISECOND, 125);
Date start = calendar.getTime();
calendar.add(Calendar.HOUR, 7);
calendar.add(Calendar.MINUTE, 45);
Date expected = calendar.getTime();
assertEquals(expected, businessCalendar.add(start, new Duration("7.75 hours")));
}
public void testNonBusinessDayAddition() {
Calendar calendar = Calendar.getInstance();
calendar.set(2005, Calendar.FEBRUARY, 5, 6, 30, 45);
calendar.set(Calendar.MILLISECOND, 125);
Date start = calendar.getTime();
calendar.add(Calendar.DAY_OF_MONTH, 10);
Date expected = calendar.getTime();
assertEquals(expected, businessCalendar.add(start, new Duration("10 days")));
}
public void testNonBusinessWeekAddition() {
Calendar calendar = Calendar.getInstance();
calendar.set(2008, Calendar.FEBRUARY, 5, 6, 30, 45);
calendar.set(Calendar.MILLISECOND, 125);
Date start = calendar.getTime();
calendar.add(Calendar.WEEK_OF_YEAR, 5);
Date expected = calendar.getTime();
assertEquals(expected, businessCalendar.add(start, new Duration("5 weeks")));
}
public void testNonBusinessMonthAddition() {
Calendar calendar = Calendar.getInstance();
calendar.set(2008, Calendar.FEBRUARY, 5, 6, 30, 45);
calendar.set(Calendar.MILLISECOND, 125);
Date start = calendar.getTime();
calendar.add(Calendar.MONTH, 3);
Date expected = calendar.getTime();
assertEquals(expected, businessCalendar.add(start, new Duration("3 months")));
}
public void testNonBusinessYearAddition() {
Calendar calendar = Calendar.getInstance();
calendar.set(2008, Calendar.FEBRUARY, 5, 6, 30, 45);
calendar.set(Calendar.MILLISECOND, 125);
Date start = calendar.getTime();
calendar.add(Calendar.YEAR, 1);
Date expected = calendar.getTime();
assertEquals(expected, businessCalendar.add(start, new Duration("1 year")));
}
public void testBusinessDurationAdditionOverBusinessTime() {
Calendar calendar = Calendar.getInstance();
calendar.set(2005, Calendar.APRIL, 7, 11, 55, 0);
calendar.set(Calendar.MILLISECOND, 0);
Date start = calendar.getTime();
calendar.add(Calendar.MINUTE, 1);
Date expected = calendar.getTime();
assertEquals(expected, businessCalendar.add(start, new Duration("1 business minute")));
}
public void testBusinessDurationAdditionOverLunchBreak() {
Calendar calendar = Calendar.getInstance();
calendar.set(2005, Calendar.APRIL, 7, 11, 55, 0);
calendar.set(Calendar.MILLISECOND, 0);
Date start = calendar.getTime();
calendar.add(Calendar.MINUTE, 10);
// lunch break spans 30 minutes
calendar.add(Calendar.MINUTE, 30);
Date expected = calendar.getTime();
assertEquals(expected, businessCalendar.add(start, new Duration("10 business minutes")));
}
public void testBusinessDurationAdditionOverDayBreak() {
Calendar calendar = Calendar.getInstance();
calendar.set(2005, Calendar.APRIL, 7, 16, 55, 0);
calendar.set(Calendar.MILLISECOND, 0);
Date start = calendar.getTime();
calendar.add(Calendar.MINUTE, 10);
// there are 16 hours between 17:00 and 9:00
calendar.add(Calendar.HOUR, 16);
Date expected = calendar.getTime();
assertEquals(expected, businessCalendar.add(start, new Duration("10 business minutes")));
}
public void testBusinessDurationAdditionOverHoliday() {
Calendar calendar = Calendar.getInstance();
calendar.set(2010, Calendar.NOVEMBER, 10, 16, 55, 0);
calendar.set(Calendar.MILLISECOND, 0);
Date start = calendar.getTime();
calendar.add(Calendar.MINUTE, 10);
// there are 16 hours between 17:00 and 9:00
calendar.add(Calendar.HOUR, 16);
// holiday
calendar.add(Calendar.DAY_OF_MONTH, 1);
Date expected = calendar.getTime();
assertEquals(expected, businessCalendar.add(start, new Duration("10 business minutes")));
}
public void testBusinessDurationAdditionOverWeekend() {
Calendar calendar = Calendar.getInstance();
calendar.set(2005, Calendar.APRIL, 8, 16, 55, 0);
calendar.set(Calendar.MILLISECOND, 0);
Date start = calendar.getTime();
calendar.add(Calendar.MINUTE, 10);
// there are 16 hours between 17:00 and 9:00
calendar.add(Calendar.HOUR, 16);
// weekend
calendar.add(Calendar.DAY_OF_MONTH, 2);
Date expected = calendar.getTime();
assertEquals(expected, businessCalendar.add(start, new Duration("10 business minutes")));
}
public void testTwoBusinessHoursOverLunch() {
Calendar calendar = Calendar.getInstance();
calendar.set(2005, Calendar.APRIL, 7, 11, 15, 0);
calendar.set(Calendar.MILLISECOND, 0);
Date start = calendar.getTime();
calendar.add(Calendar.HOUR, 2);
// lunch break spans 30 minutes
calendar.add(Calendar.MINUTE, 30);
Date expected = calendar.getTime();
assertEquals(expected, businessCalendar.add(start, new Duration("2 business hours")));
}
public void testBusinessDurationAdditionOutsideBusinessHours() {
Calendar calendar = Calendar.getInstance();
calendar.set(2005, Calendar.APRIL, 8, 12, 15, 0);
calendar.set(Calendar.MILLISECOND, 0);
Date start = calendar.getTime();
calendar.add(Calendar.MINUTE, 30);
// lunch break ends at 12:30
calendar.add(Calendar.MINUTE, 15);
Date expected = calendar.getTime();
assertEquals(expected, businessCalendar.add(start, new Duration("30 business minutes")));
}
public void testBusinessDurationAdditionOutsideBusinessHoursOverWeekend() {
Calendar calendar = Calendar.getInstance();
calendar.set(2005, Calendar.APRIL, 8, 12, 15, 0);
calendar.set(Calendar.MILLISECOND, 0);
Date start = calendar.getTime();
calendar.add(Calendar.HOUR, 5);
// lunch break ends at 12:30
calendar.add(Calendar.MINUTE, 15);
// there are 16 hours between 17:00 and 9:00
calendar.add(Calendar.HOUR, 16);
// weekend
calendar.add(Calendar.DAY_OF_MONTH, 2);
Date expected = calendar.getTime();
assertEquals(expected, businessCalendar.add(start, new Duration("5 business hours")));
}
public void testBusinessFractionalDurationAddition() {
Calendar calendar = Calendar.getInstance();
calendar.set(2005, Calendar.FEBRUARY, 7, 9, 30, 0);
calendar.set(Calendar.MILLISECOND, 0);
Date start = calendar.getTime();
calendar.add(Calendar.HOUR, 7);
calendar.add(Calendar.MINUTE, 45);
// lunch break spans 30 minutes
calendar.add(Calendar.MINUTE, 30);
// there are 16 hours between 17:00 and 9:00
calendar.add(Calendar.HOUR, 16);
Date expected = calendar.getTime();
assertEquals(expected, businessCalendar.add(start, new Duration("7.75 business hours")));
}
public void testBusinessDayAddition() {
Calendar calendar = Calendar.getInstance();
calendar.set(2005, Calendar.FEBRUARY, 7, 9, 30, 0);
calendar.set(Calendar.MILLISECOND, 0);
Date start = calendar.getTime();
calendar.set(Calendar.DAY_OF_MONTH, 21);
Date expected = calendar.getTime();
assertEquals(expected, businessCalendar.add(start, new Duration("10 business days")));
}
public void testBusinessWeekAddition() {
Calendar calendar = Calendar.getInstance();
calendar.set(2005, Calendar.FEBRUARY, 7, 9, 30, 0);
calendar.set(Calendar.MILLISECOND, 0);
Date start = calendar.getTime();
calendar.set(Calendar.MONTH, Calendar.MARCH);
calendar.set(Calendar.DAY_OF_MONTH, 14);
Date expected = calendar.getTime();
assertEquals(expected, businessCalendar.add(start, new Duration("5 business weeks")));
}
public void testBusinessMonthAddition() {
Calendar calendar = Calendar.getInstance();
calendar.set(2010, Calendar.FEBRUARY, 8, 9, 30, 0);
calendar.set(Calendar.MILLISECOND, 0);
Date start = calendar.getTime();
calendar.set(Calendar.MONTH, Calendar.MAY);
calendar.set(Calendar.DAY_OF_MONTH, 7);
Date expected = calendar.getTime();
assertEquals(expected, businessCalendar.add(start, new Duration("3 business months")));
}
public void testBusinessYearAddition() {
Calendar calendar = Calendar.getInstance();
calendar.set(2009, Calendar.DECEMBER, 28, 9, 30, 0);
calendar.set(Calendar.MILLISECOND, 0);
Date start = calendar.getTime();
calendar.set(Calendar.YEAR, 2010);
Date expected = calendar.getTime();
assertEquals(expected, businessCalendar.add(start, new Duration("1 business year")));
}
}