/* * Copyright 2001-2009 Terracotta, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy * of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations * under the License. */ package org.quartz; import java.util.Date; import java.util.Calendar; import java.util.Locale; import java.util.TimeZone; import static org.quartz.DateBuilder.*; import static org.quartz.DateBuilder.MILLISECONDS_IN_DAY; import junit.framework.TestCase; /** * Unit test for JobDetail. */ public class DateBuilderTest extends TestCase { public void testBasicBuilding() { Date t = dateOf(10, 30, 0, 1, 7, 2013); // july 1 10:30:00 am Calendar vc = Calendar.getInstance(); vc.set(Calendar.YEAR, 2013); vc.set(Calendar.MONTH, Calendar.JULY); vc.set(Calendar.DAY_OF_MONTH, 1); vc.set(Calendar.HOUR_OF_DAY, 10); vc.set(Calendar.MINUTE, 30); vc.set(Calendar.SECOND, 0); vc.set(Calendar.MILLISECOND, 0); Date v = vc.getTime(); assertEquals("DateBuilder-produced date is not as expected.", t, v); } public void testBuilder() { Calendar vc = Calendar.getInstance(); vc.set(Calendar.YEAR, 2013); vc.set(Calendar.MONTH, Calendar.JULY); vc.set(Calendar.DAY_OF_MONTH, 1); vc.set(Calendar.HOUR_OF_DAY, 10); vc.set(Calendar.MINUTE, 30); vc.set(Calendar.SECOND, 0); vc.set(Calendar.MILLISECOND, 0); Date bd = newDate().inYear(2013).inMonth(JULY).onDay(1).atHourOfDay(10).atMinute(30).atSecond(0).build(); assertEquals("DateBuilder-produced date is not as expected.", vc.getTime(), bd); bd = newDate().inYear(2013).inMonthOnDay(JULY, 1).atHourMinuteAndSecond(10, 30, 0).build(); assertEquals("DateBuilder-produced date is not as expected.", vc.getTime(), bd); TimeZone tz = TimeZone.getTimeZone("GMT-4:00"); Locale lz = Locale.TAIWAN; vc = Calendar.getInstance(tz, lz); vc.set(Calendar.YEAR, 2013); vc.set(Calendar.MONTH, Calendar.JUNE); vc.set(Calendar.DAY_OF_MONTH, 1); vc.set(Calendar.HOUR_OF_DAY, 10); vc.set(Calendar.MINUTE, 33); vc.set(Calendar.SECOND, 12); vc.set(Calendar.MILLISECOND, 0); bd = newDate().inYear(2013).inMonth(JUNE).onDay(1).atHourOfDay(10).atMinute(33).atSecond(12).inTimeZone(tz).inLocale(lz).build(); assertEquals("DateBuilder-produced date is not as expected.", vc.getTime(), bd); bd = newDateInLocale(lz).inYear(2013).inMonth(JUNE).onDay(1).atHourOfDay(10).atMinute(33).atSecond(12).inTimeZone(tz).build(); assertEquals("DateBuilder-produced date is not as expected.", vc.getTime(), bd); bd = newDateInTimezone(tz).inYear(2013).inMonth(JUNE).onDay(1).atHourOfDay(10).atMinute(33).atSecond(12).inLocale(lz).build(); assertEquals("DateBuilder-produced date is not as expected.", vc.getTime(), bd); bd = newDateInTimeZoneAndLocale(tz, lz).inYear(2013).inMonth(JUNE).onDay(1).atHourOfDay(10).atMinute(33).atSecond(12).build(); assertEquals("DateBuilder-produced date is not as expected.", vc.getTime(), bd); } public void testEvensBuilders() { Calendar vc = Calendar.getInstance(); vc.set(Calendar.YEAR, 2013); vc.set(Calendar.MONTH, Calendar.JUNE); vc.set(Calendar.DAY_OF_MONTH, 1); vc.set(Calendar.HOUR_OF_DAY, 10); vc.set(Calendar.MINUTE, 33); vc.set(Calendar.SECOND, 12); vc.set(Calendar.MILLISECOND, 0); Calendar rd = (Calendar) vc.clone(); Date bd = newDate().inYear(2013).inMonth(JUNE).onDay(1).atHourOfDay(10).atMinute(33).atSecond(12).build(); assertEquals("DateBuilder-produced date is not as expected.", vc.getTime(), bd); rd.set(Calendar.MILLISECOND, 13); bd = evenSecondDateBefore(rd.getTime()); assertEquals("DateBuilder-produced date is not as expected.", vc.getTime(), bd); vc.set(Calendar.SECOND, 13); rd.set(Calendar.MILLISECOND, 13); bd = evenSecondDate(rd.getTime()); assertEquals("DateBuilder-produced date is not as expected.", vc.getTime(), bd); vc.set(Calendar.SECOND, 0); vc.set(Calendar.MINUTE, 34); rd.set(Calendar.SECOND, 13); bd = evenMinuteDate(rd.getTime()); assertEquals("DateBuilder-produced date is not as expected.", vc.getTime(), bd); vc.set(Calendar.SECOND, 0); vc.set(Calendar.MINUTE, 33); rd.set(Calendar.SECOND, 13); bd = evenMinuteDateBefore(rd.getTime()); assertEquals("DateBuilder-produced date is not as expected.", vc.getTime(), bd); vc.set(Calendar.SECOND, 0); vc.set(Calendar.MINUTE, 0); vc.set(Calendar.HOUR_OF_DAY, 11); rd.set(Calendar.SECOND, 13); bd = evenHourDate(rd.getTime()); assertEquals("DateBuilder-produced date is not as expected.", vc.getTime(), bd); vc.set(Calendar.SECOND, 0); vc.set(Calendar.MINUTE, 0); vc.set(Calendar.HOUR_OF_DAY, 10); rd.set(Calendar.SECOND, 13); bd = evenHourDateBefore(rd.getTime()); assertEquals("DateBuilder-produced date is not as expected.", vc.getTime(), bd); Date td = new Date(); bd = evenHourDateAfterNow(); vc.setTime(bd); assertEquals("DateBuilder-produced date is not as expected.", 0, vc.get(Calendar.MINUTE)); assertEquals("DateBuilder-produced date is not as expected.", 0, vc.get(Calendar.SECOND)); assertEquals("DateBuilder-produced date is not as expected.", 0, vc.get(Calendar.MILLISECOND)); assertTrue("DateBuilder-produced date is not as expected.", bd.after(td)); vc.set(Calendar.SECOND, 54); vc.set(Calendar.MINUTE, 13); vc.set(Calendar.HOUR_OF_DAY, 8); bd = nextGivenMinuteDate(vc.getTime(), 15); vc.setTime(bd); assertEquals("DateBuilder-produced date is not as expected.", 8, vc.get(Calendar.HOUR_OF_DAY)); assertEquals("DateBuilder-produced date is not as expected.", 15, vc.get(Calendar.MINUTE)); assertEquals("DateBuilder-produced date is not as expected.", 0, vc.get(Calendar.SECOND)); assertEquals("DateBuilder-produced date is not as expected.", 0, vc.get(Calendar.MILLISECOND)); } public void testGivenBuilders() { Calendar vc = Calendar.getInstance(); vc.set(Calendar.SECOND, 54); vc.set(Calendar.MINUTE, 13); vc.set(Calendar.HOUR_OF_DAY, 8); Date bd = nextGivenMinuteDate(vc.getTime(), 45); vc.setTime(bd); assertEquals("DateBuilder-produced date is not as expected.", 8, vc.get(Calendar.HOUR_OF_DAY)); assertEquals("DateBuilder-produced date is not as expected.", 45, vc.get(Calendar.MINUTE)); assertEquals("DateBuilder-produced date is not as expected.", 0, vc.get(Calendar.SECOND)); assertEquals("DateBuilder-produced date is not as expected.", 0, vc.get(Calendar.MILLISECOND)); vc.set(Calendar.SECOND, 54); vc.set(Calendar.MINUTE, 46); vc.set(Calendar.HOUR_OF_DAY, 8); bd = nextGivenMinuteDate(vc.getTime(), 45); vc.setTime(bd); assertEquals("DateBuilder-produced date is not as expected.", 9, vc.get(Calendar.HOUR_OF_DAY)); assertEquals("DateBuilder-produced date is not as expected.", 0, vc.get(Calendar.MINUTE)); assertEquals("DateBuilder-produced date is not as expected.", 0, vc.get(Calendar.SECOND)); assertEquals("DateBuilder-produced date is not as expected.", 0, vc.get(Calendar.MILLISECOND)); } public void testAtBuilders() { Calendar rd = Calendar.getInstance(); Calendar vc = Calendar.getInstance(); rd.setTime(new Date()); Date bd = todayAt(10, 33, 12); vc.setTime(bd); assertEquals("DateBuilder-produced date is not as expected.", 10, vc.get(Calendar.HOUR_OF_DAY)); assertEquals("DateBuilder-produced date is not as expected.", 33, vc.get(Calendar.MINUTE)); assertEquals("DateBuilder-produced date is not as expected.", 12, vc.get(Calendar.SECOND)); assertEquals("DateBuilder-produced date is not as expected.", 0, vc.get(Calendar.MILLISECOND)); assertEquals("DateBuilder-produced date is not as expected.", rd.get(Calendar.DAY_OF_YEAR), vc.get(Calendar.DAY_OF_YEAR)); rd.setTime(new Date()); rd.add(Calendar.MILLISECOND, (int)MILLISECONDS_IN_DAY); // increment the day (using this means on purpose - to test const) bd = tomorrowAt(10, 33, 12); vc.setTime(bd); assertEquals("DateBuilder-produced date is not as expected.", 10, vc.get(Calendar.HOUR_OF_DAY)); assertEquals("DateBuilder-produced date is not as expected.", 33, vc.get(Calendar.MINUTE)); assertEquals("DateBuilder-produced date is not as expected.", 12, vc.get(Calendar.SECOND)); assertEquals("DateBuilder-produced date is not as expected.", 0, vc.get(Calendar.MILLISECOND)); assertEquals("DateBuilder-produced date is not as expected.", rd.get(Calendar.DAY_OF_YEAR), vc.get(Calendar.DAY_OF_YEAR)); } public void testTranslate() { TimeZone tz1 = TimeZone.getTimeZone("GMT-2:00"); TimeZone tz2 = TimeZone.getTimeZone("GMT-4:00"); Calendar vc = Calendar.getInstance(tz1); vc.set(Calendar.YEAR, 2013); vc.set(Calendar.MONTH, Calendar.JUNE); vc.set(Calendar.DAY_OF_MONTH, 1); vc.set(Calendar.HOUR_OF_DAY, 10); vc.set(Calendar.MINUTE, 33); vc.set(Calendar.SECOND, 12); vc.set(Calendar.MILLISECOND, 0); vc.setTime( translateTime(vc.getTime(), tz1, tz2) ); assertEquals("DateBuilder-produced date is not as expected.", 12, vc.get(Calendar.HOUR_OF_DAY)); vc = Calendar.getInstance(tz2); vc.set(Calendar.YEAR, 2013); vc.set(Calendar.MONTH, Calendar.JUNE); vc.set(Calendar.DAY_OF_MONTH, 1); vc.set(Calendar.HOUR_OF_DAY, 10); vc.set(Calendar.MINUTE, 33); vc.set(Calendar.SECOND, 12); vc.set(Calendar.MILLISECOND, 0); vc.setTime( translateTime(vc.getTime(), tz2, tz1) ); assertEquals("DateBuilder-produced date is not as expected.", 8, vc.get(Calendar.HOUR_OF_DAY)); } public void testMonthTranslations() { Calendar vc = Calendar.getInstance(); Date bd = newDate().inYear(2013).inMonthOnDay(JANUARY, 1).atHourMinuteAndSecond(10, 30, 0).build(); vc.setTime(bd); assertEquals("DateBuilder-produced date is not as expected.", Calendar.JANUARY, vc.get(Calendar.MONTH)); bd = newDate().inYear(2013).inMonthOnDay(FEBRUARY, 1).atHourMinuteAndSecond(10, 30, 0).build(); vc.setTime(bd); assertEquals("DateBuilder-produced date is not as expected.", Calendar.FEBRUARY, vc.get(Calendar.MONTH)); bd = newDate().inYear(2013).inMonthOnDay(MARCH, 1).atHourMinuteAndSecond(10, 30, 0).build(); vc.setTime(bd); assertEquals("DateBuilder-produced date is not as expected.", Calendar.MARCH, vc.get(Calendar.MONTH)); bd = newDate().inYear(2013).inMonthOnDay(APRIL, 1).atHourMinuteAndSecond(10, 30, 0).build(); vc.setTime(bd); assertEquals("DateBuilder-produced date is not as expected.", Calendar.APRIL, vc.get(Calendar.MONTH)); bd = newDate().inYear(2013).inMonthOnDay(MAY, 1).atHourMinuteAndSecond(10, 30, 0).build(); vc.setTime(bd); assertEquals("DateBuilder-produced date is not as expected.", Calendar.MAY, vc.get(Calendar.MONTH)); bd = newDate().inYear(2013).inMonthOnDay(JUNE, 1).atHourMinuteAndSecond(10, 30, 0).build(); vc.setTime(bd); assertEquals("DateBuilder-produced date is not as expected.", Calendar.JUNE, vc.get(Calendar.MONTH)); bd = newDate().inYear(2013).inMonthOnDay(JULY, 1).atHourMinuteAndSecond(10, 30, 0).build(); vc.setTime(bd); assertEquals("DateBuilder-produced date is not as expected.", Calendar.JULY, vc.get(Calendar.MONTH)); bd = newDate().inYear(2013).inMonthOnDay(AUGUST, 1).atHourMinuteAndSecond(10, 30, 0).build(); vc.setTime(bd); assertEquals("DateBuilder-produced date is not as expected.", Calendar.AUGUST, vc.get(Calendar.MONTH)); bd = newDate().inYear(2013).inMonthOnDay(SEPTEMBER, 1).atHourMinuteAndSecond(10, 30, 0).build(); vc.setTime(bd); assertEquals("DateBuilder-produced date is not as expected.", Calendar.SEPTEMBER, vc.get(Calendar.MONTH)); bd = newDate().inYear(2013).inMonthOnDay(OCTOBER, 1).atHourMinuteAndSecond(10, 30, 0).build(); vc.setTime(bd); assertEquals("DateBuilder-produced date is not as expected.", Calendar.OCTOBER, vc.get(Calendar.MONTH)); bd = newDate().inYear(2013).inMonthOnDay(NOVEMBER, 1).atHourMinuteAndSecond(10, 30, 0).build(); vc.setTime(bd); assertEquals("DateBuilder-produced date is not as expected.", Calendar.NOVEMBER, vc.get(Calendar.MONTH)); bd = newDate().inYear(2013).inMonthOnDay(DECEMBER, 1).atHourMinuteAndSecond(10, 30, 0).build(); vc.setTime(bd); assertEquals("DateBuilder-produced date is not as expected.", Calendar.DECEMBER, vc.get(Calendar.MONTH)); } }