Fix formatting a zero period with a weeks unit

See gh-51892

Signed-off-by: Yingzi Zhang <yingzizhang1205@gmail.com>
This commit is contained in:
Yingzi Zhang
2026-09-28 07:53:16 -07:00
committed by Phillip Webb
parent 9e93588936
commit b21366db6d
3 changed files with 17 additions and 1 deletions
@@ -31,6 +31,7 @@ import org.springframework.util.Assert;
*
* @author Eddú Meléndez
* @author Edson Chávez
* @author Yingzi Zhang
* @author Valentine Wu
* @since 2.3.0
* @see Period
@@ -85,7 +86,7 @@ public enum PeriodStyle {
@Override
public String print(Period value, @Nullable ChronoUnit unit) {
if (value.isZero()) {
return Unit.fromChronoUnit(unit).print(value);
return "0" + Unit.fromChronoUnit(unit).suffix;
}
StringBuilder result = new StringBuilder();
append(result, value, Unit.YEARS);
@@ -29,6 +29,7 @@ import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException
*
* @author Eddú Meléndez
* @author Edson Chávez
* @author Yingzi Zhang
* @author Valentine Wu
*/
class PeriodStyleTests {
@@ -222,6 +223,11 @@ class PeriodStyleTests {
assertThat(PeriodStyle.SIMPLE.print(period, ChronoUnit.YEARS)).isEqualTo("0y");
}
@Test
void printSimpleWhenZeroWithWeeksUnitShouldPrintInWeeks() {
assertThat(PeriodStyle.SIMPLE.print(Period.ZERO, ChronoUnit.WEEKS)).isEqualTo("0w");
}
@Test
void printSimpleWhenNonZeroShouldIgnoreUnit() {
Period period = Period.of(1, 2, 3);
@@ -32,6 +32,7 @@ import static org.assertj.core.api.Assertions.assertThat;
*
* @author Eddú Melendez
* @author Edson Chávez
* @author Yingzi Zhang
*/
class PeriodToStringConverterTests {
@@ -63,6 +64,14 @@ class PeriodToStringConverterTests {
assertThat(converted).isEqualTo("0y");
}
@ConversionServiceTest
void convertWithFormatAndWeeksUnitWhenZeroShouldUseFormatAndUnit(ConversionService conversionService) {
String converted = (String) conversionService.convert(Period.ZERO,
MockPeriodTypeDescriptor.get(ChronoUnit.WEEKS, PeriodStyle.SIMPLE),
TypeDescriptor.valueOf(String.class));
assertThat(converted).isEqualTo("0w");
}
@ConversionServiceTest
void convertWithFormatAndUnitWhenNonZeroShouldUseFormatAndIgnoreUnit(ConversionService conversionService) {
String converted = (String) conversionService.convert(Period.of(1, 0, 3),