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")));

Reply via email to