aherbert commented on code in PR #1062:
URL: https://github.com/apache/commons-lang/pull/1062#discussion_r1284831279


##########
src/test/java/org/apache/commons/lang3/time/DurationFormatUtilsTest.java:
##########
@@ -632,4 +633,154 @@ public void testLowDurations() {
         }
     }
 
+
+    @Test
+    public void testUnmatchedOptionalTokens() {
+        assertThrows(IllegalArgumentException.class, () -> 
DurationFormatUtils.formatDuration(1, "[s"));
+        assertThrows(IllegalArgumentException.class, () -> 
DurationFormatUtils.formatDuration(1, "[[s"));
+        assertThrows(IllegalArgumentException.class, () -> 
DurationFormatUtils.formatDuration(1, "[s]]"));
+    }
+
+    @Test
+    public void testOptionalLiteralSpecialCharacters() {
+      assertEquals(
+          DurationFormatUtils.formatDuration(10000L, "s's'"),
+          DurationFormatUtils.formatDuration(10000L, "['['m']']s's'"));
+    }
+
+    @Test
+    public void testAlternatingLiteralOptionals() {
+        String format = "['d'dH'h'][m'm']['s's]['ms'S]";
+
+        assertEquals("d1",
+            DurationFormatUtils.formatDuration(Duration.ofDays(1).toMillis(), 
format));
+
+        assertEquals("1h",
+            DurationFormatUtils.formatDuration(Duration.ofHours(1).toMillis(), 
format));
+
+        assertEquals("1m",
+            
DurationFormatUtils.formatDuration(Duration.ofMinutes(1).toMillis(), format));
+
+        assertEquals("s1",
+            
DurationFormatUtils.formatDuration(Duration.ofSeconds(1).toMillis(), format));
+
+        assertEquals("ms001",
+            
DurationFormatUtils.formatDuration(Duration.ofMillis(1).toMillis(), format));
+
+        assertEquals("d1s1",
+            
DurationFormatUtils.formatDuration(Duration.ofDays(1).plusSeconds(1).toMillis(),
 format));
+
+        assertEquals("d11h",
+            
DurationFormatUtils.formatDuration(Duration.ofDays(1).plusHours(1).toMillis(), 
format));
+
+        assertEquals("d11h1m",
+            
DurationFormatUtils.formatDuration(Duration.ofDays(1).plusHours(1).plusMinutes(1).toMillis(),
 format));
+
+        assertEquals("d11h1ms1",
+            
DurationFormatUtils.formatDuration(Duration.ofDays(1).plusHours(1).plusMinutes(1).plusSeconds(1).toMillis(),
 format));
+
+        assertEquals("d11h1ms1ms001",
+            
DurationFormatUtils.formatDuration(Duration.ofDays(1).plusHours(1).plusMinutes(1).plusSeconds(1).plusMillis(1).toMillis(),
 format));
+
+    }
+
+    @Test
+    public void testLiteralPrefixOptionalToken() {
+      assertEquals(
+          DurationFormatUtils.formatDuration(10000L, "s's'"),
+          DurationFormatUtils.formatDuration(10000L, 
"['['d']']['<'H'>']['{'m'}']s's'"));
+      assertEquals(
+          DurationFormatUtils.formatDuration(10000L, "s's'"),
+          DurationFormatUtils.formatDuration(10000L, "['{'m'}']s's'")
+          );

Review Comment:
   Can be on previous line



##########
src/test/java/org/apache/commons/lang3/time/DurationFormatUtilsTest.java:
##########
@@ -632,4 +633,154 @@ public void testLowDurations() {
         }
     }
 
+
+    @Test
+    public void testUnmatchedOptionalTokens() {
+        assertThrows(IllegalArgumentException.class, () -> 
DurationFormatUtils.formatDuration(1, "[s"));
+        assertThrows(IllegalArgumentException.class, () -> 
DurationFormatUtils.formatDuration(1, "[[s"));
+        assertThrows(IllegalArgumentException.class, () -> 
DurationFormatUtils.formatDuration(1, "[s]]"));
+    }
+
+    @Test
+    public void testOptionalLiteralSpecialCharacters() {
+      assertEquals(
+          DurationFormatUtils.formatDuration(10000L, "s's'"),
+          DurationFormatUtils.formatDuration(10000L, "['['m']']s's'"));
+    }
+
+    @Test
+    public void testAlternatingLiteralOptionals() {
+        String format = "['d'dH'h'][m'm']['s's]['ms'S]";
+
+        assertEquals("d1",
+            DurationFormatUtils.formatDuration(Duration.ofDays(1).toMillis(), 
format));
+
+        assertEquals("1h",
+            DurationFormatUtils.formatDuration(Duration.ofHours(1).toMillis(), 
format));
+
+        assertEquals("1m",
+            
DurationFormatUtils.formatDuration(Duration.ofMinutes(1).toMillis(), format));
+
+        assertEquals("s1",
+            
DurationFormatUtils.formatDuration(Duration.ofSeconds(1).toMillis(), format));
+
+        assertEquals("ms001",
+            
DurationFormatUtils.formatDuration(Duration.ofMillis(1).toMillis(), format));
+
+        assertEquals("d1s1",
+            
DurationFormatUtils.formatDuration(Duration.ofDays(1).plusSeconds(1).toMillis(),
 format));
+
+        assertEquals("d11h",
+            
DurationFormatUtils.formatDuration(Duration.ofDays(1).plusHours(1).toMillis(), 
format));
+
+        assertEquals("d11h1m",
+            
DurationFormatUtils.formatDuration(Duration.ofDays(1).plusHours(1).plusMinutes(1).toMillis(),
 format));
+
+        assertEquals("d11h1ms1",
+            
DurationFormatUtils.formatDuration(Duration.ofDays(1).plusHours(1).plusMinutes(1).plusSeconds(1).toMillis(),
 format));
+
+        assertEquals("d11h1ms1ms001",
+            
DurationFormatUtils.formatDuration(Duration.ofDays(1).plusHours(1).plusMinutes(1).plusSeconds(1).plusMillis(1).toMillis(),
 format));
+
+    }
+
+    @Test
+    public void testLiteralPrefixOptionalToken() {
+      assertEquals(
+          DurationFormatUtils.formatDuration(10000L, "s's'"),
+          DurationFormatUtils.formatDuration(10000L, 
"['['d']']['<'H'>']['{'m'}']s's'"));
+      assertEquals(
+          DurationFormatUtils.formatDuration(10000L, "s's'"),
+          DurationFormatUtils.formatDuration(10000L, "['{'m'}']s's'")
+          );
+    }
+
+    @Test
+    public void testEmptyOptionals() {
+      assertEquals(
+          "",
+          DurationFormatUtils.formatDuration(0L, "[d'd'][H'h'][m'm'][s's']"));
+      assertEquals(
+          "",
+          DurationFormatUtils.formatDuration(0L, "['d''h''m''s's]")
+          );

Review Comment:
   Can be on previous line



##########
src/test/java/org/apache/commons/lang3/time/DurationFormatUtilsTest.java:
##########
@@ -632,4 +633,154 @@ public void testLowDurations() {
         }
     }
 
+
+    @Test
+    public void testUnmatchedOptionalTokens() {
+        assertThrows(IllegalArgumentException.class, () -> 
DurationFormatUtils.formatDuration(1, "[s"));
+        assertThrows(IllegalArgumentException.class, () -> 
DurationFormatUtils.formatDuration(1, "[[s"));
+        assertThrows(IllegalArgumentException.class, () -> 
DurationFormatUtils.formatDuration(1, "[s]]"));
+    }
+
+    @Test
+    public void testOptionalLiteralSpecialCharacters() {
+      assertEquals(
+          DurationFormatUtils.formatDuration(10000L, "s's'"),
+          DurationFormatUtils.formatDuration(10000L, "['['m']']s's'"));
+    }
+
+    @Test
+    public void testAlternatingLiteralOptionals() {
+        String format = "['d'dH'h'][m'm']['s's]['ms'S]";
+
+        assertEquals("d1",
+            DurationFormatUtils.formatDuration(Duration.ofDays(1).toMillis(), 
format));
+
+        assertEquals("1h",
+            DurationFormatUtils.formatDuration(Duration.ofHours(1).toMillis(), 
format));
+
+        assertEquals("1m",
+            
DurationFormatUtils.formatDuration(Duration.ofMinutes(1).toMillis(), format));
+
+        assertEquals("s1",
+            
DurationFormatUtils.formatDuration(Duration.ofSeconds(1).toMillis(), format));
+
+        assertEquals("ms001",
+            
DurationFormatUtils.formatDuration(Duration.ofMillis(1).toMillis(), format));
+
+        assertEquals("d1s1",
+            
DurationFormatUtils.formatDuration(Duration.ofDays(1).plusSeconds(1).toMillis(),
 format));
+
+        assertEquals("d11h",
+            
DurationFormatUtils.formatDuration(Duration.ofDays(1).plusHours(1).toMillis(), 
format));
+
+        assertEquals("d11h1m",
+            
DurationFormatUtils.formatDuration(Duration.ofDays(1).plusHours(1).plusMinutes(1).toMillis(),
 format));
+
+        assertEquals("d11h1ms1",
+            
DurationFormatUtils.formatDuration(Duration.ofDays(1).plusHours(1).plusMinutes(1).plusSeconds(1).toMillis(),
 format));
+
+        assertEquals("d11h1ms1ms001",
+            
DurationFormatUtils.formatDuration(Duration.ofDays(1).plusHours(1).plusMinutes(1).plusSeconds(1).plusMillis(1).toMillis(),
 format));
+
+    }
+
+    @Test
+    public void testLiteralPrefixOptionalToken() {
+      assertEquals(
+          DurationFormatUtils.formatDuration(10000L, "s's'"),
+          DurationFormatUtils.formatDuration(10000L, 
"['['d']']['<'H'>']['{'m'}']s's'"));
+      assertEquals(
+          DurationFormatUtils.formatDuration(10000L, "s's'"),
+          DurationFormatUtils.formatDuration(10000L, "['{'m'}']s's'")
+          );
+    }
+
+    @Test
+    public void testEmptyOptionals() {
+      assertEquals(
+          "",
+          DurationFormatUtils.formatDuration(0L, "[d'd'][H'h'][m'm'][s's']"));
+      assertEquals(
+          "",
+          DurationFormatUtils.formatDuration(0L, "['d''h''m''s's]")
+          );
+    }
+
+    @Test
+    public void testMultipleOptionalBlocks() {
+
+      assertEquals(
+          DurationFormatUtils.formatDuration(Duration.ofHours(1).toMillis(), 
"'[['H']]'"),
+          DurationFormatUtils.formatDuration(Duration.ofHours(1).toMillis(), 
"['{'d'}']['[['H']]']"));
+
+      assertEquals(
+          DurationFormatUtils.formatDuration(Duration.ofDays(1).toMillis(), 
"['{'d'}']"),
+          DurationFormatUtils.formatDuration(Duration.ofDays(1).toMillis(), 
"['{'d'}']['['H']']"));
+

Review Comment:
   Remove empty line



##########
src/test/java/org/apache/commons/lang3/time/DurationFormatUtilsTest.java:
##########
@@ -632,4 +633,154 @@ public void testLowDurations() {
         }
     }
 
+
+    @Test
+    public void testUnmatchedOptionalTokens() {
+        assertThrows(IllegalArgumentException.class, () -> 
DurationFormatUtils.formatDuration(1, "[s"));
+        assertThrows(IllegalArgumentException.class, () -> 
DurationFormatUtils.formatDuration(1, "[[s"));
+        assertThrows(IllegalArgumentException.class, () -> 
DurationFormatUtils.formatDuration(1, "[s]]"));
+    }
+
+    @Test
+    public void testOptionalLiteralSpecialCharacters() {
+      assertEquals(
+          DurationFormatUtils.formatDuration(10000L, "s's'"),
+          DurationFormatUtils.formatDuration(10000L, "['['m']']s's'"));
+    }
+
+    @Test
+    public void testAlternatingLiteralOptionals() {
+        String format = "['d'dH'h'][m'm']['s's]['ms'S]";
+
+        assertEquals("d1",
+            DurationFormatUtils.formatDuration(Duration.ofDays(1).toMillis(), 
format));
+
+        assertEquals("1h",
+            DurationFormatUtils.formatDuration(Duration.ofHours(1).toMillis(), 
format));
+
+        assertEquals("1m",
+            
DurationFormatUtils.formatDuration(Duration.ofMinutes(1).toMillis(), format));
+
+        assertEquals("s1",
+            
DurationFormatUtils.formatDuration(Duration.ofSeconds(1).toMillis(), format));
+
+        assertEquals("ms001",
+            
DurationFormatUtils.formatDuration(Duration.ofMillis(1).toMillis(), format));
+
+        assertEquals("d1s1",
+            
DurationFormatUtils.formatDuration(Duration.ofDays(1).plusSeconds(1).toMillis(),
 format));
+
+        assertEquals("d11h",
+            
DurationFormatUtils.formatDuration(Duration.ofDays(1).plusHours(1).toMillis(), 
format));
+
+        assertEquals("d11h1m",
+            
DurationFormatUtils.formatDuration(Duration.ofDays(1).plusHours(1).plusMinutes(1).toMillis(),
 format));
+
+        assertEquals("d11h1ms1",
+            
DurationFormatUtils.formatDuration(Duration.ofDays(1).plusHours(1).plusMinutes(1).plusSeconds(1).toMillis(),
 format));
+
+        assertEquals("d11h1ms1ms001",
+            
DurationFormatUtils.formatDuration(Duration.ofDays(1).plusHours(1).plusMinutes(1).plusSeconds(1).plusMillis(1).toMillis(),
 format));
+
+    }
+
+    @Test
+    public void testLiteralPrefixOptionalToken() {
+      assertEquals(
+          DurationFormatUtils.formatDuration(10000L, "s's'"),
+          DurationFormatUtils.formatDuration(10000L, 
"['['d']']['<'H'>']['{'m'}']s's'"));
+      assertEquals(
+          DurationFormatUtils.formatDuration(10000L, "s's'"),
+          DurationFormatUtils.formatDuration(10000L, "['{'m'}']s's'")
+          );
+    }
+
+    @Test
+    public void testEmptyOptionals() {
+      assertEquals(
+          "",
+          DurationFormatUtils.formatDuration(0L, "[d'd'][H'h'][m'm'][s's']"));
+      assertEquals(
+          "",
+          DurationFormatUtils.formatDuration(0L, "['d''h''m''s's]")
+          );
+    }
+
+    @Test
+    public void testMultipleOptionalBlocks() {
+
+      assertEquals(
+          DurationFormatUtils.formatDuration(Duration.ofHours(1).toMillis(), 
"'[['H']]'"),
+          DurationFormatUtils.formatDuration(Duration.ofHours(1).toMillis(), 
"['{'d'}']['[['H']]']"));
+
+      assertEquals(
+          DurationFormatUtils.formatDuration(Duration.ofDays(1).toMillis(), 
"['{'d'}']"),
+          DurationFormatUtils.formatDuration(Duration.ofDays(1).toMillis(), 
"['{'d'}']['['H']']"));
+
+    }
+
+    @Test
+    public void testOptionalToken() {
+
+        //make sure optional formats match corresponding adjusted non-optional 
formats
+        assertEquals(
+                DurationFormatUtils.formatDuration(915361000L, 
"d'd'H'h'm'm's's'"),
+                DurationFormatUtils.formatDuration(915361000L, 
"[d'd'H'h'm'm']s's'"));
+
+        assertEquals(
+                DurationFormatUtils.formatDuration(9153610L, "H'h'm'm's's'"),
+                DurationFormatUtils.formatDuration(9153610L, 
"[d'd'H'h'm'm']s's'"));
+
+        assertEquals(
+                DurationFormatUtils.formatDuration(915361L, "m'm's's'"),
+                DurationFormatUtils.formatDuration(915361L, 
"[d'd'H'h'm'm']s's'"));
+
+        assertEquals(
+                DurationFormatUtils.formatDuration(9153L, "s's'"),
+                DurationFormatUtils.formatDuration(9153L, 
"[d'd'H'h'm'm']s's'"));
+
+        assertEquals(
+                DurationFormatUtils.formatDuration(9153L, "s's'"),
+                DurationFormatUtils.formatDuration(9153L, 
"[d'd'H'h'm'm']s's'"));
+
+        assertEquals(
+                DurationFormatUtils.formatPeriod(9153610L, 915361000L, 
"d'd'H'h'm'm's's'"),
+                DurationFormatUtils.formatPeriod(9153610L, 915361000L, 
"[d'd'H'h'm'm']s's'"));
+
+        assertEquals(
+                DurationFormatUtils.formatPeriod(915361L, 9153610L, 
"H'h'm'm's's'"),
+                DurationFormatUtils.formatPeriod(915361L, 9153610L, 
"[d'd'H'h'm'm']s's'"));
+
+        assertEquals(
+                DurationFormatUtils.formatPeriod(9153L, 915361L, "m'm's's'"),
+                DurationFormatUtils.formatPeriod(9153L, 915361L, 
"[d'd'H'h'm'm']s's'"));
+
+        assertEquals(
+                DurationFormatUtils.formatPeriod(0L, 9153L, "s's'"),
+                DurationFormatUtils.formatPeriod(0L, 9153L, 
"[d'd'H'h'm'm']s's'"));
+
+        //make sure optional parts are actually omitted when zero
+
+        assertEquals("2h32m33s610ms", 
DurationFormatUtils.formatDuration(9153610L, "[d'd'H'h'm'm's's']S'ms'"));
+
+        assertEquals("15m15s361ms", 
DurationFormatUtils.formatDuration(915361L, "[d'd'H'h'm'm's's']S'ms'"));
+
+        assertEquals("9s153ms", DurationFormatUtils.formatDuration(9153L, 
"[d'd'H'h'm'm's's']S'ms'"));
+
+        assertEquals("915ms", DurationFormatUtils.formatDuration(915L, 
"[d'd'H'h'm'm's's']S'ms'"));
+
+        //make sure we can handle omitting multiple literals after a token
+
+        assertEquals(
+                DurationFormatUtils.formatPeriod(915361L, 9153610L, 
"H'h''h2'm'm's's'"),
+                DurationFormatUtils.formatPeriod(915361L, 9153610L, 
"[d'd''d2'H'h''h2'm'm']s's'"));
+    }
+
+    private DurationFormatUtils.Token createTokenWithCount(final Object value, 
final int count) {
+        DurationFormatUtils.Token token = new DurationFormatUtils.Token(value, 
false, -1);
+        for (int i=1; i<count; i++) {

Review Comment:
   Whitespace padding: `for (int i = 1; i < count; i++) {`



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to