From c579c9378b674e5579db3233770fd3c7886460cb Mon Sep 17 00:00:00 2001 From: valentine-dev Date: Fri, 2 Sep 2022 13:41:12 -0700 Subject: [PATCH 1/2] Support lower-case input in DurationStyle See gh-32223 --- .../java/org/springframework/boot/convert/DurationStyle.java | 2 +- .../org/springframework/boot/convert/DurationStyleTests.java | 4 ++++ .../boot/convert/StringToDurationConverterTests.java | 1 + 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/convert/DurationStyle.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/convert/DurationStyle.java index 70992bc17ed5..5c32b9a00e65 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/convert/DurationStyle.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/convert/DurationStyle.java @@ -62,7 +62,7 @@ public String print(Duration value, ChronoUnit unit) { /** * ISO-8601 formatting. */ - ISO8601("^[+-]?P.*$") { + ISO8601("^[+-]?[pP].*$") { @Override public Duration parse(String value, ChronoUnit unit) { diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/convert/DurationStyleTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/convert/DurationStyleTests.java index 9dc23b1c141a..92c71661f309 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/convert/DurationStyleTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/convert/DurationStyleTests.java @@ -39,6 +39,7 @@ void detectAndParseWhenValueIsNullShouldThrowException() { @Test void detectAndParseWhenIso8601ShouldReturnDuration() { + assertThat(DurationStyle.detectAndParse("pt20.345s")).isEqualTo(Duration.parse("pt20.345s")); assertThat(DurationStyle.detectAndParse("PT20.345S")).isEqualTo(Duration.parse("PT20.345S")); assertThat(DurationStyle.detectAndParse("PT15M")).isEqualTo(Duration.parse("PT15M")); assertThat(DurationStyle.detectAndParse("+PT15M")).isEqualTo(Duration.parse("PT15M")); @@ -143,6 +144,7 @@ void detectWhenSimpleShouldReturnSimple() { @Test void detectWhenIso8601ShouldReturnIso8601() { + assertThat(DurationStyle.detect("pt20.345s")).isEqualTo(DurationStyle.ISO8601); assertThat(DurationStyle.detect("PT20.345S")).isEqualTo(DurationStyle.ISO8601); assertThat(DurationStyle.detect("PT15M")).isEqualTo(DurationStyle.ISO8601); assertThat(DurationStyle.detect("+PT15M")).isEqualTo(DurationStyle.ISO8601); @@ -161,6 +163,7 @@ void detectWhenUnknownShouldThrowException() { @Test void parseIso8601ShouldParse() { + assertThat(DurationStyle.ISO8601.parse("pt20.345s")).isEqualTo(Duration.parse("pt20.345s")); assertThat(DurationStyle.ISO8601.parse("PT20.345S")).isEqualTo(Duration.parse("PT20.345S")); assertThat(DurationStyle.ISO8601.parse("PT15M")).isEqualTo(Duration.parse("PT15M")); assertThat(DurationStyle.ISO8601.parse("+PT15M")).isEqualTo(Duration.parse("PT15M")); @@ -173,6 +176,7 @@ void parseIso8601ShouldParse() { @Test void parseIso8601WithUnitShouldIgnoreUnit() { + assertThat(DurationStyle.ISO8601.parse("pt20.345s", ChronoUnit.SECONDS)).isEqualTo(Duration.parse("pt20.345s")); assertThat(DurationStyle.ISO8601.parse("PT20.345S", ChronoUnit.SECONDS)).isEqualTo(Duration.parse("PT20.345S")); assertThat(DurationStyle.ISO8601.parse("PT15M", ChronoUnit.SECONDS)).isEqualTo(Duration.parse("PT15M")); assertThat(DurationStyle.ISO8601.parse("+PT15M", ChronoUnit.SECONDS)).isEqualTo(Duration.parse("PT15M")); diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/convert/StringToDurationConverterTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/convert/StringToDurationConverterTests.java index 4ffad3e6cc2f..99647b650335 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/convert/StringToDurationConverterTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/convert/StringToDurationConverterTests.java @@ -38,6 +38,7 @@ class StringToDurationConverterTests { @ConversionServiceTest void convertWhenIso8601ShouldReturnDuration(ConversionService conversionService) { + assertThat(convert(conversionService, "pt20.345s")).isEqualTo(Duration.parse("pt20.345s")); assertThat(convert(conversionService, "PT20.345S")).isEqualTo(Duration.parse("PT20.345S")); assertThat(convert(conversionService, "PT15M")).isEqualTo(Duration.parse("PT15M")); assertThat(convert(conversionService, "+PT15M")).isEqualTo(Duration.parse("PT15M")); From bc23e700245596ae33324fe84d9dfa19038f2236 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Mon, 5 Sep 2022 14:53:50 +0100 Subject: [PATCH 2/2] Polish "Support lower-case input in DurationStyle" See gh-32223 --- .../java/org/springframework/boot/convert/DurationStyle.java | 3 ++- .../org/springframework/boot/convert/DurationStyleTests.java | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/convert/DurationStyle.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/convert/DurationStyle.java index 5c32b9a00e65..cd282e23951c 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/convert/DurationStyle.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/convert/DurationStyle.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2021 the original author or authors. + * Copyright 2012-2022 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -29,6 +29,7 @@ * Duration format styles. * * @author Phillip Webb + * @author Valentine Wu * @since 2.0.0 */ public enum DurationStyle { diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/convert/DurationStyleTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/convert/DurationStyleTests.java index 92c71661f309..213ee92fa483 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/convert/DurationStyleTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/convert/DurationStyleTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2021 the original author or authors. + * Copyright 2012-2022 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -28,6 +28,7 @@ * Tests for {@link DurationStyle}. * * @author Phillip Webb + * @author Valentine Wu */ class DurationStyleTests {