The method DurationFormatUtils.formatDurationWords incorrectly outputs numbers
ending in "1" without a plural "s" postfix for the time unit.
Added a fix and tests that "1 <unit>s" gets converted to "1 <unit>" but that "11
<unit>s" is left alone.

git-svn-id: https://svn.apache.org/repos/asf/jakarta/commons/proper/lang/trunk@348311 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Gary D. Gregory 2005-11-23 00:19:44 +00:00
parent e150cc5810
commit f0f0bf81e7
2 changed files with 225 additions and 158 deletions

View File

@ -211,11 +211,12 @@ public class DurationFormatUtils {
}
}
// handle plurals
duration = StringUtils.replaceOnce(duration, "1 seconds", "1 second");
duration = StringUtils.replaceOnce(duration, "1 minutes", "1 minute");
duration = StringUtils.replaceOnce(duration, "1 hours", "1 hour");
duration = StringUtils.replaceOnce(duration, "1 days", "1 day");
return duration;
duration = " " + duration;
duration = StringUtils.replaceOnce(duration, " 1 seconds", " 1 second");
duration = StringUtils.replaceOnce(duration, " 1 minutes", " 1 minute");
duration = StringUtils.replaceOnce(duration, " 1 hours", " 1 hour");
duration = StringUtils.replaceOnce(duration, " 1 days", " 1 day");
return duration.trim();
}
//-----------------------------------------------------------------------

View File

@ -13,6 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.commons.lang.time;
import java.lang.reflect.Constructor;
@ -27,7 +28,7 @@ import junit.textui.TestRunner;
/**
* TestCase for DurationFormatUtils.
*
*
* @author Apache Ant - DateUtilsTest
* @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
@ -51,7 +52,7 @@ public class DurationFormatUtilsTest extends TestCase {
super(s);
}
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
public void testConstructor() {
assertNotNull(new DurationFormatUtils());
Constructor[] cons = DurationFormatUtils.class.getDeclaredConstructors();
@ -60,89 +61,162 @@ public class DurationFormatUtilsTest extends TestCase {
assertEquals(true, Modifier.isPublic(DurationFormatUtils.class.getModifiers()));
assertEquals(false, Modifier.isFinal(DurationFormatUtils.class.getModifiers()));
}
//-----------------------------------------------------------------------
public void testFormatDurationWords(){
// -----------------------------------------------------------------------
public void testFormatDurationWords() {
String text = null;
text = DurationFormatUtils.formatDurationWords(50*1000, true, false);
text = DurationFormatUtils.formatDurationWords(50 * 1000, true, false);
assertEquals("50 seconds", text);
text = DurationFormatUtils.formatDurationWords(65*1000, true, false);
text = DurationFormatUtils.formatDurationWords(65 * 1000, true, false);
assertEquals("1 minute 5 seconds", text);
text = DurationFormatUtils.formatDurationWords(120*1000, true, false);
text = DurationFormatUtils.formatDurationWords(120 * 1000, true, false);
assertEquals("2 minutes 0 seconds", text);
text = DurationFormatUtils.formatDurationWords(121*1000, true, false);
text = DurationFormatUtils.formatDurationWords(121 * 1000, true, false);
assertEquals("2 minutes 1 second", text);
text = DurationFormatUtils.formatDurationWords(72*60*1000, true, false);
text = DurationFormatUtils.formatDurationWords(72 * 60 * 1000, true, false);
assertEquals("1 hour 12 minutes 0 seconds", text);
text = DurationFormatUtils.formatDurationWords(24*60*60*1000, true, false);
text = DurationFormatUtils.formatDurationWords(24 * 60 * 60 * 1000, true, false);
assertEquals("1 day 0 hours 0 minutes 0 seconds", text);
text = DurationFormatUtils.formatDurationWords(50*1000, true, true);
text = DurationFormatUtils.formatDurationWords(50 * 1000, true, true);
assertEquals("50 seconds", text);
text = DurationFormatUtils.formatDurationWords(65*1000, true, true);
text = DurationFormatUtils.formatDurationWords(65 * 1000, true, true);
assertEquals("1 minute 5 seconds", text);
text = DurationFormatUtils.formatDurationWords(120*1000, true, true);
text = DurationFormatUtils.formatDurationWords(120 * 1000, true, true);
assertEquals("2 minutes", text);
text = DurationFormatUtils.formatDurationWords(121*1000, true, true);
text = DurationFormatUtils.formatDurationWords(121 * 1000, true, true);
assertEquals("2 minutes 1 second", text);
text = DurationFormatUtils.formatDurationWords(72*60*1000, true, true);
text = DurationFormatUtils.formatDurationWords(72 * 60 * 1000, true, true);
assertEquals("1 hour 12 minutes", text);
text = DurationFormatUtils.formatDurationWords(24*60*60*1000, true, true);
text = DurationFormatUtils.formatDurationWords(24 * 60 * 60 * 1000, true, true);
assertEquals("1 day", text);
text = DurationFormatUtils.formatDurationWords(50*1000, false, true);
text = DurationFormatUtils.formatDurationWords(50 * 1000, false, true);
assertEquals("0 days 0 hours 0 minutes 50 seconds", text);
text = DurationFormatUtils.formatDurationWords(65*1000, false, true);
text = DurationFormatUtils.formatDurationWords(65 * 1000, false, true);
assertEquals("0 days 0 hours 1 minute 5 seconds", text);
text = DurationFormatUtils.formatDurationWords(120*1000, false, true);
text = DurationFormatUtils.formatDurationWords(120 * 1000, false, true);
assertEquals("0 days 0 hours 2 minutes", text);
text = DurationFormatUtils.formatDurationWords(121*1000, false, true);
text = DurationFormatUtils.formatDurationWords(121 * 1000, false, true);
assertEquals("0 days 0 hours 2 minutes 1 second", text);
text = DurationFormatUtils.formatDurationWords(72*60*1000, false, true);
text = DurationFormatUtils.formatDurationWords(72 * 60 * 1000, false, true);
assertEquals("0 days 1 hour 12 minutes", text);
text = DurationFormatUtils.formatDurationWords(24*60*60*1000, false, true);
text = DurationFormatUtils.formatDurationWords(24 * 60 * 60 * 1000, false, true);
assertEquals("1 day", text);
text = DurationFormatUtils.formatDurationWords(50*1000, false, false);
text = DurationFormatUtils.formatDurationWords(50 * 1000, false, false);
assertEquals("0 days 0 hours 0 minutes 50 seconds", text);
text = DurationFormatUtils.formatDurationWords(65*1000, false, false);
text = DurationFormatUtils.formatDurationWords(65 * 1000, false, false);
assertEquals("0 days 0 hours 1 minute 5 seconds", text);
text = DurationFormatUtils.formatDurationWords(120*1000, false, false);
text = DurationFormatUtils.formatDurationWords(120 * 1000, false, false);
assertEquals("0 days 0 hours 2 minutes 0 seconds", text);
text = DurationFormatUtils.formatDurationWords(121*1000, false, false);
text = DurationFormatUtils.formatDurationWords(121 * 1000, false, false);
assertEquals("0 days 0 hours 2 minutes 1 second", text);
text = DurationFormatUtils.formatDurationWords(72*60*1000, false, false);
text = DurationFormatUtils.formatDurationWords(72 * 60 * 1000, false, false);
assertEquals("0 days 1 hour 12 minutes 0 seconds", text);
text = DurationFormatUtils.formatDurationWords(48*60*60*1000 + 72*60*1000 , false, false);
text = DurationFormatUtils.formatDurationWords(24 * 60 * 60 * 1000 + 72 * 60 * 1000, false, false);
assertEquals("1 day 1 hour 12 minutes 0 seconds", text);
text = DurationFormatUtils.formatDurationWords(2 * 24 * 60 * 60 * 1000 + 72 * 60 * 1000, false, false);
assertEquals("2 days 1 hour 12 minutes 0 seconds", text);
for (int i = 2; i < 31; i++) {
text = DurationFormatUtils.formatDurationWords(i * 24 * 60 * 60 * 1000, false, false);
// assertEquals(i + " days 0 hours 0 minutes 0 seconds", text);
//
// junit.framework.ComparisonFailure: expected:<25 days 0 hours 0 minutes 0...> but was:<-24 days -17 hours
// -2 minutes -47...>
// at junit.framework.Assert.assertEquals(Assert.java:81)
// at junit.framework.Assert.assertEquals(Assert.java:87)
// at
// org.apache.commons.lang.time.DurationFormatUtilsTest.testFormatDurationWords(DurationFormatUtilsTest.java:124)
// at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
// at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
// at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
// at java.lang.reflect.Method.invoke(Method.java:324)
// at junit.framework.TestCase.runTest(TestCase.java:154)
// at junit.framework.TestCase.runBare(TestCase.java:127)
// at junit.framework.TestResult$1.protect(TestResult.java:106)
// at junit.framework.TestResult.runProtected(TestResult.java:124)
// at junit.framework.TestResult.run(TestResult.java:109)
// at junit.framework.TestCase.run(TestCase.java:118)
// at junit.framework.TestSuite.runTest(TestSuite.java:208)
// at junit.framework.TestSuite.run(TestSuite.java:203)
// at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:478)
// at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:344)
// at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
}
}
public void testFormatDurationHMS(){
/**
* Tests that "1 <unit>s" gets converted to "1 <unit>" but that "11 <unit>s" is left alone.
*/
public void testFormatDurationPluralWords() {
long oneSecond = 1000;
long oneMinute = oneSecond * 60;
long oneHour = oneMinute * 60;
long oneDay = oneHour * 24;
String text = null;
text = DurationFormatUtils.formatDurationWords(oneSecond, false, false);
assertEquals("0 days 0 hours 0 minutes 1 second", text);
text = DurationFormatUtils.formatDurationWords(oneSecond * 2, false, false);
assertEquals("0 days 0 hours 0 minutes 2 seconds", text);
text = DurationFormatUtils.formatDurationWords(oneSecond * 11, false, false);
assertEquals("0 days 0 hours 0 minutes 11 seconds", text);
text = DurationFormatUtils.formatDurationWords(oneMinute, false, false);
assertEquals("0 days 0 hours 1 minute 0 seconds", text);
text = DurationFormatUtils.formatDurationWords(oneMinute * 2, false, false);
assertEquals("0 days 0 hours 2 minutes 0 seconds", text);
text = DurationFormatUtils.formatDurationWords(oneMinute * 11, false, false);
assertEquals("0 days 0 hours 11 minutes 0 seconds", text);
text = DurationFormatUtils.formatDurationWords(oneMinute + oneSecond, false, false);
assertEquals("0 days 0 hours 1 minute 1 second", text);
text = DurationFormatUtils.formatDurationWords(oneHour, false, false);
assertEquals("0 days 1 hour 0 minutes 0 seconds", text);
text = DurationFormatUtils.formatDurationWords(oneHour * 2, false, false);
assertEquals("0 days 2 hours 0 minutes 0 seconds", text);
text = DurationFormatUtils.formatDurationWords(oneHour * 11, false, false);
assertEquals("0 days 11 hours 0 minutes 0 seconds", text);
text = DurationFormatUtils.formatDurationWords(oneHour + oneMinute + oneSecond, false, false);
assertEquals("0 days 1 hour 1 minute 1 second", text);
text = DurationFormatUtils.formatDurationWords(oneDay, false, false);
assertEquals("1 day 0 hours 0 minutes 0 seconds", text);
text = DurationFormatUtils.formatDurationWords(oneDay * 2, false, false);
assertEquals("2 days 0 hours 0 minutes 0 seconds", text);
text = DurationFormatUtils.formatDurationWords(oneDay * 11, false, false);
assertEquals("11 days 0 hours 0 minutes 0 seconds", text);
text = DurationFormatUtils.formatDurationWords(oneDay + oneHour + oneMinute + oneSecond, false, false);
assertEquals("1 day 1 hour 1 minute 1 second", text);
}
public void testFormatDurationHMS() {
long time = 0;
assertEquals("0:00:00.000", DurationFormatUtils.formatDurationHMS(time));
time = 1;
assertEquals("0:00:00.001", DurationFormatUtils.formatDurationHMS(time));
time = 15;
assertEquals("0:00:00.015", DurationFormatUtils.formatDurationHMS(time));
time = 165;
assertEquals("0:00:00.165", DurationFormatUtils.formatDurationHMS(time));
time = 1675;
assertEquals("0:00:01.675", DurationFormatUtils.formatDurationHMS(time));
time = 13465;
assertEquals("0:00:13.465", DurationFormatUtils.formatDurationHMS(time));
time = 72789;
assertEquals("0:01:12.789", DurationFormatUtils.formatDurationHMS(time));
time = 12789 + 32 * 60000;
assertEquals("0:32:12.789", DurationFormatUtils.formatDurationHMS(time));
time = 12789 + 62 * 60000;
assertEquals("1:02:12.789", DurationFormatUtils.formatDurationHMS(time));
}
@ -157,31 +231,31 @@ public class DurationFormatUtilsTest extends TestCase {
public void testFormatDuration() {
long duration = 0;
assertEquals( "0", DurationFormatUtils.formatDuration(duration, "y") );
assertEquals( "0", DurationFormatUtils.formatDuration(duration, "M") );
assertEquals( "0", DurationFormatUtils.formatDuration(duration, "d") );
assertEquals( "0", DurationFormatUtils.formatDuration(duration, "H") );
assertEquals( "0", DurationFormatUtils.formatDuration(duration, "m") );
assertEquals( "0", DurationFormatUtils.formatDuration(duration, "s") );
assertEquals( "0", DurationFormatUtils.formatDuration(duration, "S") );
assertEquals( "0000", DurationFormatUtils.formatDuration(duration, "SSSS") );
assertEquals( "0000", DurationFormatUtils.formatDuration(duration, "yyyy") );
assertEquals( "0000", DurationFormatUtils.formatDuration(duration, "yyMM") );
assertEquals("0", DurationFormatUtils.formatDuration(duration, "y"));
assertEquals("0", DurationFormatUtils.formatDuration(duration, "M"));
assertEquals("0", DurationFormatUtils.formatDuration(duration, "d"));
assertEquals("0", DurationFormatUtils.formatDuration(duration, "H"));
assertEquals("0", DurationFormatUtils.formatDuration(duration, "m"));
assertEquals("0", DurationFormatUtils.formatDuration(duration, "s"));
assertEquals("0", DurationFormatUtils.formatDuration(duration, "S"));
assertEquals("0000", DurationFormatUtils.formatDuration(duration, "SSSS"));
assertEquals("0000", DurationFormatUtils.formatDuration(duration, "yyyy"));
assertEquals("0000", DurationFormatUtils.formatDuration(duration, "yyMM"));
duration = 60 * 1000;
assertEquals( "0", DurationFormatUtils.formatDuration(duration, "y") );
assertEquals( "0", DurationFormatUtils.formatDuration(duration, "M") );
assertEquals( "0", DurationFormatUtils.formatDuration(duration, "d") );
assertEquals( "0", DurationFormatUtils.formatDuration(duration, "H") );
assertEquals( "1", DurationFormatUtils.formatDuration(duration, "m") );
assertEquals( "60", DurationFormatUtils.formatDuration(duration, "s") );
assertEquals( "60000", DurationFormatUtils.formatDuration(duration, "S") );
assertEquals( "01:00", DurationFormatUtils.formatDuration(duration, "mm:ss") );
assertEquals("0", DurationFormatUtils.formatDuration(duration, "y"));
assertEquals("0", DurationFormatUtils.formatDuration(duration, "M"));
assertEquals("0", DurationFormatUtils.formatDuration(duration, "d"));
assertEquals("0", DurationFormatUtils.formatDuration(duration, "H"));
assertEquals("1", DurationFormatUtils.formatDuration(duration, "m"));
assertEquals("60", DurationFormatUtils.formatDuration(duration, "s"));
assertEquals("60000", DurationFormatUtils.formatDuration(duration, "S"));
assertEquals("01:00", DurationFormatUtils.formatDuration(duration, "mm:ss"));
Calendar base = Calendar.getInstance();
base.set(2000, 0, 1, 0, 0, 0);
base.set(Calendar.MILLISECOND, 0);
Calendar cal = Calendar.getInstance();
cal.set(2003, 1, 1, 0, 0, 0);
cal.set(Calendar.MILLISECOND, 0);
@ -189,15 +263,15 @@ public class DurationFormatUtilsTest extends TestCase {
// don't use 1970 in test as time zones were less reliable in 1970 than now
// remember that duration formatting ignores time zones, working on strict hour lengths
int days = 366 + 365 + 365 + 31;
assertEquals( "0 0 " + days, DurationFormatUtils.formatDuration(duration, "y M d") );
assertEquals("0 0 " + days, DurationFormatUtils.formatDuration(duration, "y M d"));
}
public void testFormatPeriodISO(){
public void testFormatPeriodISO() {
TimeZone timeZone = TimeZone.getTimeZone("GMT-3");
Calendar base = Calendar.getInstance(timeZone);
base.set(1970, 0, 1, 0, 0, 0);
base.set(Calendar.MILLISECOND, 0);
Calendar cal = Calendar.getInstance(timeZone);
cal.set(2002, 1, 23, 9, 11, 12);
cal.set(Calendar.MILLISECOND, 1);
@ -206,15 +280,17 @@ public class DurationFormatUtilsTest extends TestCase {
text = DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT.format(cal);
assertEquals("2002-02-23T09:11:12-03:00", text);
// test fixture is the same as above, but now with extended format.
text = DurationFormatUtils.formatPeriod(base.getTime().getTime(), cal.getTime().getTime(), DurationFormatUtils.ISO_EXTENDED_FORMAT_PATTERN, false, timeZone);
text = DurationFormatUtils.formatPeriod(base.getTime().getTime(), cal.getTime().getTime(),
DurationFormatUtils.ISO_EXTENDED_FORMAT_PATTERN, false, timeZone);
assertEquals("P32Y1M22DT9H11M12.001S", text);
// test fixture from example in http://www.w3.org/TR/xmlschema-2/#duration
cal.set(1971, 1, 3, 10, 30, 0);
cal.set(Calendar.MILLISECOND, 0);
text = DurationFormatUtils.formatPeriod(base.getTime().getTime(), cal.getTime().getTime(), DurationFormatUtils.ISO_EXTENDED_FORMAT_PATTERN, false, timeZone);
text = DurationFormatUtils.formatPeriod(base.getTime().getTime(), cal.getTime().getTime(),
DurationFormatUtils.ISO_EXTENDED_FORMAT_PATTERN, false, timeZone);
assertEquals("P1Y1M2DT10H30M0.000S", text);
// want a way to say 'don't print the seconds in format()' or other fields for that matter:
//assertEquals("P1Y2M3DT10H30M", text);
// assertEquals("P1Y2M3DT10H30M", text);
}
public void testFormatPeriod() {
@ -222,119 +298,109 @@ public class DurationFormatUtilsTest extends TestCase {
cal1970.set(1970, 0, 1, 0, 0, 0);
cal1970.set(Calendar.MILLISECOND, 0);
long time1970 = cal1970.getTime().getTime();
assertEquals( "0", DurationFormatUtils.formatPeriod(time1970, time1970, "y") );
assertEquals( "0", DurationFormatUtils.formatPeriod(time1970, time1970, "M") );
assertEquals( "0", DurationFormatUtils.formatPeriod(time1970, time1970, "d") );
assertEquals( "0", DurationFormatUtils.formatPeriod(time1970, time1970, "H") );
assertEquals( "0", DurationFormatUtils.formatPeriod(time1970, time1970, "m") );
assertEquals( "0", DurationFormatUtils.formatPeriod(time1970, time1970, "s") );
assertEquals( "0", DurationFormatUtils.formatPeriod(time1970, time1970, "S") );
assertEquals( "0000", DurationFormatUtils.formatPeriod(time1970, time1970, "SSSS") );
assertEquals( "0000", DurationFormatUtils.formatPeriod(time1970, time1970, "yyyy") );
assertEquals( "0000", DurationFormatUtils.formatPeriod(time1970, time1970, "yyMM") );
assertEquals("0", DurationFormatUtils.formatPeriod(time1970, time1970, "y"));
assertEquals("0", DurationFormatUtils.formatPeriod(time1970, time1970, "M"));
assertEquals("0", DurationFormatUtils.formatPeriod(time1970, time1970, "d"));
assertEquals("0", DurationFormatUtils.formatPeriod(time1970, time1970, "H"));
assertEquals("0", DurationFormatUtils.formatPeriod(time1970, time1970, "m"));
assertEquals("0", DurationFormatUtils.formatPeriod(time1970, time1970, "s"));
assertEquals("0", DurationFormatUtils.formatPeriod(time1970, time1970, "S"));
assertEquals("0000", DurationFormatUtils.formatPeriod(time1970, time1970, "SSSS"));
assertEquals("0000", DurationFormatUtils.formatPeriod(time1970, time1970, "yyyy"));
assertEquals("0000", DurationFormatUtils.formatPeriod(time1970, time1970, "yyMM"));
long time = time1970 + 60 * 1000;
assertEquals( "0", DurationFormatUtils.formatPeriod(time1970, time, "y") );
assertEquals( "0", DurationFormatUtils.formatPeriod(time1970, time, "M") );
assertEquals( "0", DurationFormatUtils.formatPeriod(time1970, time, "d") );
assertEquals( "0", DurationFormatUtils.formatPeriod(time1970, time, "H") );
assertEquals( "1", DurationFormatUtils.formatPeriod(time1970, time, "m") );
assertEquals( "60", DurationFormatUtils.formatPeriod(time1970, time, "s") );
assertEquals( "60000", DurationFormatUtils.formatPeriod(time1970, time, "S") );
assertEquals( "01:00", DurationFormatUtils.formatPeriod(time1970, time, "mm:ss") );
assertEquals("0", DurationFormatUtils.formatPeriod(time1970, time, "y"));
assertEquals("0", DurationFormatUtils.formatPeriod(time1970, time, "M"));
assertEquals("0", DurationFormatUtils.formatPeriod(time1970, time, "d"));
assertEquals("0", DurationFormatUtils.formatPeriod(time1970, time, "H"));
assertEquals("1", DurationFormatUtils.formatPeriod(time1970, time, "m"));
assertEquals("60", DurationFormatUtils.formatPeriod(time1970, time, "s"));
assertEquals("60000", DurationFormatUtils.formatPeriod(time1970, time, "S"));
assertEquals("01:00", DurationFormatUtils.formatPeriod(time1970, time, "mm:ss"));
Calendar cal = Calendar.getInstance();
cal.set(1973, 6, 1, 0, 0, 0);
cal.set(Calendar.MILLISECOND, 0);
time = cal.getTime().getTime();
assertEquals( "36", DurationFormatUtils.formatPeriod(time1970, time, "yM") );
assertEquals( "3 years 6 months", DurationFormatUtils.formatPeriod(time1970, time, "y' years 'M' months'") );
assertEquals( "03/06", DurationFormatUtils.formatPeriod(time1970, time, "yy/MM") );
assertEquals("36", DurationFormatUtils.formatPeriod(time1970, time, "yM"));
assertEquals("3 years 6 months", DurationFormatUtils.formatPeriod(time1970, time, "y' years 'M' months'"));
assertEquals("03/06", DurationFormatUtils.formatPeriod(time1970, time, "yy/MM"));
cal.set(1973, 10, 1, 0, 0, 0);
cal.set(Calendar.MILLISECOND, 0);
time = cal.getTime().getTime();
assertEquals( "310", DurationFormatUtils.formatPeriod(time1970, time, "yM") );
assertEquals( "3 years 10 months", DurationFormatUtils.formatPeriod(time1970, time, "y' years 'M' months'") );
assertEquals( "03/10", DurationFormatUtils.formatPeriod(time1970, time, "yy/MM") );
assertEquals("310", DurationFormatUtils.formatPeriod(time1970, time, "yM"));
assertEquals("3 years 10 months", DurationFormatUtils.formatPeriod(time1970, time, "y' years 'M' months'"));
assertEquals("03/10", DurationFormatUtils.formatPeriod(time1970, time, "yy/MM"));
cal.set(1974, 0, 1, 0, 0, 0);
cal.set(Calendar.MILLISECOND, 0);
time = cal.getTime().getTime();
assertEquals( "40", DurationFormatUtils.formatPeriod(time1970, time, "yM") );
assertEquals( "4 years 0 months", DurationFormatUtils.formatPeriod(time1970, time, "y' years 'M' months'") );
assertEquals( "04/00", DurationFormatUtils.formatPeriod(time1970, time, "yy/MM") );
assertEquals( "48", DurationFormatUtils.formatPeriod(time1970, time, "M") );
assertEquals( "48", DurationFormatUtils.formatPeriod(time1970, time, "MM") );
assertEquals( "048", DurationFormatUtils.formatPeriod(time1970, time, "MMM") );
assertEquals("40", DurationFormatUtils.formatPeriod(time1970, time, "yM"));
assertEquals("4 years 0 months", DurationFormatUtils.formatPeriod(time1970, time, "y' years 'M' months'"));
assertEquals("04/00", DurationFormatUtils.formatPeriod(time1970, time, "yy/MM"));
assertEquals("48", DurationFormatUtils.formatPeriod(time1970, time, "M"));
assertEquals("48", DurationFormatUtils.formatPeriod(time1970, time, "MM"));
assertEquals("048", DurationFormatUtils.formatPeriod(time1970, time, "MMM"));
}
public void testLexx() {
// tests each constant
assertArrayEquals(
new DurationFormatUtils.Token[] {
new DurationFormatUtils.Token( DurationFormatUtils.y, 1),
new DurationFormatUtils.Token( DurationFormatUtils.M, 1),
new DurationFormatUtils.Token( DurationFormatUtils.d, 1),
new DurationFormatUtils.Token( DurationFormatUtils.H, 1),
new DurationFormatUtils.Token( DurationFormatUtils.m, 1),
new DurationFormatUtils.Token( DurationFormatUtils.s, 1),
new DurationFormatUtils.Token( DurationFormatUtils.S, 1)
}, DurationFormatUtils.lexx("yMdHmsS")
);
assertArrayEquals(new DurationFormatUtils.Token[]{
new DurationFormatUtils.Token(DurationFormatUtils.y, 1),
new DurationFormatUtils.Token(DurationFormatUtils.M, 1),
new DurationFormatUtils.Token(DurationFormatUtils.d, 1),
new DurationFormatUtils.Token(DurationFormatUtils.H, 1),
new DurationFormatUtils.Token(DurationFormatUtils.m, 1),
new DurationFormatUtils.Token(DurationFormatUtils.s, 1),
new DurationFormatUtils.Token(DurationFormatUtils.S, 1)}, DurationFormatUtils.lexx("yMdHmsS"));
// tests the ISO8601-like
assertArrayEquals(
new DurationFormatUtils.Token[] {
new DurationFormatUtils.Token( DurationFormatUtils.H, 1),
new DurationFormatUtils.Token( new StringBuffer(":"), 1),
new DurationFormatUtils.Token( DurationFormatUtils.m, 2),
new DurationFormatUtils.Token( new StringBuffer(":"), 1),
new DurationFormatUtils.Token( DurationFormatUtils.s, 2),
new DurationFormatUtils.Token( new StringBuffer("."), 1),
new DurationFormatUtils.Token( DurationFormatUtils.S, 3)
}, DurationFormatUtils.lexx("H:mm:ss.SSS")
);
assertArrayEquals(new DurationFormatUtils.Token[]{
new DurationFormatUtils.Token(DurationFormatUtils.H, 1),
new DurationFormatUtils.Token(new StringBuffer(":"), 1),
new DurationFormatUtils.Token(DurationFormatUtils.m, 2),
new DurationFormatUtils.Token(new StringBuffer(":"), 1),
new DurationFormatUtils.Token(DurationFormatUtils.s, 2),
new DurationFormatUtils.Token(new StringBuffer("."), 1),
new DurationFormatUtils.Token(DurationFormatUtils.S, 3)}, DurationFormatUtils.lexx("H:mm:ss.SSS"));
// test the iso extended format
assertArrayEquals(
new DurationFormatUtils.Token[] {
new DurationFormatUtils.Token( new StringBuffer("P"), 1),
new DurationFormatUtils.Token( DurationFormatUtils.y, 4),
new DurationFormatUtils.Token( new StringBuffer("Y"), 1),
new DurationFormatUtils.Token( DurationFormatUtils.M, 1),
new DurationFormatUtils.Token( new StringBuffer("M"), 1),
new DurationFormatUtils.Token( DurationFormatUtils.d, 1),
new DurationFormatUtils.Token( new StringBuffer("DT"), 1),
new DurationFormatUtils.Token( DurationFormatUtils.H, 1),
new DurationFormatUtils.Token( new StringBuffer("H"), 1),
new DurationFormatUtils.Token( DurationFormatUtils.m, 1),
new DurationFormatUtils.Token( new StringBuffer("M"), 1),
new DurationFormatUtils.Token( DurationFormatUtils.s, 1),
new DurationFormatUtils.Token( new StringBuffer("."), 1),
new DurationFormatUtils.Token( DurationFormatUtils.S, 1),
new DurationFormatUtils.Token( new StringBuffer("S"), 1)
},
DurationFormatUtils.lexx(DurationFormatUtils.ISO_EXTENDED_FORMAT_PATTERN)
);
assertArrayEquals(new DurationFormatUtils.Token[]{
new DurationFormatUtils.Token(new StringBuffer("P"), 1),
new DurationFormatUtils.Token(DurationFormatUtils.y, 4),
new DurationFormatUtils.Token(new StringBuffer("Y"), 1),
new DurationFormatUtils.Token(DurationFormatUtils.M, 1),
new DurationFormatUtils.Token(new StringBuffer("M"), 1),
new DurationFormatUtils.Token(DurationFormatUtils.d, 1),
new DurationFormatUtils.Token(new StringBuffer("DT"), 1),
new DurationFormatUtils.Token(DurationFormatUtils.H, 1),
new DurationFormatUtils.Token(new StringBuffer("H"), 1),
new DurationFormatUtils.Token(DurationFormatUtils.m, 1),
new DurationFormatUtils.Token(new StringBuffer("M"), 1),
new DurationFormatUtils.Token(DurationFormatUtils.s, 1),
new DurationFormatUtils.Token(new StringBuffer("."), 1),
new DurationFormatUtils.Token(DurationFormatUtils.S, 1),
new DurationFormatUtils.Token(new StringBuffer("S"), 1)}, DurationFormatUtils
.lexx(DurationFormatUtils.ISO_EXTENDED_FORMAT_PATTERN));
// test failures in equals
DurationFormatUtils.Token token = new DurationFormatUtils.Token( DurationFormatUtils.y, 4 );
assertFalse( "Token equal to non-Token class. ", token.equals(new Object()) );
assertFalse( "Token equal to Token with wrong value class. ", token.equals(
new DurationFormatUtils.Token( new Object() )
) );
assertFalse( "Token equal to Token with different count. ", token.equals(
new DurationFormatUtils.Token( DurationFormatUtils.y, 1 )
) );
DurationFormatUtils.Token numToken = new DurationFormatUtils.Token( new Integer(1), 4 );
assertTrue( "Token with Number value not equal to itself. ", numToken.equals( numToken ) );
DurationFormatUtils.Token token = new DurationFormatUtils.Token(DurationFormatUtils.y, 4);
assertFalse("Token equal to non-Token class. ", token.equals(new Object()));
assertFalse("Token equal to Token with wrong value class. ", token.equals(new DurationFormatUtils.Token(
new Object())));
assertFalse("Token equal to Token with different count. ", token.equals(new DurationFormatUtils.Token(
DurationFormatUtils.y, 1)));
DurationFormatUtils.Token numToken = new DurationFormatUtils.Token(new Integer(1), 4);
assertTrue("Token with Number value not equal to itself. ", numToken.equals(numToken));
}
private void assertArrayEquals(DurationFormatUtils.Token[] obj1, DurationFormatUtils.Token[] obj2) {
assertEquals( "Arrays are unequal length. ", obj1.length, obj2.length );
for(int i=0; i<obj1.length; i++) {
assertTrue( "Index " + i + " not equal, " + obj1[i] + " vs " + obj2, obj1[i].equals(obj2[i]));
assertEquals("Arrays are unequal length. ", obj1.length, obj2.length);
for (int i = 0; i < obj1.length; i++) {
assertTrue("Index " + i + " not equal, " + obj1[i] + " vs " + obj2, obj1[i].equals(obj2[i]));
}
}