Skip to content

Commit

Permalink
Add day of month to day of week, X#Y syntax
Browse files Browse the repository at this point in the history
Resolves jmrozanec#605
  • Loading branch information
austek committed May 9, 2024
1 parent d31697e commit b7c5478
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 2 deletions.
5 changes: 3 additions & 2 deletions src/main/java/com/cronutils/mapper/CronMapper.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@
import com.cronutils.model.field.definition.FieldDefinition;
import com.cronutils.model.field.expression.*;
import com.cronutils.model.field.expression.visitor.FieldExpressionVisitorAdaptor;
import com.cronutils.model.field.expression.visitor.ValueMappingFieldExpressionVisitor;
import com.cronutils.model.field.value.FieldValue;
import com.cronutils.model.field.value.IntegerFieldValue;
import com.cronutils.model.field.value.SpecialChar;
Expand Down Expand Up @@ -286,12 +285,14 @@ static Function<CronField, CronField> dayOfWeekMapping(final DayOfWeekFieldDefin
final FieldExpression expression = field.getExpression();
FieldExpression dest = null;
dest = expression.accept(new FieldExpressionVisitorAdaptor() {
@Override
public FieldExpression visit(Every every) {
return new Every(every.getExpression().accept(this), every.getPeriod());
}

@Override
public FieldExpression visit(On on) {
return new On(mapDayOfWeek(sourceDef, targetDef, on.getTime()), on.getSpecialChar());
return new On(mapDayOfWeek(sourceDef, targetDef, on.getTime()), on.getSpecialChar(), on.getNth());
}

@Override
Expand Down
43 changes: 43 additions & 0 deletions src/test/java/com/cronutils/Issue605Test.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package com.cronutils;

import com.cronutils.mapper.CronMapper;
import com.cronutils.model.Cron;
import com.cronutils.model.CronType;
import com.cronutils.model.definition.CronDefinition;
import com.cronutils.model.definition.CronDefinitionBuilder;
import com.cronutils.parser.CronParser;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;

import java.util.stream.Stream;

import static com.cronutils.model.CronType.QUARTZ;
import static com.cronutils.model.CronType.SPRING;
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;

class Issue605Test {

static Stream<Arguments> cronExpressions() {
return Stream.of(
Arguments.of(QUARTZ, CronMapper.fromQuartzToCron4j()),
Arguments.of(QUARTZ, CronMapper.fromQuartzToSpring()),
Arguments.of(QUARTZ, CronMapper.fromQuartzToUnix()),
Arguments.of(SPRING, CronMapper.fromSpringToQuartz())
);
}

@ParameterizedTest
@MethodSource("cronExpressions")
void testDayOfWeekMappingSpring(CronType cronType, CronMapper mapper) {
Cron cron = getCron(cronType, "0 0 0 ? * 5#1");
assertDoesNotThrow(() -> mapper.map(cron));
}

private Cron getCron(CronType cronType, @SuppressWarnings("SameParameterValue") final String quartzExpression) {
final CronDefinition cronDefinition = CronDefinitionBuilder.instanceDefinitionFor(cronType);
final CronParser parser = new CronParser(cronDefinition);
return parser.parse(quartzExpression);
}

}

0 comments on commit b7c5478

Please sign in to comment.