mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-07-21 15:09:48 +08:00
add test
This commit is contained in:
@@ -1,24 +1,84 @@
|
||||
package cn.hutool.cron.pattern;
|
||||
|
||||
import cn.hutool.core.builder.Builder;
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import cn.hutool.core.text.StrJoiner;
|
||||
import cn.hutool.core.util.ArrayUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
|
||||
/**
|
||||
* 定时任务表达式构建器
|
||||
*
|
||||
* @author looly
|
||||
* @since 5.8.0
|
||||
*/
|
||||
public class CronPatternBuilder implements Builder<String> {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
final String[] parts = new String[7];
|
||||
|
||||
public static CronPatternBuilder of(){
|
||||
/**
|
||||
* 创建构建器
|
||||
* @return CronPatternBuilder
|
||||
*/
|
||||
public static CronPatternBuilder of() {
|
||||
return new CronPatternBuilder();
|
||||
}
|
||||
|
||||
public CronPatternBuilder set(Part part, String value){
|
||||
/**
|
||||
* 设置值
|
||||
*
|
||||
* @param part 部分,如秒、分、时等
|
||||
* @param values 时间值列表
|
||||
* @return this
|
||||
*/
|
||||
public CronPatternBuilder setValues(Part part, int... values) {
|
||||
for (int value : values) {
|
||||
part.checkValue(value);
|
||||
}
|
||||
return set(part, ArrayUtil.join(values, ","));
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置区间
|
||||
*
|
||||
* @param part 部分,如秒、分、时等
|
||||
* @param begin 起始值
|
||||
* @param end 结束值
|
||||
* @return this
|
||||
*/
|
||||
public CronPatternBuilder setRange(Part part, int begin, int end) {
|
||||
Assert.notNull(part );
|
||||
part.checkValue(begin);
|
||||
part.checkValue(end);
|
||||
return set(part, StrUtil.format("{}-{}", begin, end));
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置对应部分的定时任务值
|
||||
*
|
||||
* @param part 部分,如秒、分、时等
|
||||
* @param value 表达式值,如"*"、"1,2"、"5-12"等
|
||||
* @return this
|
||||
*/
|
||||
public CronPatternBuilder set(Part part, String value) {
|
||||
parts[part.ordinal()] = value;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String build() {
|
||||
return StrUtil.join(StrUtil.SPACE, (Object[]) parts);
|
||||
for (int i = Part.MINUTE.ordinal(); i < Part.YEAR.ordinal(); i++) {
|
||||
// 从分到周,用户未设置使用默认值
|
||||
// 秒和年如果不设置,忽略之
|
||||
if(StrUtil.isBlank(parts[i])){
|
||||
parts[i] = "*";
|
||||
}
|
||||
}
|
||||
|
||||
return StrJoiner.of(StrUtil.SPACE)
|
||||
.setNullMode(StrJoiner.NullMode.IGNORE)
|
||||
.append(this.parts)
|
||||
.toString();
|
||||
}
|
||||
}
|
||||
|
@@ -50,7 +50,7 @@ public class PatternParser {
|
||||
final List<String> patternList = StrUtil.splitTrim(groupPattern, '|');
|
||||
final List<PatternMatcher> patternMatchers = new ArrayList<>(patternList.size());
|
||||
for (String pattern : patternList) {
|
||||
patternMatchers.add(parseSinglePattern(pattern));
|
||||
patternMatchers.add(parseSingle(pattern));
|
||||
}
|
||||
return patternMatchers;
|
||||
}
|
||||
@@ -61,7 +61,7 @@ public class PatternParser {
|
||||
* @param pattern 表达式
|
||||
* @return {@link PatternMatcher}
|
||||
*/
|
||||
private static PatternMatcher parseSinglePattern(String pattern) {
|
||||
private static PatternMatcher parseSingle(String pattern) {
|
||||
final String[] parts = pattern.split("\\s+");
|
||||
Assert.checkBetween(parts.length, 5, 7,
|
||||
() -> new CronException("Pattern [{}] is invalid, it must be 5-7 parts!", pattern));
|
||||
|
44
hutool-cron/src/test/java/cn/hutool/cron/pattern/CronPatternBuilderTest.java
Executable file
44
hutool-cron/src/test/java/cn/hutool/cron/pattern/CronPatternBuilderTest.java
Executable file
@@ -0,0 +1,44 @@
|
||||
package cn.hutool.cron.pattern;
|
||||
|
||||
import cn.hutool.cron.CronException;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
public class CronPatternBuilderTest {
|
||||
|
||||
@Test
|
||||
public void buildMatchAllTest(){
|
||||
String build = CronPatternBuilder.of().build();
|
||||
Assert.assertEquals("* * * * *", build);
|
||||
|
||||
build = CronPatternBuilder.of()
|
||||
.set(Part.SECOND, "*")
|
||||
.build();
|
||||
Assert.assertEquals("* * * * * *", build);
|
||||
|
||||
build = CronPatternBuilder.of()
|
||||
.set(Part.SECOND, "*")
|
||||
.set(Part.YEAR, "*")
|
||||
.build();
|
||||
Assert.assertEquals("* * * * * * *", build);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void buildRangeTest(){
|
||||
String build = CronPatternBuilder.of()
|
||||
.set(Part.SECOND, "*")
|
||||
.setRange(Part.HOUR, 2, 9)
|
||||
.build();
|
||||
Assert.assertEquals("* * 2-9 * * *", build);
|
||||
}
|
||||
|
||||
@Test(expected = CronException.class)
|
||||
public void buildRangeErrorTest(){
|
||||
String build = CronPatternBuilder.of()
|
||||
.set(Part.SECOND, "*")
|
||||
// 55无效值
|
||||
.setRange(Part.HOUR, 2, 55)
|
||||
.build();
|
||||
Assert.assertEquals("* * 2-9 * * *", build);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user