Browse Source

Migrate CronTriggerTests to @⁠ParameterizedClass

This commit migrates CronTriggerTests to @⁠ParameterizedClass as a proof
of concept for how this can be applied across the code base.

See gh-35833
pull/35843/head
Sam Brannen 1 month ago
parent
commit
fac8708857
  1. 376
      spring-context/src/test/java/org/springframework/scheduling/support/CronTriggerTests.java

376
spring-context/src/test/java/org/springframework/scheduling/support/CronTriggerTests.java

@ -16,19 +16,16 @@
package org.springframework.scheduling.support; package org.springframework.scheduling.support;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date; import java.util.Date;
import java.util.GregorianCalendar; import java.util.GregorianCalendar;
import java.util.List;
import java.util.TimeZone; import java.util.TimeZone;
import java.util.stream.Stream;
import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedClass;
import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource; import org.junit.jupiter.params.provider.FieldSource;
import org.springframework.scheduling.TriggerContext; import org.springframework.scheduling.TriggerContext;
@ -44,51 +41,55 @@ import static org.junit.jupiter.params.provider.Arguments.arguments;
* @author Juergen Hoeller * @author Juergen Hoeller
* @author Sam Brannen * @author Sam Brannen
*/ */
@ParameterizedClass
@FieldSource("parameters")
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
class CronTriggerTests { class CronTriggerTests {
static List<Arguments> parameters = List.of(
arguments(new Date(), TimeZone.getTimeZone("PST")),
arguments(new Date(), TimeZone.getTimeZone("CET")));
private final Calendar calendar = new GregorianCalendar(); private final Calendar calendar = new GregorianCalendar();
private final Date localDateTime;
private final TimeZone timeZone;
private void setup(Date localDateTime, TimeZone timeZone) {
CronTriggerTests(Date localDateTime, TimeZone timeZone) {
this.calendar.setTime(localDateTime); this.calendar.setTime(localDateTime);
this.calendar.setTimeZone(timeZone); this.calendar.setTimeZone(timeZone);
roundup(this.calendar); roundup(this.calendar);
this.localDateTime = localDateTime;
this.timeZone = timeZone;
} }
@ParameterizedCronTriggerTest @Test
void matchAll(Date localDateTime, TimeZone timeZone) { void matchAll() {
setup(localDateTime, timeZone);
CronTrigger trigger = new CronTrigger("* * * * * *", timeZone); CronTrigger trigger = new CronTrigger("* * * * * *", timeZone);
TriggerContext context = getTriggerContext(localDateTime); TriggerContext context = getTriggerContext(localDateTime);
assertThat(trigger.nextExecutionTime(context)).isEqualTo(this.calendar.getTime()); assertThat(trigger.nextExecutionTime(context)).isEqualTo(this.calendar.getTime());
} }
@ParameterizedCronTriggerTest @Test
void matchLastSecond(Date localDateTime, TimeZone timeZone) { void matchLastSecond() {
setup(localDateTime, timeZone);
CronTrigger trigger = new CronTrigger("* * * * * *", timeZone); CronTrigger trigger = new CronTrigger("* * * * * *", timeZone);
GregorianCalendar calendar = new GregorianCalendar(); GregorianCalendar calendar = new GregorianCalendar();
calendar.set(Calendar.SECOND, 58); calendar.set(Calendar.SECOND, 58);
assertMatchesNextSecond(trigger, calendar); assertMatchesNextSecond(trigger, calendar);
} }
@ParameterizedCronTriggerTest @Test
void matchSpecificSecond(Date localDateTime, TimeZone timeZone) { void matchSpecificSecond() {
setup(localDateTime, timeZone);
CronTrigger trigger = new CronTrigger("10 * * * * *", timeZone); CronTrigger trigger = new CronTrigger("10 * * * * *", timeZone);
GregorianCalendar calendar = new GregorianCalendar(); GregorianCalendar calendar = new GregorianCalendar();
calendar.set(Calendar.SECOND, 9); calendar.set(Calendar.SECOND, 9);
assertMatchesNextSecond(trigger, calendar); assertMatchesNextSecond(trigger, calendar);
} }
@ParameterizedCronTriggerTest @Test
void incrementSecondByOne(Date localDateTime, TimeZone timeZone) { void incrementSecondByOne() {
setup(localDateTime, timeZone);
CronTrigger trigger = new CronTrigger("11 * * * * *", timeZone); CronTrigger trigger = new CronTrigger("11 * * * * *", timeZone);
this.calendar.set(Calendar.SECOND, 10); this.calendar.set(Calendar.SECOND, 10);
Date localDate = this.calendar.getTime(); Date localDate = this.calendar.getTime();
@ -97,10 +98,8 @@ class CronTriggerTests {
assertThat(trigger.nextExecutionTime(context)).isEqualTo(this.calendar.getTime()); assertThat(trigger.nextExecutionTime(context)).isEqualTo(this.calendar.getTime());
} }
@ParameterizedCronTriggerTest @Test
void incrementSecondWithPreviousExecutionTooEarly(Date localDateTime, TimeZone timeZone) { void incrementSecondWithPreviousExecutionTooEarly() {
setup(localDateTime, timeZone);
CronTrigger trigger = new CronTrigger("11 * * * * *", timeZone); CronTrigger trigger = new CronTrigger("11 * * * * *", timeZone);
this.calendar.set(Calendar.SECOND, 11); this.calendar.set(Calendar.SECOND, 11);
SimpleTriggerContext context = new SimpleTriggerContext(); SimpleTriggerContext context = new SimpleTriggerContext();
@ -110,10 +109,8 @@ class CronTriggerTests {
assertThat(trigger.nextExecutionTime(context)).isEqualTo(this.calendar.getTime()); assertThat(trigger.nextExecutionTime(context)).isEqualTo(this.calendar.getTime());
} }
@ParameterizedCronTriggerTest @Test
void incrementSecondAndRollover(Date localDateTime, TimeZone timeZone) { void incrementSecondAndRollover() {
setup(localDateTime, timeZone);
CronTrigger trigger = new CronTrigger("10 * * * * *", timeZone); CronTrigger trigger = new CronTrigger("10 * * * * *", timeZone);
this.calendar.set(Calendar.SECOND, 11); this.calendar.set(Calendar.SECOND, 11);
Date localDate = this.calendar.getTime(); Date localDate = this.calendar.getTime();
@ -122,10 +119,8 @@ class CronTriggerTests {
assertThat(trigger.nextExecutionTime(context)).isEqualTo(this.calendar.getTime()); assertThat(trigger.nextExecutionTime(context)).isEqualTo(this.calendar.getTime());
} }
@ParameterizedCronTriggerTest @Test
void secondRange(Date localDateTime, TimeZone timeZone) { void secondRange() {
setup(localDateTime, timeZone);
CronTrigger trigger = new CronTrigger("10-15 * * * * *", timeZone); CronTrigger trigger = new CronTrigger("10-15 * * * * *", timeZone);
this.calendar.set(Calendar.SECOND, 9); this.calendar.set(Calendar.SECOND, 9);
assertMatchesNextSecond(trigger, this.calendar); assertMatchesNextSecond(trigger, this.calendar);
@ -133,10 +128,8 @@ class CronTriggerTests {
assertMatchesNextSecond(trigger, this.calendar); assertMatchesNextSecond(trigger, this.calendar);
} }
@ParameterizedCronTriggerTest @Test
void incrementMinute(Date localDateTime, TimeZone timeZone) { void incrementMinute() {
setup(localDateTime, timeZone);
CronTrigger trigger = new CronTrigger("0 * * * * *", timeZone); CronTrigger trigger = new CronTrigger("0 * * * * *", timeZone);
this.calendar.set(Calendar.MINUTE, 10); this.calendar.set(Calendar.MINUTE, 10);
Date localDate = this.calendar.getTime(); Date localDate = this.calendar.getTime();
@ -151,10 +144,8 @@ class CronTriggerTests {
assertThat(localDate).isEqualTo(this.calendar.getTime()); assertThat(localDate).isEqualTo(this.calendar.getTime());
} }
@ParameterizedCronTriggerTest @Test
void incrementMinuteByOne(Date localDateTime, TimeZone timeZone) { void incrementMinuteByOne() {
setup(localDateTime, timeZone);
CronTrigger trigger = new CronTrigger("0 11 * * * *", timeZone); CronTrigger trigger = new CronTrigger("0 11 * * * *", timeZone);
this.calendar.set(Calendar.MINUTE, 10); this.calendar.set(Calendar.MINUTE, 10);
TriggerContext context = getTriggerContext(this.calendar.getTime()); TriggerContext context = getTriggerContext(this.calendar.getTime());
@ -163,10 +154,8 @@ class CronTriggerTests {
assertThat(trigger.nextExecutionTime(context)).isEqualTo(this.calendar.getTime()); assertThat(trigger.nextExecutionTime(context)).isEqualTo(this.calendar.getTime());
} }
@ParameterizedCronTriggerTest @Test
void incrementMinuteAndRollover(Date localDateTime, TimeZone timeZone) { void incrementMinuteAndRollover() {
setup(localDateTime, timeZone);
CronTrigger trigger = new CronTrigger("0 10 * * * *", timeZone); CronTrigger trigger = new CronTrigger("0 10 * * * *", timeZone);
this.calendar.set(Calendar.MINUTE, 11); this.calendar.set(Calendar.MINUTE, 11);
this.calendar.set(Calendar.SECOND, 0); this.calendar.set(Calendar.SECOND, 0);
@ -176,10 +165,8 @@ class CronTriggerTests {
assertThat(trigger.nextExecutionTime(context)).isEqualTo(this.calendar.getTime()); assertThat(trigger.nextExecutionTime(context)).isEqualTo(this.calendar.getTime());
} }
@ParameterizedCronTriggerTest @Test
void incrementHour(Date localDateTime, TimeZone timeZone) { void incrementHour() {
setup(localDateTime, timeZone);
CronTrigger trigger = new CronTrigger("0 0 * * * *", timeZone); CronTrigger trigger = new CronTrigger("0 0 * * * *", timeZone);
this.calendar.set(Calendar.MONTH, 9); this.calendar.set(Calendar.MONTH, 9);
this.calendar.set(Calendar.DAY_OF_MONTH, 30); this.calendar.set(Calendar.DAY_OF_MONTH, 30);
@ -197,10 +184,8 @@ class CronTriggerTests {
assertThat(trigger.nextExecutionTime(context2)).isEqualTo(this.calendar.getTime()); assertThat(trigger.nextExecutionTime(context2)).isEqualTo(this.calendar.getTime());
} }
@ParameterizedCronTriggerTest @Test
void incrementHourAndRollover(Date localDateTime, TimeZone timeZone) { void incrementHourAndRollover() {
setup(localDateTime, timeZone);
CronTrigger trigger = new CronTrigger("0 0 * * * *", timeZone); CronTrigger trigger = new CronTrigger("0 0 * * * *", timeZone);
this.calendar.set(Calendar.MONTH, 9); this.calendar.set(Calendar.MONTH, 9);
this.calendar.set(Calendar.DAY_OF_MONTH, 10); this.calendar.set(Calendar.DAY_OF_MONTH, 10);
@ -219,10 +204,8 @@ class CronTriggerTests {
assertThat(trigger.nextExecutionTime(context2)).isEqualTo(this.calendar.getTime()); assertThat(trigger.nextExecutionTime(context2)).isEqualTo(this.calendar.getTime());
} }
@ParameterizedCronTriggerTest @Test
void incrementDayOfMonth(Date localDateTime, TimeZone timeZone) { void incrementDayOfMonth() {
setup(localDateTime, timeZone);
CronTrigger trigger = new CronTrigger("0 0 0 * * *", timeZone); CronTrigger trigger = new CronTrigger("0 0 0 * * *", timeZone);
this.calendar.set(Calendar.DAY_OF_MONTH, 1); this.calendar.set(Calendar.DAY_OF_MONTH, 1);
Date localDate = this.calendar.getTime(); Date localDate = this.calendar.getTime();
@ -241,10 +224,8 @@ class CronTriggerTests {
assertThat(this.calendar.get(Calendar.DAY_OF_MONTH)).isEqualTo(3); assertThat(this.calendar.get(Calendar.DAY_OF_MONTH)).isEqualTo(3);
} }
@ParameterizedCronTriggerTest @Test
void incrementDayOfMonthByOne(Date localDateTime, TimeZone timeZone) { void incrementDayOfMonthByOne() {
setup(localDateTime, timeZone);
CronTrigger trigger = new CronTrigger("* * * 10 * *", timeZone); CronTrigger trigger = new CronTrigger("* * * 10 * *", timeZone);
this.calendar.set(Calendar.DAY_OF_MONTH, 9); this.calendar.set(Calendar.DAY_OF_MONTH, 9);
Date localDate = this.calendar.getTime(); Date localDate = this.calendar.getTime();
@ -256,10 +237,8 @@ class CronTriggerTests {
assertThat(trigger.nextExecutionTime(context)).isEqualTo(this.calendar.getTime()); assertThat(trigger.nextExecutionTime(context)).isEqualTo(this.calendar.getTime());
} }
@ParameterizedCronTriggerTest @Test
void incrementDayOfMonthAndRollover(Date localDateTime, TimeZone timeZone) { void incrementDayOfMonthAndRollover() {
setup(localDateTime, timeZone);
CronTrigger trigger = new CronTrigger("* * * 10 * *", timeZone); CronTrigger trigger = new CronTrigger("* * * 10 * *", timeZone);
this.calendar.set(Calendar.DAY_OF_MONTH, 11); this.calendar.set(Calendar.DAY_OF_MONTH, 11);
Date localDate = this.calendar.getTime(); Date localDate = this.calendar.getTime();
@ -272,10 +251,8 @@ class CronTriggerTests {
assertThat(trigger.nextExecutionTime(context)).isEqualTo(this.calendar.getTime()); assertThat(trigger.nextExecutionTime(context)).isEqualTo(this.calendar.getTime());
} }
@ParameterizedCronTriggerTest @Test
void dailyTriggerInShortMonth(Date localDateTime, TimeZone timeZone) { void dailyTriggerInShortMonth() {
setup(localDateTime, timeZone);
CronTrigger trigger = new CronTrigger("0 0 0 * * *", timeZone); CronTrigger trigger = new CronTrigger("0 0 0 * * *", timeZone);
this.calendar.set(Calendar.MONTH, 8); // September: 30 days this.calendar.set(Calendar.MONTH, 8); // September: 30 days
this.calendar.set(Calendar.DAY_OF_MONTH, 30); this.calendar.set(Calendar.DAY_OF_MONTH, 30);
@ -293,10 +270,8 @@ class CronTriggerTests {
assertThat(trigger.nextExecutionTime(context2)).isEqualTo(this.calendar.getTime()); assertThat(trigger.nextExecutionTime(context2)).isEqualTo(this.calendar.getTime());
} }
@ParameterizedCronTriggerTest @Test
void dailyTriggerInLongMonth(Date localDateTime, TimeZone timeZone) { void dailyTriggerInLongMonth() {
setup(localDateTime, timeZone);
CronTrigger trigger = new CronTrigger("0 0 0 * * *", timeZone); CronTrigger trigger = new CronTrigger("0 0 0 * * *", timeZone);
this.calendar.set(Calendar.MONTH, 7); // August: 31 days and not a daylight saving boundary this.calendar.set(Calendar.MONTH, 7); // August: 31 days and not a daylight saving boundary
this.calendar.set(Calendar.DAY_OF_MONTH, 30); this.calendar.set(Calendar.DAY_OF_MONTH, 30);
@ -314,10 +289,8 @@ class CronTriggerTests {
assertThat(trigger.nextExecutionTime(context2)).isEqualTo(this.calendar.getTime()); assertThat(trigger.nextExecutionTime(context2)).isEqualTo(this.calendar.getTime());
} }
@ParameterizedCronTriggerTest @Test
void dailyTriggerOnDaylightSavingBoundary(Date localDateTime, TimeZone timeZone) { void dailyTriggerOnDaylightSavingBoundary() {
setup(localDateTime, timeZone);
CronTrigger trigger = new CronTrigger("0 0 0 * * *", timeZone); CronTrigger trigger = new CronTrigger("0 0 0 * * *", timeZone);
this.calendar.set(Calendar.MONTH, 9); // October: 31 days and a daylight saving boundary in CET this.calendar.set(Calendar.MONTH, 9); // October: 31 days and a daylight saving boundary in CET
this.calendar.set(Calendar.DAY_OF_MONTH, 30); this.calendar.set(Calendar.DAY_OF_MONTH, 30);
@ -335,10 +308,8 @@ class CronTriggerTests {
assertThat(trigger.nextExecutionTime(context2)).isEqualTo(this.calendar.getTime()); assertThat(trigger.nextExecutionTime(context2)).isEqualTo(this.calendar.getTime());
} }
@ParameterizedCronTriggerTest @Test
void incrementMonth(Date localDateTime, TimeZone timeZone) { void incrementMonth() {
setup(localDateTime, timeZone);
CronTrigger trigger = new CronTrigger("0 0 0 1 * *", timeZone); CronTrigger trigger = new CronTrigger("0 0 0 1 * *", timeZone);
this.calendar.set(Calendar.MONTH, 9); this.calendar.set(Calendar.MONTH, 9);
this.calendar.set(Calendar.DAY_OF_MONTH, 30); this.calendar.set(Calendar.DAY_OF_MONTH, 30);
@ -356,10 +327,8 @@ class CronTriggerTests {
assertThat(trigger.nextExecutionTime(context2)).isEqualTo(this.calendar.getTime()); assertThat(trigger.nextExecutionTime(context2)).isEqualTo(this.calendar.getTime());
} }
@ParameterizedCronTriggerTest @Test
void incrementMonthAndRollover(Date localDateTime, TimeZone timeZone) { void incrementMonthAndRollover() {
setup(localDateTime, timeZone);
CronTrigger trigger = new CronTrigger("0 0 0 1 * *", timeZone); CronTrigger trigger = new CronTrigger("0 0 0 1 * *", timeZone);
this.calendar.set(Calendar.MONTH, 11); this.calendar.set(Calendar.MONTH, 11);
this.calendar.set(Calendar.DAY_OF_MONTH, 31); this.calendar.set(Calendar.DAY_OF_MONTH, 31);
@ -379,10 +348,8 @@ class CronTriggerTests {
assertThat(trigger.nextExecutionTime(context2)).isEqualTo(this.calendar.getTime()); assertThat(trigger.nextExecutionTime(context2)).isEqualTo(this.calendar.getTime());
} }
@ParameterizedCronTriggerTest @Test
void monthlyTriggerInLongMonth(Date localDateTime, TimeZone timeZone) { void monthlyTriggerInLongMonth() {
setup(localDateTime, timeZone);
CronTrigger trigger = new CronTrigger("0 0 0 31 * *", timeZone); CronTrigger trigger = new CronTrigger("0 0 0 31 * *", timeZone);
this.calendar.set(Calendar.MONTH, 9); this.calendar.set(Calendar.MONTH, 9);
this.calendar.set(Calendar.DAY_OF_MONTH, 30); this.calendar.set(Calendar.DAY_OF_MONTH, 30);
@ -395,10 +362,8 @@ class CronTriggerTests {
assertThat(trigger.nextExecutionTime(context)).isEqualTo(this.calendar.getTime()); assertThat(trigger.nextExecutionTime(context)).isEqualTo(this.calendar.getTime());
} }
@ParameterizedCronTriggerTest @Test
void monthlyTriggerInShortMonth(Date localDateTime, TimeZone timeZone) { void monthlyTriggerInShortMonth() {
setup(localDateTime, timeZone);
CronTrigger trigger = new CronTrigger("0 0 0 1 * *", timeZone); CronTrigger trigger = new CronTrigger("0 0 0 1 * *", timeZone);
this.calendar.set(Calendar.MONTH, 9); this.calendar.set(Calendar.MONTH, 9);
this.calendar.set(Calendar.DAY_OF_MONTH, 30); this.calendar.set(Calendar.DAY_OF_MONTH, 30);
@ -412,10 +377,8 @@ class CronTriggerTests {
assertThat(trigger.nextExecutionTime(context)).isEqualTo(this.calendar.getTime()); assertThat(trigger.nextExecutionTime(context)).isEqualTo(this.calendar.getTime());
} }
@ParameterizedCronTriggerTest @Test
void incrementDayOfWeekByOne(Date localDateTime, TimeZone timeZone) { void incrementDayOfWeekByOne() {
setup(localDateTime, timeZone);
CronTrigger trigger = new CronTrigger("* * * * * 2", timeZone); CronTrigger trigger = new CronTrigger("* * * * * 2", timeZone);
this.calendar.set(Calendar.DAY_OF_WEEK, 2); this.calendar.set(Calendar.DAY_OF_WEEK, 2);
Date localDate = this.calendar.getTime(); Date localDate = this.calendar.getTime();
@ -428,10 +391,8 @@ class CronTriggerTests {
assertThat(this.calendar.get(Calendar.DAY_OF_WEEK)).isEqualTo(Calendar.TUESDAY); assertThat(this.calendar.get(Calendar.DAY_OF_WEEK)).isEqualTo(Calendar.TUESDAY);
} }
@ParameterizedCronTriggerTest @Test
void incrementDayOfWeekAndRollover(Date localDateTime, TimeZone timeZone) { void incrementDayOfWeekAndRollover() {
setup(localDateTime, timeZone);
CronTrigger trigger = new CronTrigger("* * * * * 2", timeZone); CronTrigger trigger = new CronTrigger("* * * * * 2", timeZone);
this.calendar.set(Calendar.DAY_OF_WEEK, 4); this.calendar.set(Calendar.DAY_OF_WEEK, 4);
Date localDate = this.calendar.getTime(); Date localDate = this.calendar.getTime();
@ -444,10 +405,8 @@ class CronTriggerTests {
assertThat(this.calendar.get(Calendar.DAY_OF_WEEK)).isEqualTo(Calendar.TUESDAY); assertThat(this.calendar.get(Calendar.DAY_OF_WEEK)).isEqualTo(Calendar.TUESDAY);
} }
@ParameterizedCronTriggerTest @Test
void specificMinuteSecond(Date localDateTime, TimeZone timeZone) { void specificMinuteSecond() {
setup(localDateTime, timeZone);
CronTrigger trigger = new CronTrigger("55 5 * * * *", timeZone); CronTrigger trigger = new CronTrigger("55 5 * * * *", timeZone);
this.calendar.set(Calendar.MINUTE, 4); this.calendar.set(Calendar.MINUTE, 4);
this.calendar.set(Calendar.SECOND, 54); this.calendar.set(Calendar.SECOND, 54);
@ -463,10 +422,8 @@ class CronTriggerTests {
assertThat(actual).isEqualTo(this.calendar.getTime()); assertThat(actual).isEqualTo(this.calendar.getTime());
} }
@ParameterizedCronTriggerTest @Test
void specificHourSecond(Date localDateTime, TimeZone timeZone) { void specificHourSecond() {
setup(localDateTime, timeZone);
CronTrigger trigger = new CronTrigger("55 * 10 * * *", timeZone); CronTrigger trigger = new CronTrigger("55 * 10 * * *", timeZone);
this.calendar.set(Calendar.HOUR_OF_DAY, 9); this.calendar.set(Calendar.HOUR_OF_DAY, 9);
this.calendar.set(Calendar.SECOND, 54); this.calendar.set(Calendar.SECOND, 54);
@ -483,10 +440,8 @@ class CronTriggerTests {
assertThat(actual).isEqualTo(this.calendar.getTime()); assertThat(actual).isEqualTo(this.calendar.getTime());
} }
@ParameterizedCronTriggerTest @Test
void specificMinuteHour(Date localDateTime, TimeZone timeZone) { void specificMinuteHour() {
setup(localDateTime, timeZone);
CronTrigger trigger = new CronTrigger("* 5 10 * * *", timeZone); CronTrigger trigger = new CronTrigger("* 5 10 * * *", timeZone);
this.calendar.set(Calendar.MINUTE, 4); this.calendar.set(Calendar.MINUTE, 4);
this.calendar.set(Calendar.HOUR_OF_DAY, 9); this.calendar.set(Calendar.HOUR_OF_DAY, 9);
@ -504,10 +459,8 @@ class CronTriggerTests {
assertThat(actual).isEqualTo(this.calendar.getTime()); assertThat(actual).isEqualTo(this.calendar.getTime());
} }
@ParameterizedCronTriggerTest @Test
void specificDayOfMonthSecond(Date localDateTime, TimeZone timeZone) { void specificDayOfMonthSecond() {
setup(localDateTime, timeZone);
CronTrigger trigger = new CronTrigger("55 * * 3 * *", timeZone); CronTrigger trigger = new CronTrigger("55 * * 3 * *", timeZone);
this.calendar.set(Calendar.DAY_OF_MONTH, 2); this.calendar.set(Calendar.DAY_OF_MONTH, 2);
this.calendar.set(Calendar.SECOND, 54); this.calendar.set(Calendar.SECOND, 54);
@ -525,10 +478,8 @@ class CronTriggerTests {
assertThat(actual).isEqualTo(this.calendar.getTime()); assertThat(actual).isEqualTo(this.calendar.getTime());
} }
@ParameterizedCronTriggerTest @Test
void specificDate(Date localDateTime, TimeZone timeZone) { void specificDate() {
setup(localDateTime, timeZone);
CronTrigger trigger = new CronTrigger("* * * 3 11 *", timeZone); CronTrigger trigger = new CronTrigger("* * * 3 11 *", timeZone);
this.calendar.set(Calendar.DAY_OF_MONTH, 2); this.calendar.set(Calendar.DAY_OF_MONTH, 2);
this.calendar.set(Calendar.MONTH, 9); this.calendar.set(Calendar.MONTH, 9);
@ -547,10 +498,8 @@ class CronTriggerTests {
assertThat(actual).isEqualTo(this.calendar.getTime()); assertThat(actual).isEqualTo(this.calendar.getTime());
} }
@ParameterizedCronTriggerTest @Test
void nonExistentSpecificDate(Date localDateTime, TimeZone timeZone) { void nonExistentSpecificDate() {
setup(localDateTime, timeZone);
// TODO: maybe try and detect this as a special case in parser? // TODO: maybe try and detect this as a special case in parser?
CronTrigger trigger = new CronTrigger("0 0 0 31 6 *", timeZone); CronTrigger trigger = new CronTrigger("0 0 0 31 6 *", timeZone);
this.calendar.set(Calendar.DAY_OF_MONTH, 10); this.calendar.set(Calendar.DAY_OF_MONTH, 10);
@ -560,10 +509,8 @@ class CronTriggerTests {
assertThat(trigger.nextExecutionTime(context1)).isNull(); assertThat(trigger.nextExecutionTime(context1)).isNull();
} }
@ParameterizedCronTriggerTest @Test
void leapYearSpecificDate(Date localDateTime, TimeZone timeZone) { void leapYearSpecificDate() {
setup(localDateTime, timeZone);
CronTrigger trigger = new CronTrigger("0 0 0 29 2 *", timeZone); CronTrigger trigger = new CronTrigger("0 0 0 29 2 *", timeZone);
this.calendar.set(Calendar.YEAR, 2007); this.calendar.set(Calendar.YEAR, 2007);
this.calendar.set(Calendar.DAY_OF_MONTH, 10); this.calendar.set(Calendar.DAY_OF_MONTH, 10);
@ -583,10 +530,8 @@ class CronTriggerTests {
assertThat(actual).isEqualTo(this.calendar.getTime()); assertThat(actual).isEqualTo(this.calendar.getTime());
} }
@ParameterizedCronTriggerTest @Test
void weekDaySequence(Date localDateTime, TimeZone timeZone) { void weekDaySequence() {
setup(localDateTime, timeZone);
CronTrigger trigger = new CronTrigger("0 0 7 ? * MON-FRI", timeZone); CronTrigger trigger = new CronTrigger("0 0 7 ? * MON-FRI", timeZone);
// This is a Saturday // This is a Saturday
this.calendar.set(2009, 8, 26); this.calendar.set(2009, 8, 26);
@ -611,184 +556,138 @@ class CronTriggerTests {
assertThat(actual).isEqualTo(this.calendar.getTime()); assertThat(actual).isEqualTo(this.calendar.getTime());
} }
@ParameterizedCronTriggerTest @Test
void dayOfWeekIndifferent(Date localDateTime, TimeZone timeZone) { void dayOfWeekIndifferent() {
setup(localDateTime, timeZone);
CronTrigger trigger1 = new CronTrigger("* * * 2 * *", timeZone); CronTrigger trigger1 = new CronTrigger("* * * 2 * *", timeZone);
CronTrigger trigger2 = new CronTrigger("* * * 2 * ?", timeZone); CronTrigger trigger2 = new CronTrigger("* * * 2 * ?", timeZone);
assertThat(trigger2).isEqualTo(trigger1); assertThat(trigger2).isEqualTo(trigger1);
} }
@ParameterizedCronTriggerTest @Test
void secondIncrementer(Date localDateTime, TimeZone timeZone) { void secondIncrementer() {
setup(localDateTime, timeZone);
CronTrigger trigger1 = new CronTrigger("57,59 * * * * *", timeZone); CronTrigger trigger1 = new CronTrigger("57,59 * * * * *", timeZone);
CronTrigger trigger2 = new CronTrigger("57/2 * * * * *", timeZone); CronTrigger trigger2 = new CronTrigger("57/2 * * * * *", timeZone);
assertThat(trigger2).isEqualTo(trigger1); assertThat(trigger2).isEqualTo(trigger1);
} }
@ParameterizedCronTriggerTest @Test
void secondIncrementerWithRange(Date localDateTime, TimeZone timeZone) { void secondIncrementerWithRange() {
setup(localDateTime, timeZone);
CronTrigger trigger1 = new CronTrigger("1,3,5 * * * * *", timeZone); CronTrigger trigger1 = new CronTrigger("1,3,5 * * * * *", timeZone);
CronTrigger trigger2 = new CronTrigger("1-6/2 * * * * *", timeZone); CronTrigger trigger2 = new CronTrigger("1-6/2 * * * * *", timeZone);
assertThat(trigger2).isEqualTo(trigger1); assertThat(trigger2).isEqualTo(trigger1);
} }
@ParameterizedCronTriggerTest @Test
void hourIncrementer(Date localDateTime, TimeZone timeZone) { void hourIncrementer() {
setup(localDateTime, timeZone);
CronTrigger trigger1 = new CronTrigger("* * 4,8,12,16,20 * * *", timeZone); CronTrigger trigger1 = new CronTrigger("* * 4,8,12,16,20 * * *", timeZone);
CronTrigger trigger2 = new CronTrigger("* * 4/4 * * *", timeZone); CronTrigger trigger2 = new CronTrigger("* * 4/4 * * *", timeZone);
assertThat(trigger2).isEqualTo(trigger1); assertThat(trigger2).isEqualTo(trigger1);
} }
@ParameterizedCronTriggerTest @Test
void dayNames(Date localDateTime, TimeZone timeZone) { void dayNames() {
setup(localDateTime, timeZone);
CronTrigger trigger1 = new CronTrigger("* * * * * 0-6", timeZone); CronTrigger trigger1 = new CronTrigger("* * * * * 0-6", timeZone);
CronTrigger trigger2 = new CronTrigger("* * * * * TUE,WED,THU,FRI,SAT,SUN,MON", timeZone); CronTrigger trigger2 = new CronTrigger("* * * * * TUE,WED,THU,FRI,SAT,SUN,MON", timeZone);
assertThat(trigger2).isEqualTo(trigger1); assertThat(trigger2).isEqualTo(trigger1);
} }
@ParameterizedCronTriggerTest @Test
void sundayIsZero(Date localDateTime, TimeZone timeZone) { void sundayIsZero() {
setup(localDateTime, timeZone);
CronTrigger trigger1 = new CronTrigger("* * * * * 0", timeZone); CronTrigger trigger1 = new CronTrigger("* * * * * 0", timeZone);
CronTrigger trigger2 = new CronTrigger("* * * * * SUN", timeZone); CronTrigger trigger2 = new CronTrigger("* * * * * SUN", timeZone);
assertThat(trigger2).isEqualTo(trigger1); assertThat(trigger2).isEqualTo(trigger1);
} }
@ParameterizedCronTriggerTest @Test
void sundaySynonym(Date localDateTime, TimeZone timeZone) { void sundaySynonym() {
setup(localDateTime, timeZone);
CronTrigger trigger1 = new CronTrigger("* * * * * 0", timeZone); CronTrigger trigger1 = new CronTrigger("* * * * * 0", timeZone);
CronTrigger trigger2 = new CronTrigger("* * * * * 7", timeZone); CronTrigger trigger2 = new CronTrigger("* * * * * 7", timeZone);
assertThat(trigger2).isEqualTo(trigger1); assertThat(trigger2).isEqualTo(trigger1);
} }
@ParameterizedCronTriggerTest @Test
void monthNames(Date localDateTime, TimeZone timeZone) { void monthNames() {
setup(localDateTime, timeZone);
CronTrigger trigger1 = new CronTrigger("* * * * 1-12 *", timeZone); CronTrigger trigger1 = new CronTrigger("* * * * 1-12 *", timeZone);
CronTrigger trigger2 = new CronTrigger("* * * * FEB,JAN,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC *", timeZone); CronTrigger trigger2 = new CronTrigger("* * * * FEB,JAN,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC *", timeZone);
assertThat(trigger2).isEqualTo(trigger1); assertThat(trigger2).isEqualTo(trigger1);
} }
@ParameterizedCronTriggerTest @Test
void monthNamesMixedCase(Date localDateTime, TimeZone timeZone) { void monthNamesMixedCase() {
setup(localDateTime, timeZone);
CronTrigger trigger1 = new CronTrigger("* * * * 2 *", timeZone); CronTrigger trigger1 = new CronTrigger("* * * * 2 *", timeZone);
CronTrigger trigger2 = new CronTrigger("* * * * Feb *", timeZone); CronTrigger trigger2 = new CronTrigger("* * * * Feb *", timeZone);
assertThat(trigger2).isEqualTo(trigger1); assertThat(trigger2).isEqualTo(trigger1);
} }
@ParameterizedCronTriggerTest @Test
void secondInvalid(Date localDateTime, TimeZone timeZone) { void secondInvalid() {
setup(localDateTime, timeZone);
assertThatIllegalArgumentException().isThrownBy(() -> new CronTrigger("77 * * * * *", timeZone)); assertThatIllegalArgumentException().isThrownBy(() -> new CronTrigger("77 * * * * *", timeZone));
} }
@ParameterizedCronTriggerTest @Test
void secondRangeInvalid(Date localDateTime, TimeZone timeZone) { void secondRangeInvalid() {
setup(localDateTime, timeZone);
assertThatIllegalArgumentException().isThrownBy(() -> new CronTrigger("44-77 * * * * *", timeZone)); assertThatIllegalArgumentException().isThrownBy(() -> new CronTrigger("44-77 * * * * *", timeZone));
} }
@ParameterizedCronTriggerTest @Test
void minuteInvalid(Date localDateTime, TimeZone timeZone) { void minuteInvalid() {
setup(localDateTime, timeZone);
assertThatIllegalArgumentException().isThrownBy(() -> new CronTrigger("* 77 * * * *", timeZone)); assertThatIllegalArgumentException().isThrownBy(() -> new CronTrigger("* 77 * * * *", timeZone));
} }
@ParameterizedCronTriggerTest @Test
void minuteRangeInvalid(Date localDateTime, TimeZone timeZone) { void minuteRangeInvalid() {
setup(localDateTime, timeZone);
assertThatIllegalArgumentException().isThrownBy(() -> new CronTrigger("* 44-77 * * * *", timeZone)); assertThatIllegalArgumentException().isThrownBy(() -> new CronTrigger("* 44-77 * * * *", timeZone));
} }
@ParameterizedCronTriggerTest @Test
void hourInvalid(Date localDateTime, TimeZone timeZone) { void hourInvalid() {
setup(localDateTime, timeZone);
assertThatIllegalArgumentException().isThrownBy(() -> new CronTrigger("* * 27 * * *", timeZone)); assertThatIllegalArgumentException().isThrownBy(() -> new CronTrigger("* * 27 * * *", timeZone));
} }
@ParameterizedCronTriggerTest @Test
void hourRangeInvalid(Date localDateTime, TimeZone timeZone) { void hourRangeInvalid() {
setup(localDateTime, timeZone);
assertThatIllegalArgumentException().isThrownBy(() -> new CronTrigger("* * 23-28 * * *", timeZone)); assertThatIllegalArgumentException().isThrownBy(() -> new CronTrigger("* * 23-28 * * *", timeZone));
} }
@ParameterizedCronTriggerTest @Test
void dayInvalid(Date localDateTime, TimeZone timeZone) { void dayInvalid() {
setup(localDateTime, timeZone);
assertThatIllegalArgumentException().isThrownBy(() -> new CronTrigger("* * * 45 * *", timeZone)); assertThatIllegalArgumentException().isThrownBy(() -> new CronTrigger("* * * 45 * *", timeZone));
} }
@ParameterizedCronTriggerTest @Test
void dayRangeInvalid(Date localDateTime, TimeZone timeZone) { void dayRangeInvalid() {
setup(localDateTime, timeZone);
assertThatIllegalArgumentException().isThrownBy(() -> new CronTrigger("* * * 28-45 * *", timeZone)); assertThatIllegalArgumentException().isThrownBy(() -> new CronTrigger("* * * 28-45 * *", timeZone));
} }
@ParameterizedCronTriggerTest @Test
void monthInvalid(Date localDateTime, TimeZone timeZone) { void monthInvalid() {
setup(localDateTime, timeZone);
assertThatIllegalArgumentException().isThrownBy(() -> new CronTrigger("0 0 0 25 13 ?", timeZone)); assertThatIllegalArgumentException().isThrownBy(() -> new CronTrigger("0 0 0 25 13 ?", timeZone));
} }
@ParameterizedCronTriggerTest @Test
void monthInvalidTooSmall(Date localDateTime, TimeZone timeZone) { void monthInvalidTooSmall() {
setup(localDateTime, timeZone);
assertThatIllegalArgumentException().isThrownBy(() -> new CronTrigger("0 0 0 25 0 ?", timeZone)); assertThatIllegalArgumentException().isThrownBy(() -> new CronTrigger("0 0 0 25 0 ?", timeZone));
} }
@ParameterizedCronTriggerTest @Test
void dayOfMonthInvalid(Date localDateTime, TimeZone timeZone) { void dayOfMonthInvalid() {
setup(localDateTime, timeZone);
assertThatIllegalArgumentException().isThrownBy(() -> new CronTrigger("0 0 0 32 12 ?", timeZone)); assertThatIllegalArgumentException().isThrownBy(() -> new CronTrigger("0 0 0 32 12 ?", timeZone));
} }
@ParameterizedCronTriggerTest @Test
void monthRangeInvalid(Date localDateTime, TimeZone timeZone) { void monthRangeInvalid() {
setup(localDateTime, timeZone);
assertThatIllegalArgumentException().isThrownBy(() -> new CronTrigger("* * * * 11-13 *", timeZone)); assertThatIllegalArgumentException().isThrownBy(() -> new CronTrigger("* * * * 11-13 *", timeZone));
} }
@ParameterizedCronTriggerTest @Test
void whitespace(Date localDateTime, TimeZone timeZone) { void whitespace() {
setup(localDateTime, timeZone);
CronTrigger trigger1 = new CronTrigger("* * * * 1 *", timeZone); CronTrigger trigger1 = new CronTrigger("* * * * 1 *", timeZone);
CronTrigger trigger2 = new CronTrigger("* * * * 1 *", timeZone); CronTrigger trigger2 = new CronTrigger("* * * * 1 *", timeZone);
assertThat(trigger2).isEqualTo(trigger1); assertThat(trigger2).isEqualTo(trigger1);
} }
@ParameterizedCronTriggerTest @Test
void monthSequence(Date localDateTime, TimeZone timeZone) { void monthSequence() {
setup(localDateTime, timeZone);
CronTrigger trigger = new CronTrigger("0 30 23 30 1/3 ?", timeZone); CronTrigger trigger = new CronTrigger("0 30 23 30 1/3 ?", timeZone);
this.calendar.set(2010, 11, 30); this.calendar.set(2010, 11, 30);
Date localDate = this.calendar.getTime(); Date localDate = this.calendar.getTime();
@ -812,10 +711,8 @@ class CronTriggerTests {
assertThat(actual).isEqualTo(this.calendar.getTime()); assertThat(actual).isEqualTo(this.calendar.getTime());
} }
@ParameterizedCronTriggerTest @Test
void daylightSavingMissingHour(Date localDateTime, TimeZone timeZone) { void daylightSavingMissingHour() {
setup(localDateTime, timeZone);
// This trigger has to be somewhere between 2:00 AM and 3:00 AM, so we // This trigger has to be somewhere between 2:00 AM and 3:00 AM, so we
// use a cron expression for 2:10 AM every day. // use a cron expression for 2:10 AM every day.
CronTrigger trigger = new CronTrigger("0 10 2 * * *", timeZone); CronTrigger trigger = new CronTrigger("0 10 2 * * *", timeZone);
@ -865,19 +762,4 @@ class CronTriggerTests {
return new SimpleTriggerContext(null, null, lastCompletionTime); return new SimpleTriggerContext(null, null, lastCompletionTime);
} }
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@ParameterizedTest(name = "[{index}] localDateTime[{0}], time zone[{1}]")
@MethodSource("parameters")
@interface ParameterizedCronTriggerTest {
}
static Stream<Arguments> parameters() {
return Stream.of(
arguments(new Date(), TimeZone.getTimeZone("PST")),
arguments(new Date(), TimeZone.getTimeZone("CET"))
);
}
} }

Loading…
Cancel
Save