/*
* JBoss, Home of Professional Open Source.
* Copyright 2009, Red Hat Middleware LLC, and individual contributors
* as indicated by the @author tags. See the copyright.txt file 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.jboss.as.ejb3.timer.schedule;
import java.util.Calendar;
import java.util.GregorianCalendar;
import org.jboss.as.ejb3.timerservice.schedule.util.CalendarUtil;
import org.junit.Assert;
import org.junit.Test;
/**
* Tests {@link CalendarUtil}
*
* @author Jaikiran Pai
* @version $Revision: $
*/
public class CalendarUtilTestCase {
/**
* Tests that the {@link CalendarUtil#getLastDateOfMonth(java.util.Calendar)} returns the correct
* date for various months.
*/
@Test
public void testLastDateOfMonth() {
// check last date of march
Calendar march = new GregorianCalendar();
march.set(Calendar.MONTH, Calendar.MARCH);
march.set(Calendar.DAY_OF_MONTH, 1);
int lastDateOfMarch = CalendarUtil.getLastDateOfMonth(march);
Assert.assertEquals("Unexpected last date for march", 31, lastDateOfMarch);
// check for april
Calendar april = new GregorianCalendar();
april.set(Calendar.MONTH, Calendar.APRIL);
april.set(Calendar.DAY_OF_MONTH, 1);
int lastDateOfApril = CalendarUtil.getLastDateOfMonth(april);
Assert.assertEquals("Unexpected last date for april", 30, lastDateOfApril);
// check of february (non-leap year)
Calendar nonLeapFebruary = new GregorianCalendar();
nonLeapFebruary.set(Calendar.MONTH, Calendar.FEBRUARY);
nonLeapFebruary.set(Calendar.YEAR, 2010);
nonLeapFebruary.set(Calendar.DAY_OF_MONTH, 1);
int lastDateOfNonLeapFebruary = CalendarUtil.getLastDateOfMonth(nonLeapFebruary);
Assert.assertEquals("Unexpected last date for non-leap february", 28, lastDateOfNonLeapFebruary);
// check for february (leap year)
Calendar leapFebruary = new GregorianCalendar();
leapFebruary.set(Calendar.MONTH, Calendar.FEBRUARY);
leapFebruary.set(Calendar.YEAR, 2012);
leapFebruary.set(Calendar.DAY_OF_MONTH, 1);
int lastDateOfLeapFebruary = CalendarUtil.getLastDateOfMonth(leapFebruary);
Assert.assertEquals("Unexpected last date for leap february", 29, lastDateOfLeapFebruary);
}
@Test
public void test1stXXXDay() {
final int FIRST_WEEK = 1;
// 1st Sun of July 2010 (hardcoded, after checking with the system calendar)
int expectedDateOfFirstSunOfJuly2010 = 4;
Calendar july2010 = new GregorianCalendar();
july2010.set(Calendar.DAY_OF_MONTH, 1);
july2010.set(Calendar.MONTH, Calendar.JULY);
july2010.set(Calendar.YEAR, 2010);
int dateOfFirstSunOfJuly2010 = CalendarUtil.getNthDayOfMonth(july2010, FIRST_WEEK, Calendar.SUNDAY);
Assert.assertEquals("Unexpected date for 1st sunday of July 2010", expectedDateOfFirstSunOfJuly2010,
dateOfFirstSunOfJuly2010);
// 1st Mon of June 2009
int expectedDateOfFirstMonOfJune2009 = 1;
Calendar june2009 = new GregorianCalendar();
june2009.set(Calendar.DAY_OF_MONTH, 1);
june2009.set(Calendar.MONTH, Calendar.JUNE);
june2009.set(Calendar.YEAR, 2009);
int dateOfFirstMonJune2009 = CalendarUtil.getNthDayOfMonth(june2009, FIRST_WEEK, Calendar.MONDAY);
Assert.assertEquals("Unexpected date for 1st monday of June 2009", expectedDateOfFirstMonOfJune2009,
dateOfFirstMonJune2009);
// 1st Tue of Feb 2012
int expectedDateOfFirstTueOfFeb2012 = 7;
Calendar feb2012 = new GregorianCalendar();
feb2012.set(Calendar.DAY_OF_MONTH, 1);
feb2012.set(Calendar.MONTH, Calendar.FEBRUARY);
feb2012.set(Calendar.YEAR, 2012);
int dateOfFirstTueFeb2012 = CalendarUtil.getNthDayOfMonth(feb2012, FIRST_WEEK, Calendar.TUESDAY);
Assert.assertEquals("Unexpected date for 1st tuesday of Feb 2012", expectedDateOfFirstTueOfFeb2012,
dateOfFirstTueFeb2012);
// 1st Wed of Jan 2006
int expectedDateOfFirstMonOfJan2006 = 4;
Calendar jan2006 = new GregorianCalendar();
jan2006.set(Calendar.DAY_OF_MONTH, 1);
jan2006.set(Calendar.MONTH, Calendar.JANUARY);
jan2006.set(Calendar.YEAR, 2006);
int dateOfFirstWedJan2006 = CalendarUtil.getNthDayOfMonth(jan2006, FIRST_WEEK, Calendar.WEDNESDAY);
Assert.assertEquals("Unexpected date for 1st wednesday of Jan 2006", expectedDateOfFirstMonOfJan2006,
dateOfFirstWedJan2006);
// 1st Thu of June 1999
int expectedDateOfFirstThuOfSep1999 = 2;
Calendar sep1999 = new GregorianCalendar();
sep1999.set(Calendar.DAY_OF_MONTH, 1);
sep1999.set(Calendar.MONTH, Calendar.SEPTEMBER);
sep1999.set(Calendar.YEAR, 1999);
int dateOfFirstThuSep1999 = CalendarUtil.getNthDayOfMonth(sep1999, FIRST_WEEK, Calendar.THURSDAY);
Assert.assertEquals("Unexpected date for 1st thursday of September 1999", expectedDateOfFirstThuOfSep1999,
dateOfFirstThuSep1999);
// 1st Fri of Dec 2058
int expectedDateOfFirstFriOfDec2058 = 6;
Calendar dec2058 = new GregorianCalendar();
dec2058.set(Calendar.DAY_OF_MONTH, 1);
dec2058.set(Calendar.MONTH, Calendar.DECEMBER);
dec2058.set(Calendar.YEAR, 2058);
int dateOfFirstFriDec2058 = CalendarUtil.getNthDayOfMonth(dec2058, FIRST_WEEK, Calendar.FRIDAY);
Assert.assertEquals("Unexpected date for 1st friday of December 2058", expectedDateOfFirstFriOfDec2058,
dateOfFirstFriDec2058);
// 1st Sat of Aug 2000
int expectedDateOfFirstSatOfAug2000 = 5;
Calendar aug2000 = new GregorianCalendar();
aug2000.set(Calendar.DAY_OF_MONTH, 1);
aug2000.set(Calendar.MONTH, Calendar.AUGUST);
aug2000.set(Calendar.YEAR, 2000);
int dateOfFirstSatAug2000 = CalendarUtil.getNthDayOfMonth(aug2000, FIRST_WEEK, Calendar.SATURDAY);
Assert.assertEquals("Unexpected date for 1st saturday of August 2000", expectedDateOfFirstSatOfAug2000,
dateOfFirstSatAug2000);
}
@Test
public void test2ndXXXDay() {
final int SECOND_WEEK = 2;
// 2nd Sun of May 2010 (hardcoded, after checking with the system calendar)
int expectedDateOfSecondSunOfMay2010 = 9;
Calendar may2010 = new GregorianCalendar();
may2010.set(Calendar.MONTH, Calendar.MAY);
may2010.set(Calendar.YEAR, 2010);
int dateOfSecondSunOfMay2010 = CalendarUtil.getNthDayOfMonth(may2010, SECOND_WEEK, Calendar.SUNDAY);
Assert.assertEquals("Unexpected date for 2nd sunday of May 2010", expectedDateOfSecondSunOfMay2010,
dateOfSecondSunOfMay2010);
// 2nd Mon of Feb 2111
int expectedDateOfSecondMonOfFeb2111 = 9;
Calendar feb2111 = new GregorianCalendar();
feb2111.set(Calendar.MONTH, Calendar.FEBRUARY);
feb2111.set(Calendar.YEAR, 2111);
int dateOfSecondMonFeb2111 = CalendarUtil.getNthDayOfMonth(feb2111, SECOND_WEEK, Calendar.MONDAY);
Assert.assertEquals("Unexpected date for 2nd monday of Feb 2111", expectedDateOfSecondMonOfFeb2111,
dateOfSecondMonFeb2111);
// 2nd Tue of Oct 2016
int expectedDateOfSecondTueOct2016 = 11;
Calendar oct2016 = new GregorianCalendar();
oct2016.set(Calendar.MONTH, Calendar.OCTOBER);
oct2016.set(Calendar.YEAR, 2016);
int dateOfSecondTueOct2016 = CalendarUtil.getNthDayOfMonth(oct2016, SECOND_WEEK, Calendar.TUESDAY);
Assert.assertEquals("Unexpected date for 2nd tuesday of Oct 2016", expectedDateOfSecondTueOct2016,
dateOfSecondTueOct2016);
// 2nd Wed of Apr 2010
int expectedDateOfSecWedApr2010 = 14;
Calendar apr2010 = new GregorianCalendar();
apr2010.set(Calendar.DAY_OF_MONTH, 1);
apr2010.set(Calendar.MONTH, Calendar.APRIL);
apr2010.set(Calendar.YEAR, 2010);
int dateOfSecondWedApril2010 = CalendarUtil.getNthDayOfMonth(apr2010, SECOND_WEEK, Calendar.WEDNESDAY);
Assert.assertEquals("Unexpected date for 2nd wednesday of April 2010", expectedDateOfSecWedApr2010,
dateOfSecondWedApril2010);
// 2nd Thu of Mar 2067
int expectedDateOfSecondThuMar2067 = 10;
Calendar march2067 = new GregorianCalendar();
march2067.set(Calendar.DAY_OF_MONTH, 1);
march2067.set(Calendar.MONTH, Calendar.MARCH);
march2067.set(Calendar.YEAR, 2067);
int dateOfSecThuMarch2067 = CalendarUtil.getNthDayOfMonth(march2067, SECOND_WEEK, Calendar.THURSDAY);
Assert.assertEquals("Unexpected date for 2nd thursday of March 2067", expectedDateOfSecondThuMar2067,
dateOfSecThuMarch2067);
// 2nd Fri of Nov 2020
int expectedDateOfSecFriNov2020 = 13;
Calendar nov2020 = new GregorianCalendar();
nov2020.set(Calendar.DAY_OF_MONTH, 1);
nov2020.set(Calendar.MONTH, Calendar.NOVEMBER);
nov2020.set(Calendar.YEAR, 2020);
int dateOfFirstFriDec2058 = CalendarUtil.getNthDayOfMonth(nov2020, SECOND_WEEK, Calendar.FRIDAY);
Assert.assertEquals("Unexpected date for 2nd friday of November 2020", expectedDateOfSecFriNov2020,
dateOfFirstFriDec2058);
// 2nd Sat of Sep 2013
int expectedDateOfSecSatOfSep2013 = 14;
Calendar aug2000 = new GregorianCalendar();
aug2000.set(Calendar.DAY_OF_MONTH, 1);
aug2000.set(Calendar.MONTH, Calendar.SEPTEMBER);
aug2000.set(Calendar.YEAR, 2013);
int dateOfSecSatSep2013 = CalendarUtil.getNthDayOfMonth(aug2000, SECOND_WEEK, Calendar.SATURDAY);
Assert.assertEquals("Unexpected date for 2nd saturday of September 2013", expectedDateOfSecSatOfSep2013,
dateOfSecSatSep2013);
}
@Test
public void test3rdXXXDay() {
// 1st Sun of July 2010 (hardcoded, after checking with the system calendar)
int expectedDateOfFirstSunOfJuly2010 = 4;
Calendar july2010 = new GregorianCalendar();
july2010.set(Calendar.MONTH, Calendar.JULY);
july2010.set(Calendar.YEAR, 2010);
int dateOfFirstSunOfJuly2010 = CalendarUtil.getNthDayOfMonth(july2010, 1, Calendar.SUNDAY);
Assert.assertEquals("Unexpected date for 1st sunday of July 2010", expectedDateOfFirstSunOfJuly2010,
dateOfFirstSunOfJuly2010);
}
@Test
public void test4thXXXDay() {
// 1st Sun of July 2010 (hardcoded, after checking with the system calendar)
int expectedDateOfFirstSunOfJuly2010 = 4;
Calendar july2010 = new GregorianCalendar();
july2010.set(Calendar.MONTH, Calendar.JULY);
july2010.set(Calendar.YEAR, 2010);
int dateOfFirstSunOfJuly2010 = CalendarUtil.getNthDayOfMonth(july2010, 1, Calendar.SUNDAY);
Assert.assertEquals("Unexpected date for 1st sunday of July 2010", expectedDateOfFirstSunOfJuly2010,
dateOfFirstSunOfJuly2010);
}
@Test
public void test5thXXXDay() {
// 1st Sun of July 2010 (hardcoded, after checking with the system calendar)
int expectedDateOfFirstSunOfJuly2010 = 4;
Calendar july2010 = new GregorianCalendar();
july2010.set(Calendar.MONTH, Calendar.JULY);
july2010.set(Calendar.YEAR, 2010);
int dateOfFirstSunOfJuly2010 = CalendarUtil.getNthDayOfMonth(july2010, 1, Calendar.SUNDAY);
Assert.assertEquals("Unexpected date for 1st sunday of July 2010", expectedDateOfFirstSunOfJuly2010,
dateOfFirstSunOfJuly2010);
}
@Test
public void test1stSunday() {
// 1st Sun of July 2010 (hardcoded, after checking with the system calendar)
int expectedDateOfFirstSunOfJuly2010 = 4;
Calendar july2010 = new GregorianCalendar();
july2010.set(Calendar.MONTH, Calendar.JULY);
july2010.set(Calendar.YEAR, 2010);
int dateOfFirstSunOfJuly2010 = CalendarUtil.getNthDayOfMonth(july2010, 1, Calendar.SUNDAY);
Assert.assertEquals("Unexpected date for 1st sunday of July 2010", expectedDateOfFirstSunOfJuly2010,
dateOfFirstSunOfJuly2010);
}
}