fix DateRange bug

This commit is contained in:
Looly
2021-06-28 21:55:53 +08:00
parent 16910ed709
commit 5719c28158
6 changed files with 73 additions and 39 deletions

View File

@@ -1,6 +1,7 @@
package cn.hutool.core.lang;
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateRange;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import org.junit.Assert;
@@ -12,30 +13,46 @@ import org.junit.Test;
*
*/
public class RangeTest {
@Test
public void dateRangeTest() {
DateTime start = DateUtil.parse("2017-01-01");
DateTime end = DateUtil.parse("2017-01-02");
final Range<DateTime> range = new Range<>(start, end, (current, end1, index) -> {
if (current.isAfterOrEquals(end1)) {
return null;
}
return current.offsetNew(DateField.DAY_OF_YEAR, 1);
});
Assert.assertTrue(range.hasNext());
Assert.assertEquals(range.next(), DateUtil.parse("2017-01-01"));
Assert.assertEquals(DateUtil.parse("2017-01-01"), range.next());
Assert.assertTrue(range.hasNext());
Assert.assertEquals(range.next(), DateUtil.parse("2017-01-02"));
Assert.assertEquals(DateUtil.parse("2017-01-02"), range.next());
Assert.assertFalse(range.hasNext());
}
@Test
public void dateRangeTest2() {
DateTime start = DateUtil.parse("2021-01-31");
DateTime end = DateUtil.parse("2021-03-31");
final DateRange range = DateUtil.range(start, end, DateField.MONTH);
Assert.assertTrue(range.hasNext());
Assert.assertEquals(DateUtil.parse("2021-01-31"), range.next());
Assert.assertTrue(range.hasNext());
Assert.assertEquals(DateUtil.parse("2021-02-28"), range.next());
Assert.assertTrue(range.hasNext());
Assert.assertEquals(DateUtil.parse("2021-03-31"), range.next());
Assert.assertFalse(range.hasNext());
}
@Test
public void intRangeTest() {
final Range<Integer> range = new Range<>(1, 1, (current, end, index) -> current >= end ? null : current + 10);
Assert.assertTrue(range.hasNext());
Assert.assertEquals(Integer.valueOf(1), range.next());
Assert.assertFalse(range.hasNext());