Skip to content

Commit e3e0574

Browse files
committed
#459: Add test and fix.
1 parent 7937ce6 commit e3e0574

6 files changed

Lines changed: 43 additions & 20 deletions

File tree

src/main/java/com/cronutils/converter/CronConverter.java

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -25,26 +25,22 @@
2525

2626
public class CronConverter {
2727

28-
private static final Logger LOGGER = LoggerFactory
29-
.getLogger(CronConverter.class);
28+
private static final Logger LOGGER = LoggerFactory.getLogger(CronConverter.class);
3029

3130
private static final String CRON_FIELDS_SEPARATOR = " ";
32-
3331
private String[] cronParts;
34-
3532
private Calendar fromCalendar;
36-
3733
private String sourceCron;
38-
3934
private ZoneId sourceZoneId;
40-
4135
private ZoneId targetZoneId;
4236

43-
@Setter
44-
CronToCalendarTransformer toCalendarConverter = new CronToCalendarTransformer();
37+
private CronToCalendarTransformer toCalendarConverter;
38+
private CalendarToCronTransformer toCronConverter;
4539

46-
@Setter
47-
CalendarToCronTransformer toCronConverter = new CalendarToCronTransformer();
40+
public CronConverter(CronToCalendarTransformer toCalendarConverter, CalendarToCronTransformer toCronConverter){
41+
this.toCalendarConverter = toCalendarConverter;
42+
this.toCronConverter = toCronConverter;
43+
}
4844

4945
public CronConverter using(String cronExpression) {
5046
this.sourceCron = cronExpression;

src/main/java/com/cronutils/model/field/expression/FieldExpressionFactory.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import com.cronutils.model.field.value.IntegerFieldValue;
1919
import com.cronutils.model.field.value.SpecialChar;
2020
import com.cronutils.model.field.value.SpecialCharFieldValue;
21+
import com.cronutils.utils.Preconditions;
2122

2223
public class FieldExpressionFactory {
2324
private FieldExpressionFactory() {
@@ -48,6 +49,7 @@ public static On on(SpecialChar specialChar) {
4849
}
4950

5051
public static On on(int time) {
52+
Preconditions.checkPositive(time, "Time must not be negative");
5153
return new On(new IntegerFieldValue(time));
5254
}
5355

src/main/java/com/cronutils/model/field/expression/On.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import com.cronutils.model.field.value.SpecialCharFieldValue;
1919
import com.cronutils.utils.Preconditions;
2020
import com.cronutils.utils.StringUtils;
21+
import org.apache.commons.lang3.Validate;
2122

2223
import static com.cronutils.utils.Preconditions.checkArgument;
2324

src/main/java/com/cronutils/utils/Preconditions.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,7 @@
9292
* @since 2.0 (imported from Google Collections Library)
9393
*/
9494
public class Preconditions {
95-
private Preconditions() {
96-
}
95+
private Preconditions() {}
9796

9897
/**
9998
* Ensures the truth of an expression involving one or more parameters to the calling method.
@@ -109,6 +108,12 @@ public static void checkArgument(final boolean expression, final Object errorMes
109108
}
110109
}
111110

111+
public static void checkPositive(final int value, final Object errorMessage) {
112+
if (value < 0) {
113+
throw new IllegalArgumentException(String.valueOf(errorMessage));
114+
}
115+
}
116+
112117
/**
113118
* Ensures the truth of an expression involving one or more parameters to the calling method.
114119
*
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.cronutils;
2+
3+
import com.cronutils.builder.CronBuilder;
4+
import com.cronutils.model.definition.CronDefinitionBuilder;
5+
import org.junit.Test;
6+
7+
import static com.cronutils.model.CronType.UNIX;
8+
import static com.cronutils.model.field.expression.FieldExpression.always;
9+
import static com.cronutils.model.field.expression.FieldExpressionFactory.on;
10+
11+
public class Issue459Test {
12+
@Test(expected = RuntimeException.class)
13+
public void testNegativeValuesNotAllowed() {
14+
CronBuilder.cron(CronDefinitionBuilder.instanceDefinitionFor(UNIX))
15+
.withDoM(always())
16+
.withMonth(always())
17+
.withDoW(always())
18+
.withHour(on(-1))
19+
.withMinute(on(5))
20+
.instance();
21+
}
22+
}

src/test/java/com/cronutils/converter/CronConverterTest.java

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import java.util.Arrays;
1919
import java.util.Collection;
2020
import java.time.ZoneId;
21-
import java.time.ZonedDateTime;
2221

2322
import org.junit.Assert;
2423
import org.junit.Test;
@@ -28,13 +27,13 @@
2827
@RunWith(Parameterized.class)
2928
public class CronConverterTest {
3029

31-
CronConverter cronConverter = spy(new CronConverter());
32-
3330
private String timezone;
34-
3531
private String inputCronExpression;
36-
3732
private String expectedCronExpression;
33+
private CronConverter cronConverter = spy(new CronConverter(
34+
new CronToCalendarTransformer(),
35+
new CalendarToCronTransformer()
36+
));
3837

3938
public CronConverterTest(String timezone, String inputCronExpression, String expectedCronExpression) {
4039
this.timezone = timezone;
@@ -56,8 +55,6 @@ public static Collection cronExpressions() {
5655

5756
@Test
5857
public void testCronConverterBuilder() {
59-
cronConverter.setToCalendarConverter(new CronToCalendarTransformer());
60-
cronConverter.setToCronConverter(new CalendarToCronTransformer());
6158
Assert.assertEquals(expectedCronExpression,
6259
cronConverter.using(inputCronExpression)
6360
.from(ZoneId.of(timezone)).to(ZoneId.of("UTC"))

0 commit comments

Comments
 (0)