1 16 package org.apache.commons.lang.time; 17 18 import java.lang.reflect.Constructor ; 19 import java.lang.reflect.Modifier ; 20 import java.util.Calendar ; 21 import java.util.TimeZone ; 22 23 import junit.framework.Test; 24 import junit.framework.TestCase; 25 import junit.framework.TestSuite; 26 import junit.textui.TestRunner; 27 28 38 public class DurationFormatUtilsTest extends TestCase { 39 40 public static void main(String [] args) { 41 TestRunner.run(suite()); 42 } 43 44 public static Test suite() { 45 TestSuite suite = new TestSuite(DurationFormatUtilsTest.class); 46 suite.setName("DurationFormatUtils Tests"); 47 return suite; 48 } 49 50 public DurationFormatUtilsTest(String s) { 51 super(s); 52 } 53 54 public void testConstructor() { 56 assertNotNull(new DurationFormatUtils()); 57 Constructor [] cons = DurationFormatUtils.class.getDeclaredConstructors(); 58 assertEquals(1, cons.length); 59 assertEquals(true, Modifier.isPublic(cons[0].getModifiers())); 60 assertEquals(true, Modifier.isPublic(DurationFormatUtils.class.getModifiers())); 61 assertEquals(false, Modifier.isFinal(DurationFormatUtils.class.getModifiers())); 62 } 63 64 public void testFormatDurationWords(){ 66 String text = null; 67 68 text = DurationFormatUtils.formatDurationWords(50*1000, true, false); 69 assertEquals("50 seconds", text); 70 text = DurationFormatUtils.formatDurationWords(65*1000, true, false); 71 assertEquals("1 minute 5 seconds", text); 72 text = DurationFormatUtils.formatDurationWords(120*1000, true, false); 73 assertEquals("2 minutes 0 seconds", text); 74 text = DurationFormatUtils.formatDurationWords(121*1000, true, false); 75 assertEquals("2 minutes 1 second", text); 76 text = DurationFormatUtils.formatDurationWords(72*60*1000, true, false); 77 assertEquals("1 hour 12 minutes 0 seconds", text); 78 text = DurationFormatUtils.formatDurationWords(24*60*60*1000, true, false); 79 assertEquals("1 day 0 hours 0 minutes 0 seconds", text); 80 81 text = DurationFormatUtils.formatDurationWords(50*1000, true, true); 82 assertEquals("50 seconds", text); 83 text = DurationFormatUtils.formatDurationWords(65*1000, true, true); 84 assertEquals("1 minute 5 seconds", text); 85 text = DurationFormatUtils.formatDurationWords(120*1000, true, true); 86 assertEquals("2 minutes", text); 87 text = DurationFormatUtils.formatDurationWords(121*1000, true, true); 88 assertEquals("2 minutes 1 second", text); 89 text = DurationFormatUtils.formatDurationWords(72*60*1000, true, true); 90 assertEquals("1 hour 12 minutes", text); 91 text = DurationFormatUtils.formatDurationWords(24*60*60*1000, true, true); 92 assertEquals("1 day", text); 93 94 text = DurationFormatUtils.formatDurationWords(50*1000, false, true); 95 assertEquals("0 days 0 hours 0 minutes 50 seconds", text); 96 text = DurationFormatUtils.formatDurationWords(65*1000, false, true); 97 assertEquals("0 days 0 hours 1 minute 5 seconds", text); 98 text = DurationFormatUtils.formatDurationWords(120*1000, false, true); 99 assertEquals("0 days 0 hours 2 minutes", text); 100 text = DurationFormatUtils.formatDurationWords(121*1000, false, true); 101 assertEquals("0 days 0 hours 2 minutes 1 second", text); 102 text = DurationFormatUtils.formatDurationWords(72*60*1000, false, true); 103 assertEquals("0 days 1 hour 12 minutes", text); 104 text = DurationFormatUtils.formatDurationWords(24*60*60*1000, false, true); 105 assertEquals("1 day", text); 106 107 text = DurationFormatUtils.formatDurationWords(50*1000, false, false); 108 assertEquals("0 days 0 hours 0 minutes 50 seconds", text); 109 text = DurationFormatUtils.formatDurationWords(65*1000, false, false); 110 assertEquals("0 days 0 hours 1 minute 5 seconds", text); 111 text = DurationFormatUtils.formatDurationWords(120*1000, false, false); 112 assertEquals("0 days 0 hours 2 minutes 0 seconds", text); 113 text = DurationFormatUtils.formatDurationWords(121*1000, false, false); 114 assertEquals("0 days 0 hours 2 minutes 1 second", text); 115 text = DurationFormatUtils.formatDurationWords(72*60*1000, false, false); 116 assertEquals("0 days 1 hour 12 minutes 0 seconds", text); 117 text = DurationFormatUtils.formatDurationWords(48*60*60*1000 + 72*60*1000 , false, false); 118 assertEquals("2 days 1 hour 12 minutes 0 seconds", text); 119 } 120 121 public void testFormatDurationHMS(){ 122 long time = 0; 123 assertEquals("0:00:00.000", DurationFormatUtils.formatDurationHMS(time)); 124 125 time = 1; 126 assertEquals("0:00:00.001", DurationFormatUtils.formatDurationHMS(time)); 127 128 time = 15; 129 assertEquals("0:00:00.015", DurationFormatUtils.formatDurationHMS(time)); 130 131 time = 165; 132 assertEquals("0:00:00.165", DurationFormatUtils.formatDurationHMS(time)); 133 134 time = 1675; 135 assertEquals("0:00:01.675", DurationFormatUtils.formatDurationHMS(time)); 136 137 time = 13465; 138 assertEquals("0:00:13.465", DurationFormatUtils.formatDurationHMS(time)); 139 140 time = 72789; 141 assertEquals("0:01:12.789", DurationFormatUtils.formatDurationHMS(time)); 142 143 time = 12789 + 32 * 60000; 144 assertEquals("0:32:12.789", DurationFormatUtils.formatDurationHMS(time)); 145 146 time = 12789 + 62 * 60000; 147 assertEquals("1:02:12.789", DurationFormatUtils.formatDurationHMS(time)); 148 } 149 150 public void testFormatDurationISO() { 151 assertEquals("P0Y0M0DT0H0M0.000S", DurationFormatUtils.formatDurationISO(0L)); 152 assertEquals("P0Y0M0DT0H0M0.001S", DurationFormatUtils.formatDurationISO(1L)); 153 assertEquals("P0Y0M0DT0H0M0.010S", DurationFormatUtils.formatDurationISO(10L)); 154 assertEquals("P0Y0M0DT0H0M0.100S", DurationFormatUtils.formatDurationISO(100L)); 155 assertEquals("P0Y0M0DT0H1M15.321S", DurationFormatUtils.formatDurationISO(75321L)); 156 } 157 158 public void testFormatDuration() { 159 long duration = 0; 160 assertEquals( "0", DurationFormatUtils.formatDuration(duration, "y") ); 161 assertEquals( "0", DurationFormatUtils.formatDuration(duration, "M") ); 162 assertEquals( "0", DurationFormatUtils.formatDuration(duration, "d") ); 163 assertEquals( "0", DurationFormatUtils.formatDuration(duration, "H") ); 164 assertEquals( "0", DurationFormatUtils.formatDuration(duration, "m") ); 165 assertEquals( "0", DurationFormatUtils.formatDuration(duration, "s") ); 166 assertEquals( "0", DurationFormatUtils.formatDuration(duration, "S") ); 167 assertEquals( "0000", DurationFormatUtils.formatDuration(duration, "SSSS") ); 168 assertEquals( "0000", DurationFormatUtils.formatDuration(duration, "yyyy") ); 169 assertEquals( "0000", DurationFormatUtils.formatDuration(duration, "yyMM") ); 170 171 duration = 60 * 1000; 172 assertEquals( "0", DurationFormatUtils.formatDuration(duration, "y") ); 173 assertEquals( "0", DurationFormatUtils.formatDuration(duration, "M") ); 174 assertEquals( "0", DurationFormatUtils.formatDuration(duration, "d") ); 175 assertEquals( "0", DurationFormatUtils.formatDuration(duration, "H") ); 176 assertEquals( "1", DurationFormatUtils.formatDuration(duration, "m") ); 177 assertEquals( "60", DurationFormatUtils.formatDuration(duration, "s") ); 178 assertEquals( "60000", DurationFormatUtils.formatDuration(duration, "S") ); 179 assertEquals( "01:00", DurationFormatUtils.formatDuration(duration, "mm:ss") ); 180 181 Calendar base = Calendar.getInstance(); 182 base.set(2000, 0, 1, 0, 0, 0); 183 base.set(Calendar.MILLISECOND, 0); 184 185 Calendar cal = Calendar.getInstance(); 186 cal.set(2003, 1, 1, 0, 0, 0); 187 cal.set(Calendar.MILLISECOND, 0); 188 duration = cal.getTime().getTime() - base.getTime().getTime(); int days = 366 + 365 + 365 + 31; 192 assertEquals( "0 0 " + days, DurationFormatUtils.formatDuration(duration, "y M d") ); 193 } 194 195 public void testFormatPeriodISO(){ 196 TimeZone timeZone = TimeZone.getTimeZone("GMT-3"); 197 Calendar base = Calendar.getInstance(timeZone); 198 base.set(1970, 0, 1, 0, 0, 0); 199 base.set(Calendar.MILLISECOND, 0); 200 201 Calendar cal = Calendar.getInstance(timeZone); 202 cal.set(2002, 1, 23, 9, 11, 12); 203 cal.set(Calendar.MILLISECOND, 1); 204 String text; 205 text = DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT.format(cal); 207 assertEquals("2002-02-23T09:11:12-03:00", text); 208 text = DurationFormatUtils.formatPeriod(base.getTime().getTime(), cal.getTime().getTime(), DurationFormatUtils.ISO_EXTENDED_FORMAT_PATTERN, false, timeZone); 210 assertEquals("P32Y1M22DT9H11M12.001S", text); 211 cal.set(1971, 1, 3, 10, 30, 0); 213 cal.set(Calendar.MILLISECOND, 0); 214 text = DurationFormatUtils.formatPeriod(base.getTime().getTime(), cal.getTime().getTime(), DurationFormatUtils.ISO_EXTENDED_FORMAT_PATTERN, false, timeZone); 215 assertEquals("P1Y1M2DT10H30M0.000S", text); 216 } 219 220 public void testFormatPeriod() { 221 Calendar cal1970 = Calendar.getInstance(); 222 cal1970.set(1970, 0, 1, 0, 0, 0); 223 cal1970.set(Calendar.MILLISECOND, 0); 224 long time1970 = cal1970.getTime().getTime(); 225 226 assertEquals( "0", DurationFormatUtils.formatPeriod(time1970, time1970, "y") ); 227 assertEquals( "0", DurationFormatUtils.formatPeriod(time1970, time1970, "M") ); 228 assertEquals( "0", DurationFormatUtils.formatPeriod(time1970, time1970, "d") ); 229 assertEquals( "0", DurationFormatUtils.formatPeriod(time1970, time1970, "H") ); 230 assertEquals( "0", DurationFormatUtils.formatPeriod(time1970, time1970, "m") ); 231 assertEquals( "0", DurationFormatUtils.formatPeriod(time1970, time1970, "s") ); 232 assertEquals( "0", DurationFormatUtils.formatPeriod(time1970, time1970, "S") ); 233 assertEquals( "0000", DurationFormatUtils.formatPeriod(time1970, time1970, "SSSS") ); 234 assertEquals( "0000", DurationFormatUtils.formatPeriod(time1970, time1970, "yyyy") ); 235 assertEquals( "0000", DurationFormatUtils.formatPeriod(time1970, time1970, "yyMM") ); 236 237 long time = time1970 + 60 * 1000; 238 assertEquals( "0", DurationFormatUtils.formatPeriod(time1970, time, "y") ); 239 assertEquals( "0", DurationFormatUtils.formatPeriod(time1970, time, "M") ); 240 assertEquals( "0", DurationFormatUtils.formatPeriod(time1970, time, "d") ); 241 assertEquals( "0", DurationFormatUtils.formatPeriod(time1970, time, "H") ); 242 assertEquals( "1", DurationFormatUtils.formatPeriod(time1970, time, "m") ); 243 assertEquals( "60", DurationFormatUtils.formatPeriod(time1970, time, "s") ); 244 assertEquals( "60000", DurationFormatUtils.formatPeriod(time1970, time, "S") ); 245 assertEquals( "01:00", DurationFormatUtils.formatPeriod(time1970, time, "mm:ss") ); 246 247 Calendar cal = Calendar.getInstance(); 248 cal.set(1973, 6, 1, 0, 0, 0); 249 cal.set(Calendar.MILLISECOND, 0); 250 time = cal.getTime().getTime(); 251 assertEquals( "36", DurationFormatUtils.formatPeriod(time1970, time, "yM") ); 252 assertEquals( "3 years 6 months", DurationFormatUtils.formatPeriod(time1970, time, "y' years 'M' months'") ); 253 assertEquals( "03/06", DurationFormatUtils.formatPeriod(time1970, time, "yy/MM") ); 254 255 cal.set(1973, 10, 1, 0, 0, 0); 256 cal.set(Calendar.MILLISECOND, 0); 257 time = cal.getTime().getTime(); 258 assertEquals( "310", DurationFormatUtils.formatPeriod(time1970, time, "yM") ); 259 assertEquals( "3 years 10 months", DurationFormatUtils.formatPeriod(time1970, time, "y' years 'M' months'") ); 260 assertEquals( "03/10", DurationFormatUtils.formatPeriod(time1970, time, "yy/MM") ); 261 262 cal.set(1974, 0, 1, 0, 0, 0); 263 cal.set(Calendar.MILLISECOND, 0); 264 time = cal.getTime().getTime(); 265 assertEquals( "40", DurationFormatUtils.formatPeriod(time1970, time, "yM") ); 266 assertEquals( "4 years 0 months", DurationFormatUtils.formatPeriod(time1970, time, "y' years 'M' months'") ); 267 assertEquals( "04/00", DurationFormatUtils.formatPeriod(time1970, time, "yy/MM") ); 268 assertEquals( "48", DurationFormatUtils.formatPeriod(time1970, time, "M") ); 269 assertEquals( "48", DurationFormatUtils.formatPeriod(time1970, time, "MM") ); 270 assertEquals( "048", DurationFormatUtils.formatPeriod(time1970, time, "MMM") ); 271 } 272 273 public void testLexx() { 274 assertArrayEquals( 276 new DurationFormatUtils.Token[] { 277 new DurationFormatUtils.Token( DurationFormatUtils.y, 1), 278 new DurationFormatUtils.Token( DurationFormatUtils.M, 1), 279 new DurationFormatUtils.Token( DurationFormatUtils.d, 1), 280 new DurationFormatUtils.Token( DurationFormatUtils.H, 1), 281 new DurationFormatUtils.Token( DurationFormatUtils.m, 1), 282 new DurationFormatUtils.Token( DurationFormatUtils.s, 1), 283 new DurationFormatUtils.Token( DurationFormatUtils.S, 1) 284 }, DurationFormatUtils.lexx("yMdHmsS") 285 ); 286 287 assertArrayEquals( 289 new DurationFormatUtils.Token[] { 290 new DurationFormatUtils.Token( DurationFormatUtils.H, 1), 291 new DurationFormatUtils.Token( new StringBuffer (":"), 1), 292 new DurationFormatUtils.Token( DurationFormatUtils.m, 2), 293 new DurationFormatUtils.Token( new StringBuffer (":"), 1), 294 new DurationFormatUtils.Token( DurationFormatUtils.s, 2), 295 new DurationFormatUtils.Token( new StringBuffer ("."), 1), 296 new DurationFormatUtils.Token( DurationFormatUtils.S, 3) 297 }, DurationFormatUtils.lexx("H:mm:ss.SSS") 298 ); 299 300 assertArrayEquals( 302 new DurationFormatUtils.Token[] { 303 new DurationFormatUtils.Token( new StringBuffer ("P"), 1), 304 new DurationFormatUtils.Token( DurationFormatUtils.y, 4), 305 new DurationFormatUtils.Token( new StringBuffer ("Y"), 1), 306 new DurationFormatUtils.Token( DurationFormatUtils.M, 1), 307 new DurationFormatUtils.Token( new StringBuffer ("M"), 1), 308 new DurationFormatUtils.Token( DurationFormatUtils.d, 1), 309 new DurationFormatUtils.Token( new StringBuffer ("DT"), 1), 310 new DurationFormatUtils.Token( DurationFormatUtils.H, 1), 311 new DurationFormatUtils.Token( new StringBuffer ("H"), 1), 312 new DurationFormatUtils.Token( DurationFormatUtils.m, 1), 313 new DurationFormatUtils.Token( new StringBuffer ("M"), 1), 314 new DurationFormatUtils.Token( DurationFormatUtils.s, 1), 315 new DurationFormatUtils.Token( new StringBuffer ("."), 1), 316 new DurationFormatUtils.Token( DurationFormatUtils.S, 1), 317 new DurationFormatUtils.Token( new StringBuffer ("S"), 1) 318 }, 319 DurationFormatUtils.lexx(DurationFormatUtils.ISO_EXTENDED_FORMAT_PATTERN) 320 ); 321 322 DurationFormatUtils.Token token = new DurationFormatUtils.Token( DurationFormatUtils.y, 4 ); 324 assertFalse( "Token equal to non-Token class. ", token.equals(new Object ()) ); 325 assertFalse( "Token equal to Token with wrong value class. ", token.equals( 326 new DurationFormatUtils.Token( new Object () ) 327 ) ); 328 assertFalse( "Token equal to Token with different count. ", token.equals( 329 new DurationFormatUtils.Token( DurationFormatUtils.y, 1 ) 330 ) ); 331 DurationFormatUtils.Token numToken = new DurationFormatUtils.Token( new Integer (1), 4 ); 332 assertTrue( "Token with Number value not equal to itself. ", numToken.equals( numToken ) ); 333 } 334 private void assertArrayEquals(DurationFormatUtils.Token[] obj1, DurationFormatUtils.Token[] obj2) { 335 assertEquals( "Arrays are unequal length. ", obj1.length, obj2.length ); 336 for(int i=0; i<obj1.length; i++) { 337 assertTrue( "Index " + i + " not equal, " + obj1[i] + " vs " + obj2, obj1[i].equals(obj2[i])); 338 } 339 } 340 341 } 342 | Popular Tags |