Skip to content

Commit 523dd93

Browse files
committed
Merge branch '2.3.x'
Closes gh-22238
2 parents 0141f55 + 28128a9 commit 523dd93

File tree

4 files changed

+40
-5
lines changed

4 files changed

+40
-5
lines changed

spring-boot-project/spring-boot/src/main/java/org/springframework/boot/convert/PeriodStyle.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -212,13 +212,18 @@ public static PeriodStyle detect(String value) {
212212
throw new IllegalArgumentException("'" + value + "' is not a valid period");
213213
}
214214

215-
enum Unit {
215+
private enum Unit {
216216

217217
/**
218218
* Days, represented by suffix {@code d}.
219219
*/
220220
DAYS(ChronoUnit.DAYS, "d", Period::getDays, Period::ofDays),
221221

222+
/**
223+
* Weeks, represented by suffix {@code w}.
224+
*/
225+
WEEKS(ChronoUnit.WEEKS, "w", null, Period::ofWeeks),
226+
222227
/**
223228
* Months, represented by suffix {@code m}.
224229
*/
@@ -253,15 +258,16 @@ private String print(Period value) {
253258
return intValue(value) + this.suffix;
254259
}
255260

256-
public boolean isZero(Period value) {
261+
private boolean isZero(Period value) {
257262
return intValue(value) == 0;
258263
}
259264

260-
public int intValue(Period value) {
265+
private int intValue(Period value) {
266+
Assert.notNull(this.intValue, () -> "intValue cannot be extracted from " + this.name());
261267
return this.intValue.apply(value);
262268
}
263269

264-
public static Unit fromChronoUnit(ChronoUnit chronoUnit) {
270+
private static Unit fromChronoUnit(ChronoUnit chronoUnit) {
265271
if (chronoUnit == null) {
266272
return Unit.DAYS;
267273
}

spring-boot-project/spring-boot/src/test/java/org/springframework/boot/convert/NumberToPeriodConverterTests.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,14 @@ void convertWhenSimpleWithoutSuffixShouldReturnPeriod(ConversionService conversi
4848

4949
@ConversionServiceTest
5050
void convertWhenSimpleWithoutSuffixButWithAnnotationShouldReturnPeriod(ConversionService conversionService) {
51+
assertThat(convert(conversionService, 10, ChronoUnit.DAYS)).isEqualTo(Period.ofDays(10));
52+
assertThat(convert(conversionService, -10, ChronoUnit.DAYS)).isEqualTo(Period.ofDays(-10));
53+
assertThat(convert(conversionService, 10, ChronoUnit.WEEKS)).isEqualTo(Period.ofWeeks(10));
54+
assertThat(convert(conversionService, -10, ChronoUnit.WEEKS)).isEqualTo(Period.ofWeeks(-10));
5155
assertThat(convert(conversionService, 10, ChronoUnit.MONTHS)).isEqualTo(Period.ofMonths(10));
52-
assertThat(convert(conversionService, +10, ChronoUnit.MONTHS)).isEqualTo(Period.ofMonths(10));
5356
assertThat(convert(conversionService, -10, ChronoUnit.MONTHS)).isEqualTo(Period.ofMonths(-10));
57+
assertThat(convert(conversionService, 10, ChronoUnit.YEARS)).isEqualTo(Period.ofYears(10));
58+
assertThat(convert(conversionService, -10, ChronoUnit.YEARS)).isEqualTo(Period.ofYears(-10));
5459
}
5560

5661
private Period convert(ConversionService conversionService, Integer source) {

spring-boot-project/spring-boot/src/test/java/org/springframework/boot/convert/PeriodToStringConverterTests.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,13 @@ void convertWithFormatAndUnitWhenNonZeroShouldUseFormatAndIgnoreUnit(ConversionS
7171
assertThat(converted).isEqualTo("1y3d");
7272
}
7373

74+
@ConversionServiceTest
75+
void convertWithWeekUnitShouldConvertToStringInDays(ConversionService conversionService) {
76+
String converted = (String) conversionService.convert(Period.ofWeeks(53),
77+
MockPeriodTypeDescriptor.get(null, PeriodStyle.SIMPLE), TypeDescriptor.valueOf(String.class));
78+
assertThat(converted).isEqualTo("371d");
79+
}
80+
7481
static Stream<? extends Arguments> conversionServices() throws Exception {
7582
return ConversionServiceArguments.with(new PeriodToStringConverter());
7683
}

spring-boot-project/spring-boot/src/test/java/org/springframework/boot/convert/StringToPeriodConverterTests.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,14 @@ void convertWhenSimpleDaysShouldReturnPeriod(ConversionService conversionService
5555
assertThat(convert(conversionService, "-10D")).isEqualTo(Period.ofDays(-10));
5656
}
5757

58+
@ConversionServiceTest
59+
void convertWhenSimpleWeeksShouldReturnPeriod(ConversionService conversionService) {
60+
assertThat(convert(conversionService, "10w")).isEqualTo(Period.ofWeeks(10));
61+
assertThat(convert(conversionService, "10W")).isEqualTo(Period.ofWeeks(10));
62+
assertThat(convert(conversionService, "+10w")).isEqualTo(Period.ofWeeks(10));
63+
assertThat(convert(conversionService, "-10W")).isEqualTo(Period.ofWeeks(-10));
64+
}
65+
5866
@ConversionServiceTest
5967
void convertWhenSimpleMonthsShouldReturnPeriod(ConversionService conversionService) {
6068
assertThat(convert(conversionService, "10m")).isEqualTo(Period.ofMonths(10));
@@ -80,9 +88,18 @@ void convertWhenSimpleWithoutSuffixShouldReturnPeriod(ConversionService conversi
8088

8189
@ConversionServiceTest
8290
void convertWhenSimpleWithoutSuffixButWithAnnotationShouldReturnPeriod(ConversionService conversionService) {
91+
assertThat(convert(conversionService, "10", ChronoUnit.DAYS, null)).isEqualTo(Period.ofDays(10));
92+
assertThat(convert(conversionService, "+10", ChronoUnit.DAYS, null)).isEqualTo(Period.ofDays(10));
93+
assertThat(convert(conversionService, "-10", ChronoUnit.DAYS, null)).isEqualTo(Period.ofDays(-10));
94+
assertThat(convert(conversionService, "10", ChronoUnit.WEEKS, null)).isEqualTo(Period.ofWeeks(10));
95+
assertThat(convert(conversionService, "+10", ChronoUnit.WEEKS, null)).isEqualTo(Period.ofWeeks(10));
96+
assertThat(convert(conversionService, "-10", ChronoUnit.WEEKS, null)).isEqualTo(Period.ofWeeks(-10));
8397
assertThat(convert(conversionService, "10", ChronoUnit.MONTHS, null)).isEqualTo(Period.ofMonths(10));
8498
assertThat(convert(conversionService, "+10", ChronoUnit.MONTHS, null)).isEqualTo(Period.ofMonths(10));
8599
assertThat(convert(conversionService, "-10", ChronoUnit.MONTHS, null)).isEqualTo(Period.ofMonths(-10));
100+
assertThat(convert(conversionService, "10", ChronoUnit.YEARS, null)).isEqualTo(Period.ofYears(10));
101+
assertThat(convert(conversionService, "+10", ChronoUnit.YEARS, null)).isEqualTo(Period.ofYears(10));
102+
assertThat(convert(conversionService, "-10", ChronoUnit.YEARS, null)).isEqualTo(Period.ofYears(-10));
86103
}
87104

88105
private Period convert(ConversionService conversionService, String source) {

0 commit comments

Comments
 (0)