package org.oddjob.schedules; import java.text.ParseException; import java.util.Date; import java.util.HashMap; import junit.framework.TestCase; import org.oddjob.arooa.utils.DateHelper; import org.oddjob.schedules.schedules.IntervalSchedule; import org.oddjob.schedules.schedules.DailySchedule; import org.oddjob.tools.ManualClock; import org.oddjob.util.Clock; public class ScheduleCalculatorTest2 extends TestCase { class OurClock implements Clock { boolean boobyTrapped; public Date getDate() { if (boobyTrapped) { throw new RuntimeException(); } else { try { return DateHelper.parseDateTime("2009-02-15 13:51"); } catch (ParseException e) { throw new RuntimeException(e); } } } } class Results implements ScheduleListener { Date scheduleDate; Date retryDate; boolean failed; @Override public void complete(Date scheduleDate, ScheduleResult lastComplete) { throw new RuntimeException("Unexpected."); } @Override public void failed(Date scheduleDate) { this.scheduleDate = scheduleDate; retryDate = null; failed = true; } @Override public void initialised(Date scheduleDate) { this.scheduleDate = scheduleDate; } @Override public void retry(Date scheduleDate, Date retryDate) { if (!scheduleDate.equals(this.scheduleDate)) { throw new RuntimeException(); } this.retryDate = retryDate; } } public void testUserGuideScheduleExample() throws ParseException { DailySchedule schedule = new DailySchedule(); schedule.setFrom("07:00"); DailySchedule retry = new DailySchedule(); retry.setFrom("07:00"); retry.setTo("14:00"); IntervalSchedule interval = new IntervalSchedule(); interval.setInterval("00:15"); retry.setRefinement(interval); OurClock clock = new OurClock(); ScheduleCalculator test = new ScheduleCalculator(clock, schedule, retry); Results results = new Results(); test.addScheduleListener(results); test.initialise(null, new HashMap<Object, Object>()); assertEquals(DateHelper.parseDateTime("2009-02-15 07:00"), results.scheduleDate); test.calculateRetry(); assertEquals(DateHelper.parseDateTime("2009-02-15 14:00"), results.retryDate); // don't use clock again. clock.boobyTrapped = true; test.calculateRetry(); assertTrue(results.failed); assertEquals(DateHelper.parseDateTime("2009-02-16 07:00"), results.scheduleDate); } public void testUserGuideScheduleExampleLateStart() throws ParseException { DailySchedule schedule = new DailySchedule(); schedule.setFrom("07:00"); DailySchedule retry = new DailySchedule(); retry.setFrom("07:00"); retry.setTo("14:00"); IntervalSchedule interval = new IntervalSchedule(); interval.setInterval("00:15"); retry.setRefinement(interval); Clock clock = new ManualClock("2009-02-15 20:00"); ScheduleCalculator test = new ScheduleCalculator(clock, schedule, retry); Results results = new Results(); test.addScheduleListener(results); test.initialise(null, new HashMap<Object, Object>()); assertEquals(DateHelper.parseDateTime("2009-02-15 07:00"), results.scheduleDate); test.calculateRetry(); assertTrue(results.failed); assertEquals(DateHelper.parseDateTime("2009-02-16 07:00"), results.scheduleDate); } class Results2 implements ScheduleListener { Date scheduleDate; @Override public void complete(Date scheduleDate, ScheduleResult lastComplete) { this.scheduleDate = scheduleDate; } @Override public void failed(Date scheduleDate) { throw new RuntimeException("Unexpected."); } @Override public void initialised(Date scheduleDate) { this.scheduleDate = scheduleDate; } @Override public void retry(Date scheduleDate, Date retryDate) { throw new RuntimeException("Unexpected."); } } public void testClockNotUsedAfterInitialise() throws ParseException { IntervalSchedule interval = new IntervalSchedule(); interval.setInterval("00:15"); OurClock clock = new OurClock(); ScheduleCalculator test = new ScheduleCalculator(clock, interval, (Schedule) null); Results2 results = new Results2(); test.addScheduleListener(results); test.initialise(null, new HashMap<Object, Object>()); assertEquals(DateHelper.parseDateTime("2009-02-15 13:51"), results.scheduleDate); // don't use clock again. clock.boobyTrapped = true; test.calculateComplete(); assertEquals(DateHelper.parseDateTime("2009-02-15 14:06"), results.scheduleDate); test.calculateComplete(); assertEquals(DateHelper.parseDateTime("2009-02-15 14:21"), results.scheduleDate); } }