11/*
2- * Copyright 2002-2009 the original author or authors.
2+ * Copyright 2002-2010 the original author or authors.
33 *
44 * Licensed under the Apache License, Version 2.0 (the "License");
55 * you may not use this file except in compliance with the License.
1616
1717package org .springframework .scheduling .support ;
1818
19- import static org .junit .Assert .assertEquals ;
20-
2119import java .util .ArrayList ;
2220import java .util .Calendar ;
2321import java .util .Date ;
2422import java .util .GregorianCalendar ;
2523import java .util .List ;
2624import java .util .TimeZone ;
2725
26+ import static org .junit .Assert .*;
2827import org .junit .Before ;
2928import org .junit .Test ;
3029import org .junit .runner .RunWith ;
3130import org .junit .runners .Parameterized ;
3231import org .junit .runners .Parameterized .Parameters ;
32+
3333import org .springframework .scheduling .TriggerContext ;
3434
3535/**
3636 * @author Dave Syer
3737 * @author Mark Fisher
38+ * @author Juergen Hoeller
3839 */
3940@ RunWith (Parameterized .class )
4041public class CronTriggerTests {
@@ -45,6 +46,7 @@ public class CronTriggerTests {
4546
4647 private final TimeZone timeZone ;
4748
49+
4850 public CronTriggerTests (Date date , TimeZone timeZone ) {
4951 this .timeZone = timeZone ;
5052 this .date = date ;
@@ -58,9 +60,6 @@ public static List<Object[]> getParameters() {
5860 return list ;
5961 }
6062
61- /**
62- * @param calendar
63- */
6463 private void roundup (Calendar calendar ) {
6564 calendar .add (Calendar .SECOND , 1 );
6665 calendar .set (Calendar .MILLISECOND , 0 );
@@ -106,6 +105,17 @@ public void testIncrementSecondByOne() throws Exception {
106105 assertEquals (calendar .getTime (), trigger .nextExecutionTime (context ));
107106 }
108107
108+ @ Test
109+ public void testIncrementSecondWithPreviousExecutionTooEarly () throws Exception {
110+ CronTrigger trigger = new CronTrigger ("11 * * * * *" , timeZone );
111+ calendar .set (Calendar .SECOND , 11 );
112+ SimpleTriggerContext context = new SimpleTriggerContext ();
113+ context .update (calendar .getTime (), new Date (calendar .getTimeInMillis () - 100 ),
114+ new Date (calendar .getTimeInMillis () - 90 ));
115+ calendar .add (Calendar .MINUTE , 1 );
116+ assertEquals (calendar .getTime (), trigger .nextExecutionTime (context ));
117+ }
118+
109119 @ Test
110120 public void testIncrementSecondAndRollover () throws Exception {
111121 CronTrigger trigger = new CronTrigger ("10 * * * * *" , timeZone );
@@ -126,28 +136,29 @@ public void testSecondRange() throws Exception {
126136 }
127137
128138 @ Test
129- public void testIncrementMinuteByOne () throws Exception {
130- CronTrigger trigger = new CronTrigger ("0 11 * * * *" , timeZone );
139+ public void testIncrementMinute () throws Exception {
140+ CronTrigger trigger = new CronTrigger ("0 * * * * *" , timeZone );
131141 calendar .set (Calendar .MINUTE , 10 );
132142 Date date = calendar .getTime ();
133143 calendar .add (Calendar .MINUTE , 1 );
134144 calendar .set (Calendar .SECOND , 0 );
135- TriggerContext context = getTriggerContext (date );
136- assertEquals (calendar .getTime (), trigger .nextExecutionTime (context ));
145+ TriggerContext context1 = getTriggerContext (date );
146+ date = trigger .nextExecutionTime (context1 );
147+ assertEquals (calendar .getTime (), date );
148+ calendar .add (Calendar .MINUTE , 1 );
149+ TriggerContext context2 = getTriggerContext (date );
150+ date = trigger .nextExecutionTime (context2 );
151+ assertEquals (calendar .getTime (), date );
137152 }
138153
139154 @ Test
140- public void testIncrementMinute () throws Exception {
141- CronTrigger trigger = new CronTrigger ("0 * * * * *" , timeZone );
155+ public void testIncrementMinuteByOne () throws Exception {
156+ CronTrigger trigger = new CronTrigger ("0 11 * * * *" , timeZone );
142157 calendar .set (Calendar .MINUTE , 10 );
143- Date date = calendar .getTime ();
158+ TriggerContext context = getTriggerContext ( calendar .getTime () );
144159 calendar .add (Calendar .MINUTE , 1 );
145160 calendar .set (Calendar .SECOND , 0 );
146- TriggerContext context1 = getTriggerContext (date );
147- assertEquals (calendar .getTime (), date = trigger .nextExecutionTime (context1 ));
148- calendar .add (Calendar .MINUTE , 1 );
149- TriggerContext context2 = getTriggerContext (date );
150- assertEquals (calendar .getTime (), date = trigger .nextExecutionTime (context2 ));
161+ assertEquals (calendar .getTime (), trigger .nextExecutionTime (context ));
151162 }
152163
153164 @ Test
@@ -612,10 +623,7 @@ public void testWhitespace() throws Exception {
612623 assertEquals (trigger1 , trigger2 );
613624 }
614625
615- /**
616- * @param trigger
617- * @param calendar
618- */
626+
619627 private void assertMatchesNextSecond (CronTrigger trigger , Calendar calendar ) {
620628 Date date = calendar .getTime ();
621629 roundup (calendar );
0 commit comments