You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by br...@apache.org on 2014/05/02 11:21:14 UTC
svn commit: r1591840 - in /commons/proper/lang/trunk/src: changes/changes.xml
main/java/org/apache/commons/lang3/time/DurationFormatUtils.java
test/java/org/apache/commons/lang3/time/DurationFormatUtilsTest.java
Author: britter
Date: Fri May 2 09:21:14 2014
New Revision: 1591840
URL: http://svn.apache.org/r1591840
Log:
LANG-1003: DurationFormatUtils are not able to handle negative durations/periods. Reported by Michael Osipov.
Modified:
commons/proper/lang/trunk/src/changes/changes.xml
commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/time/DurationFormatUtils.java
commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/time/DurationFormatUtilsTest.java
Modified: commons/proper/lang/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/changes/changes.xml?rev=1591840&r1=1591839&r2=1591840&view=diff
==============================================================================
--- commons/proper/lang/trunk/src/changes/changes.xml [utf-8] (original)
+++ commons/proper/lang/trunk/src/changes/changes.xml [utf-8] Fri May 2 09:21:14 2014
@@ -22,6 +22,7 @@
<body>
<release version="3.4" date="tba" description="tba">
+ <action issue="LANG-1003" type="update" dev="britter">DurationFormatUtils are not able to handle negative durations/periods</action>
<action issue="LANG-1001" type="fix" dev="ggregory" due-to="Michael Osipov">ISO 8601 misspelled throughout the Javadocs</action>
<action issue="LANG-994" type="add" dev="britter" due-to="Mikhail Mazursky">Add zero copy read method to StrBuilder</action>
<action issue="LANG-993" type="add" dev="britter" due-to="Mikhail Mazursky">Add zero copy write method to StrBuilder</action>
Modified: commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/time/DurationFormatUtils.java
URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/time/DurationFormatUtils.java?rev=1591840&r1=1591839&r2=1591840&view=diff
==============================================================================
--- commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/time/DurationFormatUtils.java (original)
+++ commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/time/DurationFormatUtils.java Fri May 2 09:21:14 2014
@@ -124,6 +124,9 @@ public class DurationFormatUtils {
* @return the formatted duration, not null
*/
public static String formatDuration(final long durationMillis, final String format, final boolean padWithZeros) {
+ if(durationMillis < 0) {
+ throw new IllegalArgumentException("Duration must not be less than 0");
+ }
final Token[] tokens = lexx(format);
@@ -269,6 +272,9 @@ public class DurationFormatUtils {
*/
public static String formatPeriod(final long startMillis, final long endMillis, final String format, final boolean padWithZeros,
final TimeZone timezone) {
+ if(startMillis > endMillis) {
+ throw new IllegalArgumentException("endMillis must be greater than startMillis");
+ }
// Used to optimise for differences under 28 days and
// called formatDuration(millis, format); however this did not work
Modified: commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/time/DurationFormatUtilsTest.java
URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/time/DurationFormatUtilsTest.java?rev=1591840&r1=1591839&r2=1591840&view=diff
==============================================================================
--- commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/time/DurationFormatUtilsTest.java (original)
+++ commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/time/DurationFormatUtilsTest.java Fri May 2 09:21:14 2014
@@ -157,6 +157,11 @@ public class DurationFormatUtilsTest {
assertEquals("1 day 1 hour 1 minute 1 second", text);
}
+ @Test(expected = IllegalArgumentException.class)
+ public void testFormatNegativeDurationWords() throws Exception {
+ DurationFormatUtils.formatDurationWords(-5000, true, true);
+ }
+
@Test
public void testFormatDurationHMS() {
long time = 0;
@@ -187,6 +192,11 @@ public class DurationFormatUtilsTest {
assertEquals("1:02:12.789", DurationFormatUtils.formatDurationHMS(time));
}
+ @Test(expected = IllegalArgumentException.class)
+ public void testFormatNegativeDurationHMS() throws Exception {
+ DurationFormatUtils.formatDurationHMS(-5000);
+ }
+
@Test
public void testFormatDurationISO() {
assertEquals("P0Y0M0DT0H0M0.000S", DurationFormatUtils.formatDurationISO(0L));
@@ -196,6 +206,11 @@ public class DurationFormatUtilsTest {
assertEquals("P0Y0M0DT0H1M15.321S", DurationFormatUtils.formatDurationISO(75321L));
}
+ @Test(expected = IllegalArgumentException.class)
+ public void testFormatNegativeDurationISO() throws Exception {
+ DurationFormatUtils.formatDurationISO(-5000);
+ }
+
@Test
public void testFormatDuration() {
long duration = 0;
@@ -234,6 +249,11 @@ public class DurationFormatUtilsTest {
assertEquals("0 0 " + days, DurationFormatUtils.formatDuration(duration, "y M d"));
}
+ @Test(expected = IllegalArgumentException.class)
+ public void testFormatNegativeDuration() throws Exception {
+ DurationFormatUtils.formatDuration(-5000, "S", true);
+ }
+
@Test
public void testFormatPeriodISO() {
final TimeZone timeZone = TimeZone.getTimeZone("GMT-3");
@@ -262,6 +282,11 @@ public class DurationFormatUtilsTest {
// assertEquals("P1Y2M3DT10H30M", text);
}
+ @Test(expected = IllegalArgumentException.class)
+ public void testFormatPeriodISOStartGreaterEnd() throws Exception {
+ DurationFormatUtils.formatPeriodISO(5000, 2000);
+ }
+
@Test
public void testFormatPeriodISOMethod() {
assertEquals("P0Y0M0DT0H0M0.000S", DurationFormatUtils.formatPeriodISO(0L, 0L));
@@ -323,6 +348,11 @@ public class DurationFormatUtilsTest {
assertEquals("048", DurationFormatUtils.formatPeriod(time1970, time, "MMM"));
}
+ @Test(expected = IllegalArgumentException.class)
+ public void testFormatPeriodeStartGreaterEnd() throws Exception {
+ DurationFormatUtils.formatPeriod(5000, 2500, "yy/MM");
+ }
+
@Test
public void testLexx() {
// tests each constant