LOG4J2-435 Made Duration.parse() lenient: prefix 'P' and infix 'T' are now optional
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/43cc290f Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/43cc290f Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/43cc290f Branch: refs/heads/master Commit: 43cc290f862fd45a8a5bc27dcc5caf9baef4e31c Parents: 71cb1ce Author: rpopma <[email protected]> Authored: Sun Nov 15 22:33:03 2015 +0900 Committer: rpopma <[email protected]> Committed: Sun Nov 15 22:33:03 2015 +0900 ---------------------------------------------------------------------- .../core/appender/rolling/action/Duration.java | 4 +-- .../appender/rolling/action/DurationTest.java | 28 ++++++++++++++++++-- 2 files changed, 28 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/43cc290f/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/Duration.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/Duration.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/Duration.java index d2b1e18..841ada3 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/Duration.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/Duration.java @@ -63,8 +63,8 @@ public class Duration implements Serializable, Comparable<Duration> { /** * The pattern for parsing. */ - private static final Pattern PATTERN = Pattern.compile("P(?:([0-9]+)D)?" - + "(T(?:([0-9]+)H)?(?:([0-9]+)M)?(?:([0-9]+)?S)?)?", Pattern.CASE_INSENSITIVE); + private static final Pattern PATTERN = Pattern.compile("P?(?:([0-9]+)D)?" + + "(T?(?:([0-9]+)H)?(?:([0-9]+)M)?(?:([0-9]+)?S)?)?", Pattern.CASE_INSENSITIVE); /** * The number of seconds in the duration. http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/43cc290f/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/DurationTest.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/DurationTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/DurationTest.java index 61d3ccd..880a4cf 100644 --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/DurationTest.java +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/DurationTest.java @@ -43,8 +43,8 @@ public class DurationTest { } @Test(expected = IllegalArgumentException.class) - public void testParseFailsIfMissingTForTime() { - Duration.parse("P1S"); + public void testParseFailsIfTButMissingTime() { + Duration.parse("P1dT"); } @Test @@ -80,6 +80,30 @@ public class DurationTest { } @Test + public void testPrefixPNotRequired() { + assertEquals("PT1S", Duration.parse("T1S").toString()); + assertEquals("PT2M1S", Duration.parse("T2M1S").toString()); + assertEquals("PT3H2M1S", Duration.parse("T3H2M1S").toString()); + assertEquals("P4DT3H2M1S", Duration.parse("4DT3H2M1S").toString()); + } + + @Test + public void testInfixTNotRequired() { + assertEquals("PT1S", Duration.parse("P1S").toString()); + assertEquals("PT2M1S", Duration.parse("P2M1S").toString()); + assertEquals("PT3H2M1S", Duration.parse("P3H2M1S").toString()); + assertEquals("P4DT3H2M1S", Duration.parse("P4D3H2M1S").toString()); + } + + @Test + public void testPrefixPAndInfixTNotRequired() { + assertEquals("PT1S", Duration.parse("1S").toString()); + assertEquals("PT2M1S", Duration.parse("2M1S").toString()); + assertEquals("PT3H2M1S", Duration.parse("3H2M1S").toString()); + assertEquals("P4DT3H2M1S", Duration.parse("4D3H2M1S").toString()); + } + + @Test public void testCompareTo() { assertEquals(-1, Duration.parse("PT1S").compareTo(Duration.parse("PT2S"))); assertEquals(-1, Duration.parse("PT1M").compareTo(Duration.parse("PT2M")));
