/* * (c) Rob Gordon 2005 */ package org.oddjob.schedules.schedules; import java.text.ParseException; import junit.framework.TestCase; import org.oddjob.OddjobDescriptorFactory; import org.oddjob.arooa.ArooaDescriptor; import org.oddjob.arooa.ArooaParseException; import org.oddjob.arooa.standard.StandardFragmentParser; import org.oddjob.arooa.utils.DateHelper; import org.oddjob.arooa.xml.XMLConfiguration; import org.oddjob.schedules.Interval; import org.oddjob.schedules.IntervalTo; import org.oddjob.schedules.Schedule; import org.oddjob.schedules.ScheduleContext; import org.oddjob.schedules.ScheduleRoller; import org.oddjob.schedules.units.DayOfWeek; public class IntervalScheduleTest extends TestCase { public void testSimple() throws ParseException { IntervalSchedule test = new IntervalSchedule(); test.setInterval("00:00:05"); ScheduleRoller roller = new ScheduleRoller(test); Interval[] results = roller.resultsFrom( DateHelper.parseDateTime("2005-11-25 10:00")); IntervalTo expected; expected = new IntervalTo( DateHelper.parseDateTime("2005-11-25 10:00:00"), DateHelper.parseDateTime("2005-11-25 10:00:05")); assertEquals(expected, results[0]); expected = new IntervalTo( DateHelper.parseDateTime("2005-11-25 10:00:05"), DateHelper.parseDateTime("2005-11-25 10:00:10")); assertEquals(expected, results[1]); expected = new IntervalTo( DateHelper.parseDateTime("2005-11-25 10:00:10"), DateHelper.parseDateTime("2005-11-25 10:00:15")); assertEquals(expected, results[2]); } public void testSimpleConstrained() throws ParseException { TimeSchedule time = new TimeSchedule(); time.setFrom("09:55"); IntervalSchedule test = new IntervalSchedule(); test.setInterval("00:00:05"); time.setRefinement(test); ScheduleRoller roller = new ScheduleRoller(time); Interval[] results = roller.resultsFrom( DateHelper.parseDateTime("2005-11-25 10:00")); IntervalTo expected; expected = new IntervalTo( DateHelper.parseDateTime("2005-11-25 10:00:00"), DateHelper.parseDateTime("2005-11-25 10:00:05")); assertEquals(expected, results[0]); // the same even in the middle results = roller.resultsFrom( DateHelper.parseDateTime("2005-11-25 10:00:04")); assertEquals(expected, results[0]); expected = new IntervalTo( DateHelper.parseDateTime("2005-11-25 10:00:05"), DateHelper.parseDateTime("2005-11-25 10:00:10")); assertEquals(expected, results[1]); expected = new IntervalTo( DateHelper.parseDateTime("2005-11-25 10:00:10"), DateHelper.parseDateTime("2005-11-25 10:00:15")); assertEquals(expected, results[2]); } /** * An interval that extends past the parent interval. * * @throws ParseException */ public void testEvery7HoursOnWednesday() throws ParseException { WeeklySchedule schedule = new WeeklySchedule(); schedule.setOn(DayOfWeek.Days.WEDNESDAY); IntervalSchedule test = new IntervalSchedule(); test.setInterval("7:00"); schedule.setRefinement(test); ScheduleRoller roller = new ScheduleRoller(schedule); Interval[] results = roller.resultsFrom( DateHelper.parseDateTime("2009-02-18 10:00")); IntervalTo expected; expected = new IntervalTo( DateHelper.parseDateTime("2009-02-18 07:00"), DateHelper.parseDateTime("2009-02-18 14:00")); assertEquals(expected, results[0]); expected = new IntervalTo( DateHelper.parseDateTime("2009-02-18 14:00"), DateHelper.parseDateTime("2009-02-18 21:00")); assertEquals(expected, results[1]); expected = new IntervalTo( DateHelper.parseDateTime("2009-02-18 21:00"), DateHelper.parseDateTime("2009-02-19 04:00")); assertEquals(expected, results[2]); expected = new IntervalTo( DateHelper.parseDateTime("2009-02-25 00:00"), DateHelper.parseDateTime("2009-02-25 07:00")); assertEquals(expected, results[3]); } /** * An interval that extends past the parent interval * and now is in the extra bit. * * @throws ParseException */ public void testEvery7HoursOnWednesday2() throws ParseException { WeeklySchedule schedule = new WeeklySchedule(); schedule.setOn(DayOfWeek.Days.WEDNESDAY); IntervalSchedule test = new IntervalSchedule(); test.setInterval("7:00"); schedule.setRefinement(test); ScheduleRoller roller = new ScheduleRoller(schedule); Interval[] results = roller.resultsFrom( DateHelper.parseDateTime("2009-02-19 03:00")); IntervalTo expected; expected = new IntervalTo( DateHelper.parseDateTime("2009-02-18 21:00"), DateHelper.parseDateTime("2009-02-19 04:00")); assertEquals(expected, results[0]); expected = new IntervalTo( DateHelper.parseDateTime("2009-02-25 00:00"), DateHelper.parseDateTime("2009-02-25 07:00")); assertEquals(expected, results[1]); } public void testOverMidnightWednesday() throws ParseException { WeeklySchedule day = new WeeklySchedule(); day.setOn(DayOfWeek.Days.WEDNESDAY); DailySchedule time = new DailySchedule(); time.setFrom("23:00"); time.setTo("02:00"); IntervalSchedule test = new IntervalSchedule(); test.setInterval("1:00"); day.setRefinement(time); time.setRefinement(test); ScheduleContext scheduleContext = new ScheduleContext( DateHelper.parseDateTime("2009-02-18")); Interval nextDue; IntervalTo expected = new IntervalTo( DateHelper.parseDateTime("2009-02-18 23:00"), DateHelper.parseDateTime("2009-02-19 00:00")); nextDue = day.nextDue(scheduleContext); assertEquals(expected, nextDue); scheduleContext = scheduleContext.move(expected.getToDate()); expected = new IntervalTo( DateHelper.parseDateTime("2009-02-19 00:00"), DateHelper.parseDateTime("2009-02-19 01:00")); nextDue = day.nextDue(scheduleContext); assertEquals(expected, nextDue); scheduleContext = scheduleContext.move(expected.getToDate()); expected = new IntervalTo( DateHelper.parseDateTime("2009-02-19 01:00"), DateHelper.parseDateTime("2009-02-19 02:00")); nextDue = day.nextDue(scheduleContext); assertEquals(expected, nextDue); } public void testInALargeParentInterval() throws ParseException { DateSchedule date = new DateSchedule(); date.setFrom("2000-01-01"); IntervalSchedule test = new IntervalSchedule(); test.setInterval("00:00:05"); date.setRefinement(test); ScheduleContext scheduleContext = new ScheduleContext( DateHelper.parseDateTime("2009-03-03 11:17:04:999")); IntervalTo expected = new IntervalTo( DateHelper.parseDateTime("2009-03-03 11:17:00"), DateHelper.parseDateTime("2009-03-03 11:17:05")); Interval result = date.nextDue(scheduleContext); assertEquals(expected, result); } public void testIntervalExample() throws ArooaParseException, ParseException { OddjobDescriptorFactory df = new OddjobDescriptorFactory(); ArooaDescriptor descriptor = df.createDescriptor( getClass().getClassLoader()); StandardFragmentParser parser = new StandardFragmentParser(descriptor); parser.parse(new XMLConfiguration( "org/oddjob/schedules/schedules/IntervalExample.xml", getClass().getClassLoader())); Schedule schedule = (Schedule) parser.getRoot(); Interval next = schedule.nextDue(new ScheduleContext( DateHelper.parseDateTime("2010-02-15 11:00"))); IntervalTo expected = new IntervalTo( DateHelper.parseDateTime("2010-02-15 11:00"), DateHelper.parseDateTime("2010-02-15 11:20")); assertEquals(expected, next); } public void testBadInterval() throws ParseException { IntervalSchedule test = new IntervalSchedule(); test.setInterval("00:00.500"); ScheduleContext scheduleContext = new ScheduleContext( DateHelper.parseDateTime("2012-05-01 12:00")); try { test.nextDue(scheduleContext); fail("Should fail."); } catch (IllegalStateException e) { // } } }