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 2fb3344
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 4 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);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import java.util.Locale;
import java.util.ResourceBundle;

import com.cronutils.mapper.CronMapper;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;

Expand Down Expand Up @@ -351,11 +352,12 @@ public void testAtTimeOnThirdLastDayOfMonth() {
assertEquals("at 16:00:00pm, 3 days before the end of the month, every month", descriptor.describe(cron));
}

@Disabled
@Test
public void testAtTimeOnNthSpecificWeekdayOfMonth() {
final Cron cron = getCron("0 0 16 ? * 5#2 *");
assertEquals("at 16:00:00pm, on the 2nd Thursday of the month, every month", descriptor.describe(cron));
CronMapper quartzToUnixMapper = CronMapper.fromQuartzToUnix();
Cron mapped = quartzToUnixMapper.map(cron);
assertEquals("at 16:00 Thursday 2 of every month", descriptor.describe(mapped));
}

@Disabled
Expand Down

0 comments on commit 2fb3344

Please sign in to comment.