Home » commons-lang-2.4-src » org.apache.commons » lang » time » [javadoc | source]
    1   /*
    2    * Copyright 2002-2005 The Apache Software Foundation.
    3    * 
    4    * Licensed under the Apache License, Version 2.0 (the "License");
    5    * you may not use this file except in compliance with the License.
    6    * You may obtain a copy of the License at
    7    * 
    8    *      http://www.apache.org/licenses/LICENSE-2.0
    9    * 
   10    * Unless required by applicable law or agreed to in writing, software
   11    * distributed under the License is distributed on an "AS IS" BASIS,
   12    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   13    * See the License for the specific language governing permissions and
   14    * limitations under the License.
   15    */
   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   /**
   29    * TestCase for DurationFormatUtils.
   30    *
   31    * @author Apache Ant - DateUtilsTest
   32    * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
   33    * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
   34    * @author Stephen Colebourne
   35    * @author <a href="mailto:ggregory@seagullsw.com">Gary Gregory</a>
   36    * @author Henri Yandell
   37    */
   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       //-----------------------------------------------------------------------
   55       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       //-----------------------------------------------------------------------
   65       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(); // duration from 2000-01-01 to cal
  189           // don't use 1970 in test as time zones were less reliable in 1970 than now
  190           // remember that duration formatting ignores time zones, working on strict hour lengths
  191           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           // repeat a test from testDateTimeISO to compare extended and not extended.
  206           text = DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT.format(cal);
  207           assertEquals("2002-02-23T09:11:12-03:00", text);
  208           // test fixture is the same as above, but now with extended format.
  209           text = DurationFormatUtils.formatPeriod(base.getTime().getTime(), cal.getTime().getTime(), DurationFormatUtils.ISO_EXTENDED_FORMAT_PATTERN, false, timeZone);
  210           assertEquals("P32Y1M22DT9H11M12.001S", text);
  211           // test fixture from example in http://www.w3.org/TR/xmlschema-2/#duration
  212           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           // want a way to say 'don't print the seconds in format()' or other fields for that matter:
  217           //assertEquals("P1Y2M3DT10H30M", text);
  218       }
  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           // tests each constant
  275           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           // tests the ISO8601-like
  288           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           // test the iso extended format
  301           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           // test failures in equals
  323           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   }

Save This Page
Home » commons-lang-2.4-src » org.apache.commons » lang » time » [javadoc | source]