ExecutionDatesTest.java
package com.cronutils.model;
import com.cronutils.model.definition.CronDefinitionBuilder;
import com.cronutils.model.time.ExecutionTime;
import com.cronutils.parser.CronParser;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.List;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
public class ExecutionDatesTest {
private CronParser cron4jCronParser;
@BeforeEach
public void setUp() {
cron4jCronParser = new CronParser(CronDefinitionBuilder.instanceDefinitionFor(CronType.CRON4J));
}
@Test
public void testExecutionCountBetweenDates() {
int numOfDays = 10;
ZonedDateTime startDate = ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.systemDefault());
ZonedDateTime endDate = startDate.plusDays(numOfDays);
ExecutionTime executionTime = ExecutionTime.forCron(cron4jCronParser.parse("0 * * * *"));
int executionCount = executionTime.countExecutions(startDate, endDate);
assertEquals(240, executionCount);
}
@Test
public void testExecutionDatesBetweenDates() {
int year = 2022;
int month = 1;
int dayOfMonth = 1;
int minute = 0;
int second = 0;
int nanoSecond = 0;
ZoneId zoneId = ZoneId.systemDefault();
int numOfDays = 1;
ZonedDateTime startDate = ZonedDateTime.of(year, month, dayOfMonth, 0, minute, second, nanoSecond, zoneId);
ZonedDateTime endDate = startDate.plusDays(numOfDays);
ExecutionTime executionTime = ExecutionTime.forCron(cron4jCronParser.parse("0 * * * *"));
List<ZonedDateTime> dates = executionTime.getExecutionDates(startDate, endDate);
assertEquals(24, dates.size());
for (int i = 1; i < 24; i++) {
ZonedDateTime expectedDate = ZonedDateTime.of(year, month, dayOfMonth, i, minute, second, nanoSecond, zoneId);
ZonedDateTime actualDate = dates.get(i - 1);
assertEquals(expectedDate, actualDate);
}
}
@Test
public void throwExceptionWhenEndDateIsBeforeStartDate() {
ZonedDateTime startDate = ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.systemDefault());
ZonedDateTime endDate = startDate.minusDays(1);
ExecutionTime executionTime = ExecutionTime.forCron(cron4jCronParser.parse("0 * * * *"));
assertThrows(IllegalArgumentException.class, () -> executionTime.getExecutionDates(startDate, endDate));
}
@Test
public void throwExceptionWhenEndDateEqualsStarDate() {
ZonedDateTime startDate = ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.systemDefault());
ZonedDateTime endDate = ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.systemDefault());
ExecutionTime executionTime = ExecutionTime.forCron(cron4jCronParser.parse("0 * * * *"));
assertThrows(IllegalArgumentException.class, () -> executionTime.getExecutionDates(startDate, endDate));
}
}